mysql 用户管理的粗略认识
1.创建新用户并使用grant赋予权限:
CREATE USER 'z1'@'%' IDENTIFIED BY '123456'; #其中,'z1'@'%' 是指新建用户z1,使用该用户名可以从任何主机来连接数据库,'123456'是密码
刚创建的用户默认是没有权限的,需要使用grant指令进行权限的授予,如下所示:
grant指令完整格式:grant 权限列表 on 数据库名.数据表名 to ‘用户名’@’主机’ identified by ‘密码’ with grant option;
数据库名.*代表库下所有的表;
可使用“*”表示所有数据库或所有数据表,“%”表示任何主机地址。
with grant option:这个选项表示该用户可以将自己拥有的权限授权给别人,可以不添加
也可以使用grant指令在授权时修改密码,例如:grant select on *.* to z2@localhost identified by '111111' with grant option;
权限列表可参考:https://blog.51cto.com/11555417/2160730,常见的有create/drop/select/delete等
给用户赋权限:
GRANT ALL PRIVILEGES ON *.* TO z1; #增加除Grant_priv以外的所有权限 GRANT ALL PRIVILEGES ON *.* TO z1 WITH GRANT OPTION; #增加Grant权限
关于远程登录的其他知识点:
Host值
|
User值
|
匹配的连接
|
%
|
'z1'
|
z1 可以从任何主机来连接
|
%
|
''
|
任何用户,可以从任何主机来连接
|
%.loc.gov
|
'z1'
|
z1 可以从loc.gov域的任何主机来连接
|
172.168.18.200
|
'z1'
|
z1 可以从172.168.18.200的ip地址的主机来连接
|
172.168.18.%
|
'z1'
|
z1 可以从172.168.18 的网段的任何主机来连接
|
2.查看用户权限:
select * from user\G; SHOW GRANTS FOR z1; #host值是%,只要输入用户名 SHOW GRANTS FOR z1@localhost; #如果host值不是%,则需要输入host
3. Mysql用户权限回收:
revoke指令格式:revoke 权限列表 on 数据库名.数据表名 from 用户名@主机;
示例:
revoke drop on *.* from test@localhost;#回收drop权限 revoke update,insert on *.* from test@'%';#回收insert,update权限
如果使用grant db.*的方式给与了select,update权限,后边再使用revoke回收某张表的update权限是不起作用的
4. 对账户重命名:
rename user '旧用户名'@'旧主机' to '新用户名'@'新主机';
示例:
rename user z1@'%' to z2@localhost;
除了rename外,还可以使用update的方式
use mysql; update user set user =‘z2’,host='localhost' where user =‘z1’ and host='%';
MySQL 5.7 新增了mysql.session 和 mysql.sys两个默认用户,这两个用户别乱动。
mysql.sys:用于 sys schema中对象的定义。使用 mysql.sys 用户可避免DBA重命名或者删除root用户时发生的问题。该用户已被锁定,客户端无法连接。
mysql.session:插件内部使用来访问服务器。该用户已被锁定,客户端无法连接。
参考:MySQL修改用户名
5. Mysql用户密码修改:
方法一:使用set password命令
set password for '用户名'@'主机' ='新密码'; #flush privileges;#在mysql5.7.28中不刷新权限,也立即生效了
示例:
SET PASSWORD FOR 'z2'@'localhost' ='7777';
方法二:使用grant指令在授权时修改密码:
grant select on 数据库名.数据表名 to 用户名@主机 identified by '新密码' with grant option;
示例:
grant select on *.* to z2@localhost identified by '111111' with grant option;#会有报警,意思是说后续mysql版本中会移除该修改密码的方式,可以使用 ALTER USER的方式代替。该方式失效
方法三:运行mysqladmin脚本文件
该文件一般在mysql安装目录下的bin目录中。进入该目录,根据一下两种具体情况输入命令(只有root用户有这个权限)。
bin目录:/usr/bin,在该目录下有可执行文件mysqladmin
(1)用户尚无密码:
mysqladmin -u 用户名 password 新密码;
(2)用户已有密码:
mysqladmin -u 用户名 -p password 新密码; 回车后会提示输入旧密码 举例:mysqladmin -u z2 -p password 8888
执行后会有警告信息,不影响
6.删除用户
DROP USER <用户名1> [ , <用户名2> ]… drop user '用户名'@'主机';
使用 DROP USER 语句应该注意以下几点:
- DROP USER 语句可用于删除一个或多个 MySQL 账户,并撤销其原有权限。
- 使用 DROP USER 语句必须拥有 MySQL 中的 MySQL 数据库的 DELETE 权限或全局 CREATE USER 权限。
- 在 DROP USER 语句的使用中,若没有明确地给出账户的主机名,则该主机名默认为“%”。
参考:https://www.cnblogs.com/MrHSR/p/9809702.html