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不太懂.