个人同名博文传送门
https://dhbxs.club/2020/04/15/shiyanwu-shujukuanquanxing/
1.知道数据库安全性采用的方法。
2.掌握数据库用户的创建。
3.掌握数据库的权限的分配。
4.掌握数据表角色的操作。
1.创建不同的用户;
2.分配对象权限给不同的用户;
3.创建角色;
4.授予角色权限;
MySQL5.7;MySQL8.0;Navicat15;
该实验全部基于
实验二-数据定义
CREATE USER 'u1'@ 'localhost' IDENTIFIED by 'u1password';
CREATE USER 'u2'@ 'localhost' IDENTIFIED by 'u2password';
CREATE USER 'u3'@ 'localhost' IDENTIFIED by 'u3password';
CREATE USER 'u4'@ 'localhost' IDENTIFIED by 'u4password';
CREATE USER 'u5'@ 'localhost' IDENTIFIED by 'u5password';
CREATE USER 'u6'@ 'localhost' IDENTIFIED by 'u6password';
CREATE USER 'u7'@ 'localhost' IDENTIFIED by 'u7password';
这里统一设置密码格式为用户
+ password
关键字,便于记忆,用户都为本地用户localhost
。
GRANT SELECT ON TABLE stu.student TO 'u1' @ 'localhost';
我的数据库名叫做stu,所以指定stu数据库中的student表stu.student
。
GRANT ALL PRIVILEGES ON stu.student TO 'u2'@ 'localhost','u3'@ 'localhost';
GRANT ALL PRIVILEGES ON stu.course TO 'u2'@ 'localhost','u3'@ 'localhost';
student
,course
是两个表,这里分开设置。
GRANT SELECT ON stu.student TO 'u4'@ 'localhost';
GRANT UPDATE(Sno) ON stu.student TO 'u4'@ 'localhost';
学生学号列名为Sno
。
GRANT INSERT ON stu.sc TO 'u5'@ 'localhost' WITH GRANT OPTION;
允许授权其他用户,只需在原来的基础上加上WITH GRANT OPTION
关键字即可。
GRANT INSERT ON stu.sc TO 'u6'@ 'localhost' WITH GRANT OPTION;
GRANT INSERT ON stu.sc TO 'u7'@ 'localhost';
REVOKE UPDATE(Sno) ON stu.student FROM 'u4'@ 'localhost';
REVOKE INSERT ON stu.sc FROM 'u5'@ 'localhost';
经查阅官方参考手册得知在MySQL5.7
版本中,并没有角色功能,所以通过虚拟机重新安装了MySQL8.0
的版本以及Navicat15
。以下MySQL语句全部基于MySQL8.0
。
CREATE ROLE 'R1'@ 'localhost';
SET DEFAULT ROLE ALL TO 'root'@ 'localhost';
GRANT SELECT, UPDATE, INSERT ON TABLE Student TO 'R1'@ 'localhost';
GRANT 'R1'@ 'localhost' TO 'u1'@ 'localhost';
这一步是分4小步实现的:
1.首先创建一个角色 R1
;
2.然后使用GRANT
语句,使角色R1
拥有Student
表的SELECT、UPDATE、INSERT
权限;
3.激活角色;
4.将这个角色授予用户u1
,使他具有角色R1
所包含的全部权限;
GRANT DELETE ON TABLE Student TO 'R1'@ 'localhost';
将DELETE
权限授予R1
角色。
CREATE USER 'u1'@ 'localhost' IDENTIFIED by 'u1password';
GRANT SELECT ON TABLE stu.student TO 'u1'@ 'localhost';
CREATE USER 'u2'@ 'localhost' IDENTIFIED by 'u2password';
CREATE USER 'u3'@ 'localhost' IDENTIFIED by 'u3password';
GRANT ALL PRIVILEGES ON stu.student TO 'u2'@ 'localhost','u3'@ 'localhost';
GRANT ALL PRIVILEGES ON stu.course TO 'u2'@ 'localhost','u3'@ 'localhost';
CREATE USER 'u4'@ 'localhost' IDENTIFIED by 'u4password';
GRANT SELECT ON stu.student TO 'u4'@ 'localhost';
GRANT UPDATE(Sno) ON stu.student TO 'u4'@ 'localhost';
CREATE USER 'u5'@ 'localhost' IDENTIFIED by 'u5password';
GRANT INSERT ON stu.sc TO 'u5'@ 'localhost' WITH GRANT OPTION;
CREATE USER 'u6'@ 'localhost' IDENTIFIED by 'u6password';
GRANT INSERT ON stu.sc TO 'u6'@ 'localhost' WITH GRANT OPTION;
CREATE USER 'u7'@ 'localhost' IDENTIFIED by 'u7password';
GRANT INSERT ON stu.sc TO 'u7'@ 'localhost';
REVOKE UPDATE(Sno) ON stu.student FROM 'u4'@ 'localhost';
REVOKE INSERT ON stu.sc FROM 'u5'@ 'localhost';
CREATE ROLE 'R1'@ 'localhost';
SET DEFAULT ROLE ALL TO 'root'@ 'localhost';
GRANT SELECT, UPDATE, INSERT ON TABLE Student TO 'R1'@ 'localhost';
GRANT 'R1'@ 'localhost' TO 'u1'@ 'localhost';
GRANT DELETE ON TABLE Student TO 'R1'@ 'localhost';