# 第03章_用户与权限管理
# 1. 用户管理
# 创建用户
USE mysql;
SELECT * FROM user;
CREATE USER 'zhang3' IDENTIFIED BY '123456';
SELECT Host,User FROM user;
CREATE USER 'zhang3' IDENTIFIED BY '123456';
CREATE USER 'zhang3'@'localhost' IDENTIFIED BY '123456';
SELECT Host,User FROM user;
CREATE USER 'li4'@'%' IDENTIFIED BY '123456';
SELECT Host,User FROM user;
# 修改用户
UPDATE user SET User = 'wang5' WHERE User = 'li4' AND Host = '%';
FLUSH PRIVILEGES;
SELECT Host,User FROM user;
# 删除用户
DROP USER 'wang5';
DROP USER 'zhang3'@'localhost';
SELECT Host,User FROM user;
# 设置当前用户密码
# 使用ALTER USER命令来修改当前用户密码
ALTER USER USER() IDENTIFIED BY '123456..';
ALTER USER USER() IDENTIFIED BY '123456';
# 使用SET语句来修改当前用户密码
SET PASSWORD = '123456..';
SET PASSWORD = '123456';
USE mysql;
DESC user;
SELECT Host,User,authentication_string FROM user;
# 修改其它用户密码
ALTER USER 'zhang3'@'%' IDENTIFIED BY 'hello';
SET PASSWORD FOR 'zhang3'@'%' = '123456';
# 2. 权限管理
# 权限列表
# (1) CREATE和DROP权限 ,可以创建新的数据库和表,或删除(移掉)已有的数据库和表。
# 如果将MySQL数据库中的DROP权限授予某用户,用户就可以删除MySQL访问权限保存的数据库。
# (2)SELECT、INSERT、UPDATE和DELETE权限 允许在一个数据库现有的表上实施操作。
# (3) SELECT权限只有在它们真正从一个表中检索行时才被用到。
# (4) INDEX权限 允许创建或删除索引,INDEX适用于已有的表。如果具有某个表的CREATE权限,
# 就可以在CREATE TABLE语句中包括索引定义。
# (5) ALTER权限 可以使用ALTER TABLE来更改表的结构和重新命名表。
# (6) CREATE ROUTINE权限 用来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序,
# EXECUTE权限 用来执行保存的程序。
# (7) GRANT权限 允许授权给其他用户,可用于数据库、表和保存的程序。
# (8) FILE权限 使用户可以使用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读或写服务器上的文件,
# 任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件
# (说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。
SHOW PRIVILEGES;
# 授予权限的原则
# 权限控制主要是出于安全因素,因此需要遵循以下几个 经验原则 :
# 1、只授予能 满足需要的最小权限 ,防止用户干坏事。比如用户只是需要查询,
# 那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
# 2、创建用户的时候 限制用户的登录主机 ,一般是限制成指定IP或者内网IP段。
# 3、为每个用户 设置满足密码复杂度的密码 。
# 4、 定期清理不需要的用户 ,回收权限或者删除用户。
# 授予权限
# 给用户授权的方式有 2 种,分别是通过把 角色赋予用户给用户授权 和 直接给用户授权 。
# 用户是数据库的使用者,我们可以通过给用户授予访问数据库中资源的权限,来控制使用者对数据库的访问,
# 消除安全隐患。
SHOW DATABASES;
GRANT SELECT,UPDATE ON dbtest1.* TO 'zhang3'@'%';
GRANT DELETE ON dbtest1.* TO 'zhang3'@'%';
CREATE USER 'li4' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'li4'@'%';
# 我们在开发应用的时候,经常会遇到一种需求,就是要根据用户的不同,对数据进行横向和纵向的分组。
# 所谓横向的分组,就是指用户可以接触到的数据的范围,比如可以看到哪些表的数据;
# 所谓纵向的分组,就是指用户对接触到的数据能访问到什么程度,比如能看、能改,甚至是删除。
# 查看权限
SHOW GRANTS;
# 收回权限
REVOKE SELECT ON dbtest1.* FROM 'zhang3'@'%';
REVOKE ALL PRIVILEGES ON *.* FROM 'li4'@'%';
GRANT SYSTEM_USER ON *.* TO root@'%';
REVOKE ALL PRIVILEGES ON *.* FROM 'li4'@'%';
# 3. 权限表
USE mysql;
SHOW TABLES;
DESC user;
SELECT Host,User,authentication_string FROM user;
# user表
DESC user;
# db表
DESC db;
# tables_priv表
DESC tables_priv;
# columns_priv表
DESC columns_priv;
# 5. 角色管理
# 角色的理解
# 引入角色的目的是 方便管理拥有相同权限的用户 。恰当的权限设定,可以确保数据的安全性,这是至关重要的。
# 创建角色
CREATE ROLE 'manager'@'%';
CREATE ROLE 'boss'@'%';
# 给角色赋予权限
USE dbtest1;
SHOW TABLES;
GRANT SELECT,UPDATE ON dbtest1.* TO 'manager';
GRANT ALL PRIVILEGES ON *.* TO 'boss'@'%';
# 查看角色的权限
SHOW GRANTS FOR 'manager'@'%';
SHOW GRANTS FOR 'boss';
# 回收角色的权限
REVOKE UPDATE ON dbtest1.* FROM 'manager';
SHOW GRANTS FOR 'manager';
# 删除角色
CREATE ROLE 'admin';
DROP ROLE 'admin';
SHOW GRANTS FOR 'admin';
# 给用户赋予角色
USE mysql;
SELECT Host,User FROM user;
CREATE USER 'wang5'@'%' IDENTIFIED BY '123456';
GRANT 'manager'@'%' TO 'wang5'@'%';
SHOW GRANTS FOR 'wang5';
# 激活角色
SET DEFAULT ROLE 'manager'@'%' TO 'wang5'@'%';
# 撤销用户的角色
REVOKE 'manager'@'%' FROM 'wang5'@'%';
暂无评论