1.用户管理
MYSQL用户可以分为普通用户和root用户,root用户时超级管理员,拥有所有权限,包创建用户,删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。
MYSQL提供了许多语句来管理用户账号,这些语句可以用来管理包括登录和退出MYSQL服务器,创建用户,删除用户,密码管理和权限管理等内容。
MySQL数据库的安全性需要通过账户管理来保证。
1.1 登录MySQL服务器
登录MySQL服务器命令:
mysql -h hostname|hostIP -P port -u username -p DatabaseName -e "sql语句"
参数:
- -h 后接主机名或者主机IP
- -P 后接端口号,默认3306端口
- -u 用户名
- -p 密码
- DatabaseName 指明登录到那个数据库中,若没有,则直接登录到mysql数据库中,后可使用use命令来选择数据库
- -e 参数后面可以直接加sql语句,登录之后直接执行,然后退出
1.2 创建用户
在MySQL数据库中,官方推荐使用 CREATR USER
语句创建新用户,
MySQL中的用户存在于mysql数据库下的user表中,该表中是由host和user联合组成主键
#创建语句
create user 'zhangsan'@'localhost' identified by '123456';
1.3 修改用户
修改用户名
update user set user = 'lisi' where user = 'zhangsan' and host='%';
#修改用户名之后需要刷新下权限
FLUSH PRIVILEGES;
1.4 删除用户
-
方式一:使用DROP方式删除(推荐)
使用 drop user 语句删除用户时,必须拥有 drop user权限
drop user user[,user]...;
-
方式二:使用DELETE方式删除(不推荐,可能会有残留)
1.5 设置当前用户密码
适用于root用户修改自己的密码,以及普通用户登录后修改自己的密码
-
使用 ALTER USER 命令来修改当前用户的密码
用户可以使用 ALTER 命令来修改自身密码,如下语句代表修改当前登录用的密码,基本语法如下:
ALTER USER USER() IDENTIFIED BY "NEW PWD";
-
使用SET语句来修改当前用户密码
SET PASSWORD="NEW PWD";
1.6 设置其他用户密码
2.权限管理
2.1 权限列表
查看权限列表
show privileges;
2.2 授予权限的原则
权限控制主要是出于安全因素,因此要遵循以下几个经验原则:
- 只授予能满足需要的最小权限,防止用户干坏事,比如用户只是需要查询,俺就只给select权限就可以了,不要给与用户赋予update,insert或者delete权限。
- 创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
- 为每个用户设置满足密码复杂度的密码。
- 定期清理不需要的用户,回收权限或者删除用户。
2.3 授予权限
给用户授权方式有两种,分别是通过把角色赋予用户给用户授权和直接给用户授权。
授权命令:
GRANT 权限1,权限2,...权限n ON 数据库名称,表名称 TO 用户名@用户地址 [IDENTIFIED BY '密码口令']
- 该权限如果发现没有该用户,则会直接新建一个用户。
比如:
-
给zs用户用本地命令行方式,授予heima这个库下所有表的增删改查的权限。
GRANT SELECT,INSERT,UPDATE,DELETE ON heima.* TO 'zs'@'%';
-
赋予lisi全部权限
grant all privileges on *.* to 'lisi'@'%';
注:此时的用户,默认是没有给别人赋予权限的权限的
- 如果需要赋予包括grant的权限,添加参数 "WITH GRANT OPTION"这个选项即可,表示该用户可以将自己拥有的权限赋予给别人。
2.4 查看权限
-
查看当前用户权限
SHOW GRANTS; # 或 SHOW GRANTS FOR CURRENT_USER; # 或 SHOW GRANTS FOR CURRENT_USER();
-
查看某用户的全局权限
SHOW GRANTS FOR 'user'@'主机地址'
2.5 收回权限
收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定成功上保证系统的安全性。mysql中使用REVOKE语句取消用户的某些权限,使用REVOKE收回权限之后,用户账户的记录将从db,host,tables_priv和colums_priv表中删除,但是用户账户记录仍然在user表中保存(删除user表中的账户记录使用DROP USER语句)
注意:在将用户账户从user表删除之前,应该收回相应用户的所有权限。
-
收回权限命令
REVOKE 权限1,权限2,...权限n ON 库名.表名 FROM 用户名@用户地址