第四章第一次作业

第四章第一次作业

教材上的例程 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;

验证:

问题及解决

posted @ 2023-05-13 20:42  少管我  阅读(37)  评论(0编辑  收藏  举报