用户
创建用户
格式:
CREATE USER 用户名@'客户端地址' IDENTIFIED BY '密码';
实例:
/* '%'表示不限,类似于正则通配符'*' */
/*创建用户test1,密码123456,可以用任何ip上进行连接登录。*/
CREATE USER test1 IDENTIFIED BY '123456';
/*创建用户test1,密码123456,只能在192.168.0.100上进行连接登录。*/
CREATE USER test2@'192.168.0.100' IDENTIFIED BY '123456';
/*创建用户test1,密码123456,只能在192.168.0网段上的主机进行连接登录。*/
CREATE USER test3@'192.168.0.%' IDENTIFIED BY '123456';
/*创建用户test1,密码123456,可以用任何ip上进行连接登录。*/
CREATE USER test3@'%' IDENTIFIED BY '123456';
如果出现:ERROR 1396 (HY000): Operation CREATE USER failed for 'xxx'@'%'
错误,则说明已经存在一个xxx用户了。
查询用户
select user,host from mysql.user;
修改密码
/*重置root用户的密码为空字符串(即不要密码)*/
update mysql.user set authentication_string="" where user="root";
commit;
flush privileges;
mysql8必须使用下面代码来重设密码:
ALTER user 'root'@'localhost' IDENTIFIED BY 'ABcd123456@';//密码太简单会报错Your password does not satisfy the current policy requirements
flush privileges;
权限
授权
格式:
grant 权限1,权限2,权限n on 指定库.指定表 to 用户名@'客户端地址'
实例:
/*授予用户test_user,操作test_db.test_tb表的任何权限。*/
grant all privileges on test_db.test_tb to test_user;
flush privileges;
/*将replication slave权限和replication client权限授予slave用户,不限IP(@'%'),不限库(on *.*),不限表(on *.*)*/
grant replication slave,replication client on *.* to 'slave'@'%';
flush privileges;
用户授权后,该用户只有重新连接 MySQL 数据库,权限才能生效。
查询权限
查看当前用户(自己)权限:
show grants;
查看其他 MySQL 用户权限:
show grants for 用户名@'客户端地址';
修改权限
撤销权限使用revoke
,跟grant
的类似,只需要把关键字to
换成from
即可:
/*撤销用户test_user,操作test_db.test_tb表的任何权限。*/
revoke all on test_db.test_tb from test_user;
权限生效问题
执行grant,revoke,set password,rename user
命令修改权限之后, MySQL会自动将修改后的权限信息同步加载到系统内存中
如果执行insert/update/delete
操作上述的系统权限表之后,则必须再执行刷新权限命令才能同步到系统内存中,刷新权限命令包括: flush privileges/mysqladmin flush-privileges / mysqladmin reload
如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效
如果是修改database级别的权限,则新权限在客户端执行use database命令后生效
如果是修改global级别的权限,则需要重新创建连接新权限才能生效
如果是修改global级别的权限,则需要重新创建连接新权限才能生效 (例如修改密码)
权限列表
赋权失败问题
使用root登录之后给自己赋权:
grant all on *.* to 'root'@'%';
报错:
ERROR 1410 (42000): You are not allowed to create a user with GRANT
原因:
因为当前用户虽然是root,但是是'root'@'localhost'
,所以没权限去赋权。
解决:
update user set host='%' where user='root';
flush privileges;
grant all on *.* to 'root'@'%';
flush privileges;
搞定!