第四章第一次作业
第四章第一次作业
教材上的例程 4.1-4.7
在openGauss上创建用户并进行授权,描述验证的过程
依次创建用户:
CREATE USER U1 IDENTIFIED BY 'user@123';
CREATE USER U2 IDENTIFIED BY 'user@123';
CREATE USER U3 IDENTIFIED BY 'user@123';
CREATE USER U4 IDENTIFIED BY 'user@123';
CREATE USER U5 IDENTIFIED BY 'user@123';
CREATE USER U6 IDENTIFIED BY 'user@123';
CREATE USER U7 IDENTIFIED BY 'user@123';
创建成功,如图:
例题验证
[例 4.1] 把查询Student表权限授给用户U1
grant usage on schema dboper to u1;
grant select on table dboper.student to u1;
授权成功!
如图,可以查询student表
查询score表则失败
[例 4.2] 把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILEGES
ON TABLE Student, Course
TO u2, u3;
验证:
1.在u2用户下,给student表插入数据
INSERT INTO dboper.student(sno,sname,ssex,sdept,sage)
VALUES('20201329','我是','女','IS',20);
2.在u3用户下,修改学生数据
UPDATE dboper.student
SET ssex='女'
WHERE sno='201215129';
[例 4.3] 把对表SC的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;
验证:
用用户u4查询sc表中数据
select cno from dboper.sc;
[例 4.4] 把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
验证:
用户u4修改学生学号成功
UPDATE dboper.student
SET sno='20202020'
WHERE sno='20202024';
[例 4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO u5
WITH GRANT OPTION;
验证:
用户u5在sc表中插入数据成功
INSERT
INTO dboper.sc
VALUES('20201329','0204',50);
u5可以将这个权限传递给其他用户u6
GRANT INSERT
ON TABLE SC
TO u6
WITH GRANT OPTION;
用户u6在sc表中插入数据成功:
INSERT
INTO dboper.sc
VALUES('20201329','1',99);
[例 4.6] 传播权限
用户u6将此权限传递给u4
GRANT INSERT
ON TABLE dboper.SC
TO u4;
WITH GRANT OPTION;
验证:
用户u4可以在sc表中插入数据成功
INSERT
INTO dboper.sc
VALUES('20201329','0209',88);
[例 4.7] 传播权限
GRANT INSERT
ON TABLE dboper.SC
TO u7;
用户u6将修改数据的权限传递给用户u7,但没有给u7传播权限,因此u7不能再传播这个权限
问题及解决
1.实验上手直接输入例题1代码显示错误,没有事先创建用户。
解决:先根据树上的用户数量创建好需要的用户,并且设置密码,再输入代码进行设置权限。
2.创建用户设置密码时,没有使用三种不同类型的字符类型
3.将查询权限赋给u1时,输入grant select on table dboper.student to u1;
报错。
经过同学提醒,必须把schema也赋权给用户,否则直接grant是无效的
grant usage on schema dboper to u1;
同理,schema也要赋权给其他用户
教材上的例程[例4.8]、[例4.9]、[例4.10]
在openGauss上收回部分用户的权限,描述验证的过程
例题验证
[例 4.8] 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
验证:
UPDATE dboper.student
SET sno='20202020'
WHERE sno='20201329';
用户u4修改学生学号失败,说明无修改权限
[例 4.9] 收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
验证:
[例 4.10] 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
验证:
用户u5插入数据失败
同时,级联(CASCADE)收回来了用户u6、u7的相同权限
用户u6插入数据失败
教材上的例程[例4.11]、[例4.12]、[例4.13]
在openGauss上进行角色部分内容的验证,描述验证的过程
例题验证
[例 4.11] 通过角色来实现将一组权限授予一个用户
- 首先创建一个角色r1
CREATE ROLE r1 IDENTIFIED BY 'user@123';
- 使用GRANT语句,使角色r1拥有student表的SELECT、UPDATE、INSERT权限
GRANT SELECT,UPDATE,INSERT
ON TABLE student
TO r1;
- 将这个角色授予u1、u2、u3,使他们具有角色r1所包含的全部权限
GRANT r1 to u1,u2,u3;
验证:
用户u1查询成功
select * from student
- 收回权限
REVOKE R1
FROM U3;
验证:
用户u2修改数据的权限被收回,无法修改数据
[例 4.12] 角色的权限修改
- 将一组权限授予一个用户
CREATE ROLE r1 IDENTIFIED BY 'user@123';
GRANT SELECT,UPDATE,INSERT
ON TABLE student
TO r1;
GRANT r1 to u1,u2,u3;
- 增加角色r1对student表的删除权限
GRANT DELETE ON TABLE student TO r1
验证:
用户u1删除成功
[例 4.13] 角色的权限修改
REVOKE SELECT
ON TABLE Student
FROM R1;
验证: