mysql怎么管理权限 mysql如何设置权限( 六 )


2、 请求核实阶段
一旦建立了连接,服务器就进入了访问控制的阶段2,也就是请求核实阶段 。对此连接上进来的每个请 求,服务器检查该请求要执行什么操作、是否有足够的权限来执行它,这正是需要授权表中的权限列发 挥作用的地方 。这些权限可以来自user、db、table_priv和column_priv表 。确认权限时 , MySQL首先 检查user表,如果指定的权限没有在user表中被授予,那么MySQL就会继续 检 查db表,db表是下一安全层级,其中的权限限定于数据库层级,在该层级的SELECT权限允许用户查看指 定数据库的所有表中的数据;如果在该层级没有找到限定的权限,则MySQL继续 检查tables_priv表 以 及 columns_priv表,如果所有权限表都检查完毕,但还是没有找到允许的权限操作,MySQL将 返回错 误信息 ,用户请求的操作不能执行,操作失败 。
提示: MySQL通过向下层级的顺序(从user表到columns_priv表)检查权限表,但并不是所有的权 限都要执行该过程 。例如 , 一个用户登录到MySQL服务器之后只执行对MySQL的管理操作,此时只 涉及管理权限,因此MySQL只检查user表 。另外,如果请求的权限操作不被允许 , MySQL也不会继 续检查下一层级的表 。
五、角色管理
1、创建角色
CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]...
角色名称的命名规则和用户名类似 。如果 host_name省略,默认为%,role_name不可省略 ,不可为 空 。
练习:我们现在需要创建一个经理的角色,就可以用下面的代码:
CREATE ROLE 'manager'@'localhost';
2、给角色赋予权限
创建角色之后,默认这个角色是没有任何权限的,我们需要给角色授权 。给角色授权的语法结构是:
GRANT privileges ON table_name TO 'role_name'[@'host_name'];
上述语句中privileges代表权限的名称,多个权限以逗号隔开 。可使用SHOW语句查询权限名称,图11-43 列出了部分权限列表 。
SHOW PRIVILEGES\G;
练习1:我们现在想给经理角色授予商品信息表、盘点表和应付账款表的只读权限 , 就可以用下面的代码 来实现:
GRANT SELECT ON demo.settlement TO 'manager';
GRANT SELECT ON demo.goodsmaster TO 'manager';
GRANT SELECT ON demo.invcount TO 'manager';
3、查看角色权限
赋予角色权限之后,我们可以通过 SHOW GRANTS 语句,来查看权限是否创建成功了:
只要你创建了一个角色,系统就会自动给你一个“ USAGE ”权限,意思是 连接登录数据库的权限。代码的 最后三行代表了我们给角色“manager”赋予的权限,也就是对商品信息表、盘点表和应付账款表的只读权 限 。结果显示,库管角色拥有商品信息表的只读权限和盘点表的增删改查权限 。
4、回收角色权限
角色授权后 , 可以对角色的权限进行维护,对权限进行添加或撤销 。添加权限使用GRANT语句,与角色 授权相同 。撤销角色或角色权限使用REVOKE语句 。修改了角色的权限,会影响拥有该角色的账户的权限 。撤销角色权限的SQL语法如下:
REVOKE privileges ON tablename FROM 'rolename';
练习:撤销school_write角色的权限 。(
(1)使用如下语句撤销school_write角色的权限 。
REVOKE INSERT, UPDATE, DELETE ON school.* FROM 'school_write';
(2)撤销后使用SHOW语句查看school_write对应的权限,语句如下 。
SHOW GRANTS FOR 'school_write';
5、删除角色
当我们需要对业务重新整合的时候,可能就需要对之前创建的角色进行清理 , 删除一些不会再使用的角 色 。删除角色的操作很简单,你只要掌握语法结构就行了 。

推荐阅读