MySQL为角色授权(附带实例)
角色是在 MySQL 8.0 中引入的新功能,可以理解为权限的集合。用户可以被赋予角色,同时被授予角色包含的权限。
引入角色的目的是方便管理拥有相同权限的用户。恰当的权限设定可以确保数据库的安全性。在实际应用中,为了确保数据库的安全性,需要授予用户相应的权限。当用户数量较多时,为了避免单独授予每个用户多个权限,可以先将权限集合放入角色中,再赋予用户相应的角色。
新创建的角色默认是没有任何权限的,我们需要给角色授权。给角色授权的命令语法如下所示。
其中,privileges 代表权限名,多个权限之间用逗号分隔。可以使用 SHOW 语句查看权限名,如下所示:
例如,我们想授予角色 student 对图书表(book表)、试卷表(test_paper表)和班级表(class表)的只读权限,就可以使用如下 SQL 语句实现:
如果我们想授予角色 teacher 对试卷表的增、删、改、查权限和对图书表的只读权限,对班级表没有操作权限,则可以使用如下 SQL 语句实现:
再举一个例子,要求如下:
具体实现如下所示:
引入角色的目的是方便管理拥有相同权限的用户。恰当的权限设定可以确保数据库的安全性。在实际应用中,为了确保数据库的安全性,需要授予用户相应的权限。当用户数量较多时,为了避免单独授予每个用户多个权限,可以先将权限集合放入角色中,再赋予用户相应的角色。
新创建的角色默认是没有任何权限的,我们需要给角色授权。给角色授权的命令语法如下所示。
mysql> GRANT privileges ON table_name TO 'role_name'[@'host_name'];
其中,privileges 代表权限名,多个权限之间用逗号分隔。可以使用 SHOW 语句查看权限名,如下所示:
mysql> SHOW privileges\G;
例如,我们想授予角色 student 对图书表(book表)、试卷表(test_paper表)和班级表(class表)的只读权限,就可以使用如下 SQL 语句实现:
#授予角色student对图书表的只读权限 mysql> GRANT SELECT ON demo.book TO 'student'; #授予角色student对试卷表的只读权限 mysql> GRANT SELECT ON demo.test_paper TO 'student'; #授予角色student对班级表的只读权限 mysql> GRANT SELECT ON demo.class TO 'student';
如果我们想授予角色 teacher 对试卷表的增、删、改、查权限和对图书表的只读权限,对班级表没有操作权限,则可以使用如下 SQL 语句实现:
#授予角色teacher对试卷表的增、删、改、查权限 mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON demo.test_paper TO 'teacher'; #授予角色teacher对图书表的只读权限 mysql> GRANT SELECT ON demo.book TO 'teacher'; #对班级表没有操作权限,无须设置
再举一个例子,要求如下:
- 授予开发人员对 demo 数据库中所有表的所有权限;
- 授予产品人员对 demo 数据库中所有表的查询权限;
- 授予测试人员对 demo 数据库中所有表的修改权限。
具体实现如下所示:
#授予开发人员对demo数据库中所有表的所有权限 mysql> GRANT ALL PRIVILEGES ON demo.* TO 'app_developer'; #授予产品人员对demo数据库中所有表的查询权限 mysql> GRANT SELECT ON demo.* TO 'app_product'; #授予测试人员对demo数据库中所有表的修改权限 mysql> GRANT INSERT, UPDATE, DELETE ON demo.* TO 'app_test';