《金仓数据库应用技术实验手册》(V1.2版)For Windows - 图文(9)

2019-08-26 18:22

Http://www.kingbase.com.cn

任务1:一个用户含有多个角色,只有当前角色生效。

现有一个用户 TEMP_USER,两个角色 TEMP_ROLE1,TEMP_ROLE2,一个表 TAB_TEST。

准备工作:

1/CREATE USER TEMP_USER WITH PASSWORD '123456'; ---创建TEMP_USER用户。 2/CREATE ROLE TEMP_ROLE1; ---创建TEMP_ROLE1角色。 3/CREATE ROLE TEMP_ROLE2; ---创建TEMP_ROLE1角色。 4/创建TAB_TEST表: CREATE TABLE TAB_TEST (

ID_NO VARCHAR(100) NOT NULL, NAME VARCHAR(10), SEX VARCHAR(2), TEL VARCHAR(12),

ADDRESS VARCHAR(200) NOT NULL

);

5/向TAB_TEST表中导入数据:

INSERT INTO TAB_TEST(ID_NO,NAME,SEX,TEL,ADDRESS) VALUES('1000001','钱小样', '女','15888888888','北京市海淀区上地南路8号');

a. 把表 TAB_TEST 查询权限授予给角色 TEMP_ROLE1。

GRANT SELECT ON TABLE TAB_TEST TO TEMP_ROLE1; b. 分别把角色 TEMP_ROLE1,TEMP_ROLE2 授予用户 TEMP_USER。

GRANT TEMP_ROLE1 TO TEMP_USER; GRANT TEMP_ROLE2 TO TEMP_USER;

c. 切换当前会话用户 TEMP_USER,查询表 TAB_TEST 的信息。

SET SESSION AUTHORIZATION TEMP_USER; -切换到用户TEMP_USER SELECT * FROM TAB_TEST; ERROR: 不允许访问关系 TAB_TEST

d. 设置用户的当前角色 TEMP_ROLE1,查询表 TAB_TEST 的信息。

SET SESSION ROLE TEMP_ROLE1; --设置用户当前角色TEMP_ROLE1 SELECT * FROM TAB_TEST;

ID_NO | NAME | SEX | TEL | ADDRESS

---------+--------+-----+-------------+-------------------------

____________________________________________________________________________________

联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn

41

Http://www.kingbase.com.cn

1000001 | 钱小样 | 女 | 15888888888 | 北京市海淀区上地南路8号

(1 row)

e. 设置用户的当前角色 TEMP_ROLE2,查询表 TAB_TEST 的信息。

SET SESSION ROLE TEMP_ROLE2; --设置用户当前角色TEMP_ROLE2 SELECT * FROM TAB_TEST; ERROR: 不允许访问关系 TAB_TEST

任务2:角色的级联回收。

现有用户 A,有角色 R,角色 R 被授予了对表 TAB_TEST 的修改权限。用户 A 把角色 R 授予给用户 B,用户 B 又把角色 R 赋予给用户 C。它们的关系如下图:

当回收 R 角色的时候有两种可能:

(1)如果选择了 CASCADE 选项,回收某个用户的角色,也同时回收了该用户向其它用户授予的角色。

(2)选择了 RESTRICT 选项,只回收指定用户的角色,若该用户还把该权限授予了其它用户而导致有依赖角色存在,则回收失败,这是系统默认选项。

f. 把对表 TAB_TEST 的更新权限授予给角色 R。

GRANT UPDATE ON TABLE TAB_TEST TO R; g. 把角色 R 授予用户 A。

GRANT R TO A WITH ADMIN OPTION;

h. 切换当前会话用户 A,把角色 R 授予用户 B。

SET SESSION AUTHORIZATION A; --切换到用户A GRANT R TO B WITH ADMIN OPTION; i. 切换当前会话用户 B,把角色 R 授予用户 C。

SET SESSION AUTHORIZATION B; --切换到用户B GRANT R TO C WITH ADMIN OPTION; j. 切换当前会话用户 A,回收 B 的 R 权限。

SET SESSION AUTHORIZATION A; --切换到用户A REVOKE R FROM B; ERROR: 依赖的角色存在 HINT: 使用 CASCADE 撤销它们 k. 使用 CASCADE 选项进行回收。

REVOKE R FROM B CASCADE;

42

____________________________________________________________________________________

联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn

Http://www.kingbase.com.cn

l. 分别切换当前会话用户 B,C 对表 TAB_TEST 进行更新操作。

SET SESSION AUTHORIZATION B; --切换到用户B SET ROLE R;

ERROR: 设置角色 \权限被拒绝

SET SESSION AUTHORIZATION C; --切换到用户C SET ROLE R;

ERROR: 设置角色 \权限被拒绝

任务3:角色的授予不会产生循环授权。

例如:现在有 A,B,C 三个用户,现有角色 R,表 TAB_TEST1。角色 R 被授予了对表 TAB_TEST1 查询的权限。它们的关系如下图:

用户 A 把角色 R 授予了用户 B,用户 B 又把角色 R 授予了用户 C, 用户 C 有把角色 R 授予了用户 A。

在这个操作中,它们形成了一个环形,这就是循环授权。在 KingbaseES 是不允许循环授权的。 操作:

m. 把表 TAB_TEST1 查询权限授予给角色 R。

GRANT SELECT ON TABLE TAB_TEST1 TO R; n. 把角色 R 授予用户 A 并具有管理权限。

GRANT R TO A WITH ADMIN OPTION;

o. 切换当前会话用户 A,把角色 R 授予用户 B 并具有管理权限。

SET SESSION AUTHORIZATION A; --切换到用户A GRANT R TO B WITH ADMIN OPTION;

p. 切换当前会话用户 B,把角色 R 授予用户 C 并具有管理权限。

SET SESSION AUTHORIZATION B; --切换到用户B GRANT R TO C WITH ADMIN OPTION;

q. 切换当前会话用户 C,把角色 R 授予用户 A 并具有管理权限。

SET SESSION AUTHORIZATION C; --切换到用户B GRANT R TO A WITH ADMIN OPTION;

NOTICE: 角色 \已经是角色 \的成员

____________________________________________________________________________________

联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn

43

Http://www.kingbase.com.cn

问题思考:大家考虑一下,如果角色R目前仅有对表TAB_TEST1的查询权限。SYSTEM将R授权给了用户A,那么A就具有查询权限。如果角色R的权限增加了(如:R增加了修改TAB_TEST1表的权限。)那么,用户A的权限会随之增加吗?还是需要重新对A授权才能拥有R新增的权限?

实验(九):数据的完整性

在本实验中,我们将对完整性进行讨论,包括3类完整性、CHECK 短语、CONSTRAIN 子句、触发器。因为完整性约束绝大部分是在定义表结构时进行的,因此可能需要多次定义 表,如果表名发生重复的话,可以先将旧表删除后再建立。

任务1. 实体完整性

【例4】定义表的主码。

关系模型的实体完整性在CREATE TABLE 中用PRIMARY KEY 定义。定义主码的方法 分为定义为列级约束条件和定义为表级约束条件两种。 [例4-1]定义表Student,并将其中的Sno 属性定义为主码。 CREATE TABLE STUDENT( SNO CHAR(7) PRIMARY KEY, SNAME CHAR(8) NOT NULL, SSEX CHAR(2), SAGE SMALLINT, SDEPT CHAR(20)); 或者:

CREATE TABLE STUDENT( SNO CHAR(7), SNAME CHAR(8), SSEX CHAR(2),

44

____________________________________________________________________________________

联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn

Http://www.kingbase.com.cn

SAGE SMALLINT, SDEPT CHAR(20), PRIMARY KEY (SNO));

[例4-2]定义表SC,将其中的属性Sno,Cno 定义为主码。

对于多个属性构成的码,只能够将其定义为表级约束条件,而无法用列级约束条件来实 现。

CREATE TABLE SC( SNO CHAR(7) NOT NULL, CNO CHAR(4) NOT NULL, GRADE SMALLINT, PRIMARY KEY (SNO,CNO));

任务2. 参照完整性。

【例5】定义表的外码。

关系模型的参照完整性是在CREATE TABLE 中用FOREIGN KEY 语句来定义的,并用 REFERENCES 来指明外码参照的是哪些表的主码。

定义表SC,其中Sno 参照表Student 的主码Sno,Cno 参照表Course 的主码Cno。 CREATE TABLE SC( SNO CHAR(7) NOT NULL, CNO CHAR(4) NOT NULL, GRADE SMALLINT, PRIMARY KEY (SNO,CNO),

FOREIGN KEY (SNO) REFERENCES STUDENT(SNO), FOREIGN KEY (CNO) REFERENCES COURSE(CNO));

任务3. 用户定义完整性。

【例6】用户定义的属性上的约束条件。

[例6-1]列值非空。在定义SC 表时,Sno、Cno 和Grade 属性都不允许取空值。

____________________________________________________________________________________

联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn

45


《金仓数据库应用技术实验手册》(V1.2版)For Windows - 图文(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:个人所得税习题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: