八、DCL
DCL:用于定义用户的访问权限和安全级别。
1 介绍
目前为止,默认使用的都是 root 用户,超级管理员,拥有全部权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多项目的数据库,所以,我们应该根据不同的项目建立不同的用户、分配不同的权限来管理和维护数据库。
2 创建用户
语法:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
#用户名:要创建的用户
#主机名:指定该用户在哪个主机上可以登录,如果是本地用户可以使用 localhost ,如果想让该用户可以从任意远程主机登录,可以使用通配符 %
#密码:该用户的登录密码,密码可以为空,如果为空则表示该用户可以不需要密码登录服务器。
示例:
# user1 用户只能在 localhost 这个 IP 登录 mysql 服务器
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
# user2 用户可以在任何电脑上远程登录 mysql 服务器
CREATE USER 'user2'@'%' IDENTIFIED BY '123';
3 授权和取消授权
授权语法:
GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
# GRANT:授权关键字
# 授予用户的权限:如 SELECT ,INSERT ,UPDATE 等。如果要授予所的权限则使用 ALL 。
# 数据库名.表名:该用户可以操作哪个数据库的哪些表。如果要授予该用户对所有数据库和表的相应操作权限则可用 * 表示,如 *.* 。
# '用户名'@'主机名': 给哪个用户授权。
示例:
# 给 user1 用户分配对 test 这个数据库操作的权限
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'user1'@'localhost';
# 给 user2 用户分配对所有数据库操作的权限
GRANT ALL ON *.* TO 'user2'@'%';
撤销授权语法:
REVOKE 权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名';
示例:
# 撤销 user1 用户对 test 操作的权限
REVOKE ALL ON test.* FROM 'user1'@'localhost';
4 查看权限
语法:
SHOW GRANTS FOR '用户名'@'主机名';
示例:
# 查看 user2 用户的权限
SHOW GRANTS FOR 'user2'@'%';
5 删除用户
语法:
DROP USER '用户名'@'主机名'
示例:
# 删除 user2
DROP USER 'user2'@'%';
6 修改用户密码
6.1 修改管理员密码
语法(在bash终端,登录之前操作):
mysqladmin -uroot -p password 新密码
6.2 修改普通用户的密码
语法(root用户登录后操作):
SET PASSWORD FOR '用户名' @'主机名' = PASSWORD ( '新密码' );