用户、角色、权限
0.cmd命令查询(完整)
mysql -uroot -hlocalhost -P3306 -p mystudy -e "select * from employee";
1.用户
#1.1 创建用户 USE mysql; SELECT HOST, USER FROM USER; CREATE USER 'fankwang'@'%' IDENTIFIED BY 'abc123'; #或者 CREATE USER 'fankwang'@'localhost' IDENTIFIED BY 'abc123';
#1.2 修改用户 #修改(一般不常用): USE mysql; SELECT HOST, USER FROM USER; UPDATE USER SET USER='frankwang1' WHERE USER='frankwang' AND HOST='%' #再刷新一下: FLUSH PRIVILEGES;
#1.3 删除用户 USE mysql; SELECT HOST, USER FROM USER; DROP USER 'fankwang'; #默认host为%的一条frankwang数据 #或者 DROP USER 'frankwang'@'localhost'; #不需要再刷新:FLUSH PRIVILEGES; #不推荐通过DELETE FROM USER U WHERE USER='frankwang'进行删除,系统会有残留信息保留。 #DROP 命令会删除用户以及对应的权限,执行命令后你会发现mysql.user表和mysql.db表的相应记录都消失了。
2. 密码
#2.1 设置密码, 场景1:修改自己的密码,root修改自己的密码,登录用户修改自己的密码; #① 推荐写法: ALTER USER USER() IDENTIFIED BY 'abc1234'; #② SET PASSWORD ='abc1234';
#2.2 设置密码, 场景2: 修改其他用户的密码 #① ALTER USER 'fankwang'@'localhost' IDENTIFIED BY 'abc1234'; #② SET PASSWORD FOR 'fankwang'@'localhost'= 'abc123';
#*2.3 密码管理(了解) #①密码过期:要求定期修改密码 #①密码重用限制:不允许使用旧密码 #③密码强度评估:要求使用高强度的密码
3. 权限
#3.1 权限列表 #查看MySQL所有权限 SHOW PRIVILEGES;

#3.2 授予权限 #① 授予权限原则: #1> 只授予能满足需要的最小权限 #2> 创建用户的时候限制用户的登录主机,一般是限制成指定的IP或者内外IP段 #3> 为每个用户设置满足密码复杂度的密码 #4> 定期清理不需要的用户,回收权限或者删除用户 #② 授予权限 #1> 直接给用户权限 #查询权限: SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER(); SHOW GRANTS FOR 'emmajia'@'%'; #授予权限: GRANT SELECT,UPDATE,DELETE ON dbtest1.* TO 'fankwang'@'localhost'; #dbtest1.* : dbtestl数据库下的所有表 #授予某个用户所有权限 GRANT ALL PRIVILEGES ON *.* TO 'emmajia'@'%'; #收回权限 REVOKE SELECT ON dbtest1.* FROM 'fankwang'@'localhost'; #回收select权限 #2> 角色赋予用户给用户授权 #详见,下面角色的内容

#3.3 权限表(权限底层剖析) #MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中。 #MySQL数据库系统会根据这些权限表的内容为每个用户赋予响应的权限。 #这些权限表中最重要的是:user表 db表 table_priv表 column_priv表 proc_priv表等,在mysql数据库下。 #在MySQL启动时,服务器将这些数据库表中权限信息的内容读入内存。
#3.4 访问控制(了解) #正常情况下,并不希望每个用户都可以执行所有的数据库操作。当MySQL允许一个用户执行各种操作时, #它将首先核实该用户向MySQL服务器发送的连接请求,然后确认用户的操作请求是否被允许。这个过程 #为MySQL中的访问控制过程。 #MySQL的访问控制分为两个阶段:连接核实阶段 和 请求核实阶段 #① 连接核实阶段 #当用户试图连接MSQL服务器时,服务器基于用户的身份以及用户是否能提供正确的密码验证身份来确定接受或者拒绝连接。 #即客户端用户会在连接请求中提供用户名、主机地址、用户密码,MySQL服务器接收到用户请求后, #会”使用user表中的host、user和authentication_string这3个字段匹配客户端提供信息”*。 #服务器只有在user表记录的Host和User字段匹配客户端主机名和用户名,并且提供正确的密码时才接受连接。 #如果连接核实没有通过,服务器就完全拒绝访问;否则,服务器接受连接,然后进入阶段2等待用户请求 #③ 请求核实阶段 #一旦建立了连接,服务器就进入了访问控制的阶段2,也就是请求核实阶段。 #对此连接上进来的每个请求,服务器检查该请求要执行什么操作、是否有足够的权限来执行它, #这正是需要授权表中的权限列发挥作用的地方。这些权限可以来自user、db、table_priv和column_priv表。

4. 角色
#4.1 角色的理解 #MySQL8.0中引入的新功能。在MySQL中,角色是权限的集合,可以为角色添加或移除权限。 #用户可以被赋予角色,同事也被授予角色包含的权限。 #对角色进行操作需要较高的权限。并且像用户账号一样,角色可以拥有授予和撤销的权限。 #引入角色的目的是:方便管理拥有相同权限的用户。
#4.2 创建角色 CREATE ROLE 'manager'@'%';
#4.3 给角色赋予权限 GRANT SELECT,UPDATE ON dbtest1.* TO 'manager'@'%'; #给manager角色授予dbtest1数据库下面所有表的select权限 GRANT ALL PRIVILEGES ON *.* TO 'boss'@'%'; #给boss角色授予全部权限
#4.4 查看角色的权限 SHOW GRANTS FOR 'manager'@'%';
#4.5 回收角色的权限 REVOKE UPDATE ON dbtest1.* FROM 'manager'@'%';
#4.6 删除角色 DROP ROLE 'admin';
#4.7 把角色给用户 GRANT 'manager'@'%' TO 'wang5'@'%'; #查看角色状态: SELECT CURRENT_ROLE(); #再者需要激活角色,才起作用 #① SET DEFAULT ROLE 'manager'@'%' TO 'wang5'@'%'; SELECT CURRENT_ROLE(); #② SHOW VARIABLES LIKE 'activate_all_roles_on_login'; SET GLOBAL activate_all_roles_on_login=0N; SELECT CURRENT_ROLE();
#4.8 撤销用户角色 REVOKE 'manager'@'%' FROM 'wang5'@'%'; SHOW GRANTS FOR 'wang5'@'%';
#4.9 设置强制角色 #强制角色是给每个创建账户的默认角色,不需要手动设置。强制角色无法被 REVOKE 或者 DROP。

-------

浙公网安备 33010602011771号