數據庫作業12:第四章:數據庫安全性 課後作業

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章