6、对下列两个关系模式:
学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
使用GRANT 语句完成下列授权功能:
Student(Sno,Sname,Sage,Ssex,Saddress,Cno)
Class(Cno,c]Cname,Ctea,Cmon)
(1)授予用户U1对两个表的所有权限,并可给其他用户授权。
/*标准SQL*/
GRANT ALL PRIVILEGES
ON TABLE Student,Class
TO U1
WITH GRANT OPTION
/*T-SQL*/
GRANT ALL
ON Student
TO U1
WITH GRANT OPTION
GRANT ALL
ON Class
TO U1
WITH GRANT OPTION;
(2)授予用户U2对学生表具有查看权限,对家庭住址具有更新权限。
/*标准SQL,T-SQL去掉ON后面的TABLE即可*/
GRANT SELECT,UPDATE(Saddress)
ON TABLE Student
TO U2;
(3)将对班级表查看权限授予所有用户。
/*标准SQL,T-SQL去掉ON后面的TABLE即可*/
GRANT SELECT
ON TABLE Class
TO PUBLIC;
(4)将对学生表的查询、更新权限授予角色R1。
/*建立角色R1*/
CREATE ROLE R1;
/*给角色授予权限*/
GRANT SELECT,UPDATE
ON TABLE Student
TO R1;
(5)将角色R1授予用户U1,并且 U1可继续授予给其他角色。
/*标准SQL*/
GRANT R1
TO U1
WITH ADMIN OPTION;
/*T-SQL*/
ALTER ROLE R1
ADD MEMBER U1;
7、今有以下两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号)
Employee(Eno,Ename,Eage,Eduty,Esal,Dno)
Department(Dno,Dname,Manname,Dadd,Dtel)
请用SQL的GRANT和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:
(1)用户王明对两个表有SELECT 权限。
/*标准SQL*/
GRANT SELECT
ON TABLE Employee,Department
TO 王明;
/*T-SQL*/
GRANT SELECT
ON Employee
TO 王明
GRANT SELECT
ON Department
TO 王明;
(2)用户李勇对两个表有INSERT和DELETE 权限
/*标准SQL*/
GRANT DELETE,INSERT
ON TABLE Employee,Department
TO 李勇
/*T-SQL*/
GRANT DELETE,SELECT
ON Employee
TO 李勇
GRANT DELETE,SELECT
ON Department
TO 李勇
(3)每个职工只对自己的记录有SELECT 权限。
我的答案错误,这样就成了所有人都可以查到了。
/*建立视图,按照职工号分组*/
CREATE VIEW Emp
AS
SELECT *
FROM Employee
GROUP BY Eno;
/*给视图授予权限*/
GRANT SELECT
ON VIEW Emp
TO PUBLIC;
/*正确答案*/
GRANT SELECT
ON Employee
WHER USER()=NAME
TO ALL;
(4)用户刘星对职工表有SELECT 权限,对工资字段具有更新权限。
GRANT SELECT,UPDATE(Esal)
ON TABLE Employee
TO 刘星;
(5)用户张新具有修改这两个表的结构的权限。
GRANT ALTER
ON TABLE Employee,Department
TO 张新;
(6)用户周平具有对两个表的所有权限(读,插,改,删数据),并具有给其他用户授权的权限。
GRANT ALL PRIVILEGES
ON TABLE Employee,Department
TO 周平
WITH GRANT OPTION;
(7)用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权限,他不能查看每个人的工资。
/*建立视图*/
CREATE VIEW ED(Dno,maxsal,minsal,avgsal)
AS
SELECT Department.Dno,MAX(Esal),MIN(Esal),AVG(Esal)
FROM Employee,Department
GROUP BY Dno
HAVING Employee.Dno=Department.Dno
/*授予权限*/
GRANT SELECT
ON VIEW ED
TO 杨兰;
8、针对习题7中(1)-(7)的每一种情况,撤销个用户所授予的权限。
(1)
REVOKE SELECT
ON TABLE Employee,Department
FROM 王明;
(2)
REVOKE INSERT,UPDATE
TO TABLE Employee,Department
FROM 李勇;
(3)
REVOKE SELECT
ON VIEW Emp
FROM PUBLIC;
/*正确答案*/
REVOKE SELECT
ON TABLE Employee
WHEN USER()=NAME
FROM ALL;
(4)
REVOKE SELECT,UPDATE(Esal)
ON TABLE Employee
FROM 刘星;
(5)
REVOKE ALTER
ON TABLE Employee,Department
FROM 张新;
(6)
REVOKE ALL PRIVILEGES
ON TABLE Employee,Department
FROM 周平 ;
(7)
REVOKE SELECT
ON VIEW ED
FROM 杨兰;
/*删除视图*/
DROP VIEW ED;
我忘记了删除视图.
总结:这次的作业相对比较简单,我的答案大部分都是正确的,但是关于只能查询到个人记录的那道题,我自己写的好像不太对,参考了答案.对于WHEN USER()=NAME不太懂.