数据库篇(4)—数据库用户和权限管理

                                    数据库用户和权限管理

----------------------------------------------------------------------------------------------------------------------------------------

1、元数据数据库:mysql

    系统授权表:转到mysql数据库下,show tables;语句查看

    db,host,user

    columns_priv, tables_priv, procs_priv, proxies_priv

2、用户管理

    (1)创建用户

    CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];

    默认权限:USAGE

    格式:'USERNAME'@'HOST',其中HOST有:

    主机名、IP地址或者Network、通配符方式:%,172.16.%.%

    创建用户示例1.png

    (2)重命名

    RENAME USER 'old_user_name'@'HOST' TO 'new_user_name'@'HOST'

    (3)删除用户

    DROP USER 'USERNAME'@'HOST'2.png

(4)修改密码

    进入数据库,输入SQL语句

    <1>mysql> SET PASSWORD FOR 'user'@'HOST' = PASSWORD('password')3.png

    <2>mysql> UPDATE mysql.user SET password=PASSWORD('password') WHERE 条件从句;

        此方法需要结束后输入flush privileges;进行刷新才会生效

    <3>LINUX命令行:mysqladmin -u USER -pOLDPASS password 'NEWPASSWORD'

(5)忘记管理员密码的解决办法

    <1>停止mysql服务,vim /etc/mysqld,为其使用如下选项:skip-grant-tables、skip-networking4.png

    <2>开启mysql服务,使用UPDATE命令修改管理员密码

    UPDATE mysql.user as mu SET password=PASSWORD('rootpwd') WHERE mu.user='root';5.png

    <3>关闭mysqld进程,移除上述两个选项,重启mysqld6.png

3、MySQL权限管理

    权限类别:管理类、程序类、数据库级别、表级别、字段级别

4、授权和回收权限

(1)授权SQL语句

    GRANT pri_type on obj_type pri_level TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION]

        pri_type:ALL所有权限,或者select(col1)、insert(col1,col2)等权限

        obj_type:表、函数或者存储过程

        pri_level:*所有库、*.*所有库的所有表、db_name.*某个数据库的所有表、

        db_name.routine_name指定某个数据库的函数存储过程或者触发器

        WITH GRANT OPTION:可以将同样的权限授权给其他用户

    示例:GRANT SELECT (name), INSERT (name,age) ON mydb.mytbl TO 'someuser'@'somehost‘;

        IDENTIFIED BY 'password'加重加颜色是因为,我们可以使用这句话来创建用户,并赋予权限,一条命令便可执行,不用两条,例如:GRANT SELECT (user,host) ON

mysql.user TO 'test5'@'localhost' WITH GRANT OPTION ;7.png

(2)取消授权

    REVOKE pri_type on obj_type pri_level FROM 'user'@'host'

(3)查看指定用户获得的授权

    Help SHOW GRANTS

    SHOW GRANTS FOR 'user'@'host';

    SHOW GRANTS FOR CURRENT_USER[()];8.png

    注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存

(1) GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效

(2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES;

猜你喜欢

转载自blog.51cto.com/13873498/2298379