数据库作业12:第四章:数据库安全性 习题

6、对下列两个关系模式:

学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
嘤嘤嘤,不建表了直接做题吧
Stu(Sno,Sname,age,sex,address,Cno)
Class(Cno,Cname,Hmater,Mon)

使用GRANT语句完成下列授权功能:
(1)授予用户U1对两个表的所有权限,并可给其他用户授权。
标准sql

GRANT ALL PRIVILEGES 
ON Stu, Class
TO U1
WITH GRANT OPTION;

T-SQL

GRANT ALL PRIVILEGES 
ON Stu
TO U1
WITH GRANT OPTION;

GRANT ALL PRIVILEGES 
ON Class 
TO U1
WITH GRANT OPTION;

(2)授予用户U2对学生表具有查看权限,对家庭住址具有更新权限。
标准SQL

GRANT SELECT, UPDATE(address) 
ON TABLE Stu
TO U2;

T-SQL

GRANT SELECT, UPDATE(address) 
ON  Stu
TO U2;

(3)将对班级表查看权限授予所有用户。
标准SQL

GRANT SELECT 
ON TABLE Class
TO PUBLIC;

T-SQL

GRANT SELECT 
ON Class
TO PUBLIC;

(4)将对学生表的查询、更新权限授于角色R1。
标准SQL

GRANT SELECT, UPDATE 
ON TABLE Stu
TO R1;

T-SQL

GRANT SELECT, UPDATE 
ON Stu
TO R1;

(5)将角色R1授予用户U1,并且U1可继续授权给其他角色。
标准SQL

GRANT R1
TO U1
WITH ADMIN OPTION;

7、今有以下两个关系模式:

职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号)
建表(就当我建了吧)
Emp (eNo., ename, age, position, salary, dnu.)
Dep (dnu, dname, mname, address, num)

请用SQL的GRANT和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:

(1)用户王明对两个表有SELECT权限。
标准SQL

GRANT SELECT
ON TABLE Emp, Dep
TO 王明;

T-SQL

GRANT SELECT
ON Emp
TO 王明;

GRANT SELECT
ON Dep
TO 王明;

(2)用户李勇对两个表有INSERT和DELETE权限。
标准SQL

GRANT INSERT DELETE
ON TABLE Emp, Dep
TO 李勇;

T-SQL

GRANT INSERT, DELETE
ON Emp
TO 李勇;

GRANT INSERT, DELETE
ON Dep
TO 李勇;

(3)每个职工只对自己的记录有SELECT权限。
这里的职工是指具体的用户
用户对Emp表要有权限,只对自己的记录有权查看
那就是应该可以在表里查,但是查出来的结果只能有自己那条,其他人的记录不会出现。

语法不是很懂,百度查了一下

标准SQL

GRANT SELECT
ON TABLE Emp 
WHEN USER() = ename
TO ALL;

但是这玩意跟我想的不太一样,看不懂语法
考虑建立视图的话

CREATE VIEW I
AS
SELECT 
FROM Emp
WHERE= ename;

没办法解决怎么建立那么多视图的过程

(4)用户刘星对职工表有SELECT权限,对工资字段具有更新权限。
标准SQL

GRANT SELECT, UPDATE(salary)
ON TABLE Emp
TO 刘星;

T-SQL

GRANT SELECT, UPDATE(salary)
ON Emp
TO 刘星;

(5)用户张新具有修改这两个表的结构的权限。
标准SQL

GRANT ALTER
ON TABLE Emp, Dep
TO 张新;

T-SQL

GRANT ALTER
ON Emp, Dep
TO 张新;

(6)用户周平具有对两个表的所有权限(读、插、改、删数据),并具有给其他用户授权的权限。
标准SQL

GRANT ALL PRIVILEGES
ON TABLE Emp, Dep
TO 周平
WITH GRANT OPTION;

T-SQL

GRANT ALL PRIVILEGES
ON Dep
TO 周平
WITH GRANT OPTION;

GRANT ALL PRIVILEGES
ON Emp
TO 周平
WITH GRANT OPTION;

(7)用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权限,他不能查看每个人的工资。
我们针对他一个人建立一个视图就好了

CREATE VIEW Dep_salary(DNO, MAXSALARY, MINSALARY, AVGSALARY)
AS
SELECT Dep.dname, MAX(salary), MIN(salary), AVG(salary)
FROM Emp, Dep
WHERE Emp.dnu = Dep.dnu
GROUP BY Dep.dnu;

然后授予对视图的权限

GRANT SELECT
ON VIEW Dep_salary
--T-SQL中不要这个对象类型就行了
TO 杨兰;

8、针对习题7中(1)~(7)的每一种情况,撤销各用户所授予的权限:

(1)
标准SQL

REVOKE SELECT
ON Emp, Dep
TO 王明;

T-SQL

REVOKE SELECT
ON Emp
TO 王明;

REVOKE SELECT
ON Dep
TO 王明;

(2)
标准SQL

REVOKE INSERT DELETE
ON TABLE Emp, Dep
TO 李勇;

T-SQL

REVOKE INSERT DELETE
ON Emp
TO 李勇;

REVOKE INSERT DELETE
ON Dep
TO 李勇;

(3)
写到这里不由得想起了——照样子改句子

REVOKE SELECT
ON TABLE Emp 
WHEN USER() = ename
TO ALL;

(4)

REVOKE SELECT, UPDATE(salary)
ON TABLE Emp
--注意区别就好了
TO 刘星;

(5)

REVOKE ALTER
ON TABLE Emp, Dep
--同上
TO 张新;

(6)
标准

REVOKE ALL PRIVILEGES
ON TABLE Emp, Dep
TO 周平
WITH GRANT OPTION;

T

REVOKE ALL PRIVILEGES
ON Emp
TO 周平
WITH GRANT OPTION;

REVOKE ALL PRIVILEGES
ON Dep
TO 周平
WITH GRANT OPTION;

(7)

REVOKE SELECT
ON VIEW Dep_salary
--T-SQL中不要这个对象类型就行了
TO 杨兰;

你可能感兴趣的:(数据库作业12:第四章:数据库安全性 习题)