MariaDB数据库用户和权限管理
----------------------------------------------------------------------------------------------------------------------------------------
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.%.%
创建用户示例
(2)重命名
RENAME USER 'old_user_name'@'HOST' TO 'new_user_name'@'HOST'
(3)删除用户
DROP USER 'USERNAME'@'HOST'
(4)修改密码
进入数据库,输入SQL语句
<1>mysql> SET PASSWORD FOR 'user'@'HOST' = PASSWORD('password')
<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-networking
<2>开启mysql服务,使用UPDATE命令修改管理员密码
UPDATE mysql.user as mu SET password=PASSWORD('rootpwd') WHERE mu.user='root';
<3>关闭mysqld进程,移除上述两个选项,重启mysqld
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 ;
(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[()];
注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存
(1) GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效
(2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES;