Http://www.kingbase.com.cn
ON SC TO U7;
3) 在授权之后验证用户是否拥有了相应的权限。
在执行完上面七个语句之后,我们可以分别以不同用户的身份登录数据库,进行相关操 作,检查系统是否许可。例如: [例1-8]U4 更新Student 表的学生学号。 UPDATE Student SET SNO = ?95101? WHERE SNO = ?95001?;
显示更新1 条记录,即U4 用户拥有了对Student 表Sno 的更新权限。 [例1-9]U7 向SC 表中插入一条数据:(95020,20,88)。 INSERT INTO SC VALUES(?95020?,?20?,88);
显示插入1 条记录,即用户U7 拥有了对SC 表的插入权限。
【例2】 回收权限。将【例1】授予的权限部分收回,检查回收后,该用户是否真正丧失了对数据的相应权限。
1) 回收权限。
[例2-1]收回用户U4 修改学生学号的权限。 当前用户为SYSTEM,直接执行下列语句: REVOKE UPDATE (SNO) ON TABLE Student FROM U4;
[例2-2]收回所有用户对表SC 的查询权限。 REVOKE SELECT ON TABLE SC FROM PUBLIC;
[例2-3]收回用户U5 对SC 表的INSERT 权限。
将权限INSERT 授予给用户U5 时,允许该用户将权限再授予给其他用户;之后,用户 U5 将INSERT 权限转授给了U6,U6 又将权限转授给U7。因此,将用户U5 的INSERT 权
36
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
Http://www.kingbase.com.cn
限收回的时候必须级联收回,不然系统将拒绝执行该命令: REVOKE INSERT ON TABLE SC FROM U5 CASCADE;
执行该命令之后,U6 从U5 处获得的权限也将被收回,U7 从U6 处获得的权限也将同 时被收回。
2) 在回收权限之后验证用户是否真正丧失了该权限。 [例2-4]用户U3 查询表SC。
首先用户U3 重新登录数据库TEST。执行命令: SELECT *FROM SC;
执行失败,该用户不拥有此权限。证实用户U3 丧失了对表SC 查询的权限。 [例2-5]用户U6 向表SC 中插入一条记录(?95035?,?3?,92)。 首先用户U6 重新登录数据库TEST。执行命令: INSERT INTO SC VALUES(?95035?,?3?,92);
执行失败,该用户不拥有此权限。证实用户U6 丧失了从用户U5 处获得的对表SC 插 入的权限。
实验(七):用户权限管理案例
任务1:用户对表的操作权限。
a. 创建一个用户 USER_SELECT_NO。
CREATE USER USER_SELECT_NO WITH PASSWORD '123456'; b. 创建一个表,表名字 TAB_ADDRESS1,并向表中插入一条数据。
CREATE TABLE TAB_ADDRESS1 (
ID_NO VARCHAR(100) NOT NULL, ADDRESS VARCHAR(200) NOT NULL );
INSERT INTO TAB_ADDRESS1(ID_NO,ADDRESS) VALUES('1000001','北京市海淀区上地南路8号');
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
37
Http://www.kingbase.com.cn
c. 把表 TAB_ADDRESS1 的查询权限授予给用户 USER_SELECT_NO。
GRANT SELECT ON TABLE TAB_ADDRESS1 TO USER_SELECT_NO;
d. 切换当前会话用户 USER_SELECT_NO,对表 TAB_ADDRESS1 进行查询。
SET SESSION AUTHORIZATION USER_SELECT_NO; SELECT * FROM TAB_ADDRESS1; ID_NO | ADDRESS
---------+------------------------- 1000001 | 北京市海淀区上地南路8号 (1 row)
任务2:用户权限的级联回收。
现有用户 A,B,C,有权限 P,P 具有对表 TAB_ADDRESS1 的查询权限。如下图所示:
e. 把表 TAB_ADDRESS1 的查询权限授予给用户 A,并且使用户 A 具有管理权
限。
GRANT SELECT ON TABLE TAB_ADDRESS1 TO A WITH GRANT OPTION;
f. 切换到当前会话用户 A,把表 TAB_ADDRESS1 的查询权限授予给用户 B,并
且使用户 B 具有管理权限。
SET SESSION AUTHORIZATION A; --切换到用户A
GRANT SELECT ON TABLE TAB_ADDRESS1 TO B WITH GRANT OPTION;
g. 切换到当前会话用户 B,把表 TAB_ADDRESS1 的查询权限授予给用户 C。
SET SESSION AUTHORIZATION B; --切换到用户B GRANT SELECT ON TABLE TAB_ADDRESS1 TO C;
h. 分别使用户 A,B,C 对表 TAB_ADDRESS1 进行查询。
SET SESSION AUTHORIZATION A; --切换到用户A SELECT * FROM TAB_ADDRESS1; ID_NO | ADDRESS
---------+------------------------- 1000001 | 北京市海淀区上地南路8号
38
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
Http://www.kingbase.com.cn
(1 row)
SET SESSION AUTHORIZATION B; --切换到用户B
SELECT * FROM TAB_ADDRESS1; ID_NO | ADDRESS
---------+------------------------- 1000001 | 北京市海淀区上地南路8号 (1 row)
SET SESSION AUTHORIZATION C; --切换到用户C
SELECT * FROM TAB_ADDRESS1; ID_NO | ADDRESS
---------+------------------------- 1000001 | 北京市海淀区上地南路8号 (1 row)
i. 切换到当前会话用户 A,回收用户 B 对表 TAB_ADDRESS1 的查询权限。
SET SESSION AUTHORIZATION A; --切换到用户A REVOKE SELECT ON TABLE TAB_ADDRESS1 FROM B; ERROR: 存在依赖关系 HINT: 使用 CASCADE 撤销它们
做级联回收的时候应该使用 CASCADE,否则回收失败。 REVOKE SELECT ON TABLE TAB_ADDRESS1 FROM B CASCADE;
j. 用户 B,C 的权限回收后,分别使用用户 A,B,C 对表 TAB_ADDRESS1 进
行查询。用户 B,C 是没有对表 TAB_ADDRESS1 查询权限的。
SET SESSION AUTHORIZATION A; --切换到用户A SELECT * FROM TAB_ADDRESS1; ID_NO | ADDRESS
---------+------------------------- 1000001 | 北京市海淀区上地南路8号 (1 row)
SET SESSION AUTHORIZATION B; --切换到用户B SELECT * FROM TAB_ADDRESS1; ERROR: 不允许访问关系 TAB_ADDRESS1
SET SESSION AUTHORIZATION C; --切换到用户C
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
39
Http://www.kingbase.com.cn
SELECT * FROM TAB_ADDRESS1;
ERROR: 不允许访问关系 TAB_ADDRESS1
结论:KingbaseES的权限管理采用“级联九族”的形式进行权限收回。
思考题(01):一个用户同时具有几个用户授予的权限,但其中一个用户回收它的权限,它是否仍然具有其它用户授予的权限?
例如:现在有 A,B,C,D 四个用户,现有权限 P,P 是对表 TAB_ADDRESS1 的查询权限。它们的关系如下图:
思考题(02):权限的授予是否会产生循环授权?
例如:现在有 A,B,C 三个用户,现有权限 P,权限 P 是对表 TAB_ADDRESS1 进
行查询的权限。它们的关系如下图:
用户 A 把权限 P 授予了用户 B,用户 B 又把权限 P 授予了用户 C,用户 C 又把权限 P 授予了用户 A。
在这个操作中,它们形成了一个环形。这就是循环授权。在 KingbaseES 是否允许循环授权?
实验(八):角色权限管理案例
40
____________________________________________________________________________________ 联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn