【數據庫】作業11——SQL練習7 - GRANT/ REVOKE / AUDIT


  • 【例4.1】~【例4.13】
  • 【例4.14】~【例4.16】可以下週講完了再做,也可以提前預習、提前做。

1. 在SQLserver上運行,觀察運行效果,並把代碼寫到作業中。

2. 寫出自己的理解/收穫/心得體會(部分比較複雜的例題,建議增加測試方法和測試數據,舉一反三)。

 

作業原地址:作業

目錄

4.2.4授權:授權與收回

1.GRANT

2.REVOKE

3.創建數據庫模式的權限

4.2.5數據庫角色

1.創建角色

2.給角色授權

3.講一個角色授予其他的角色或用戶

4.角色權限的收回

4.2.6強制存取控制方法

4.3視圖機制

4.4審計

總結

 



 

4.2.4授權:授權與收回

 

1.GRANT

 

GRANT語句的一般格式:

 

GRANT <權限>[,<權限>]... 
ON <對象類型> <對象名>[,<對象類型> <對象名>]…
TO <用戶>[,<用戶>]...
[WITH GRANT OPTION];  

 

注:如果指定了WITH GRANT OPTION 子句,則獲得某種權限的用戶還有把這種權限再授予其他用戶。若沒有指定WITH GRANT OPTION 子句,則獲得某種權限的用戶只能使用該權限,不能傳播該權限。

 

【例4.1】把查詢Student表的權限授給用戶U1。

 

GRANT SELECT 
ON TABLE Student 
TO U1;
/*!!!錯誤!!!*/

 

這裏了出現了錯誤。

 

插眼

 

百度了一下,沒有找到具體原因,但是找到了改正方法,去掉TABLE就可以了。

 

GRANT SELECT 
ON Student 
TO U1;

 

【例4.2】把對Student表和Course表的全部操作權限授予用戶U2和U3。

 

GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;

 

既然上例加TABLE有報錯,果然這個也有了報錯。

 

【例4.3】把對錶SC的查詢權限授予所有用戶。

 

GRANT SELECT 
ON TABLE SC 
TO PUBLIC;

 

【例4.4】把查詢Student表和修改學生學號的權限授給用戶U4。

 

GRANT UPDATE(Sno),SELECT 
ON TABLE Student
TO U4;

 

【例4.5】把對錶SC的INSERT權限授予U5用戶,並允許他再將此權限授予其他用戶。

 

GRANT INSERT 
ON TABLE SC 
TO U5
WITH GRANT OPTION;

 

【例4.6】U5將對錶SC的INSERT權限授予U6。

 

GRANT INSERT 
ON TABLE SC 
TO U6
WITH GRANT OPTION;

 

【例4.7】將上例權限授予U7。

 

GRANT INSERT 
ON TABLE SC 
TO U7;

 

注:因爲U6未給U7傳播的權限,因此U7不能再傳播此權限。

 


 

2.REVOKE

 

授權用戶的權限可以由數據庫管理員或其他授權者用REVOKE語句收回,其一般格式:

 

REVOKE <權限>[,<權限>]... 
ON <對象類型> <對象名>[,<對象類型><對象名>]…
FROM <用戶>[,<用戶>]...[CASCADE | RESTRICT];

 

【例4.8】把用戶U4修改學生學號的權限收回。

 

REVOKE UPDATE(Sno)
ON TABLE Student 
FROM U4;

 

【例4.9】收回所有用戶對錶SC的查詢權限。

 

REVOKE SELECT 
ON TABLE SC 
FROM PUBLIC;

 

【例4.10】把用戶U5對SC表的INSERT權限收回。

 

REVOKE INSERT 
ON TABLE SC 
FROM U5 CASCADE;

 

注:將用戶U5的INSERT權限收回的同時,級聯收回了U6和U7的INSERT權限,否則系統將拒絕執行該命令。

    這裏的默認值爲CASCADE。

 


 

3.創建數據庫模式的權限

 


 

4.2.5數據庫角色

 

數據庫角色是被命名的一組與數據庫操作相關的權限,角色是權限的集合。

 

1.創建角色

 

CREATE  ROLE  <角色名 

 

2.給角色授權

 

 GRANT  <權限>[,<權限>]… 
 ON <對象類型>對象名  
 TO <角色>[,<角色>]…

 

3.講一個角色授予其他的角色或用戶

 

GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用戶1>]… 
[WITH ADMIN OPTION]

 

該語句把角色授予某個用戶,或授予另一個角色。一個角色所擁有的權限就是授予它的全部角色所包含的權限的總和。

授予者或者是角色的創建者,或者擁有在這個角色上的ADMIN OPTION。

如果指定了WITH ADMIN OPTION 子句,則獲得某種權限的角色或用戶還可以把這種權限再授予其他角色。

 

4.角色權限的收回

 

REVOKE <權限>[,<權限>]…
ON <對象類型> <對象名>
FROM <角色>[,<角色>]…

 

用戶可以回收角色的權限,從而修改角色擁有的權限。

 

【例4.11】通過角色來實現將一組權限授予一個用戶。

 

①首先創建一個角色R1。

CREATE ROLE R1;

 

②然後使用GRANT語句,使角色R1擁有Student表的 SELECT、UPDATE、INSERT權限。

GRANT SELECT,UPDATE,INSERT 
ON TABLE Student 
TO R1;

 

③將這個角色授予王平,張明,趙玲。使他們具有角色R1所包含的全部權限。

GRANT R1 
TO 王平,張明,趙玲;

 

④也可以一次性通過R1來回收王平的這三個權限。

REVOKE R1 
FROM 王平;

 

【例4.12】角色的權限修改。

 

GRANT DELETE 
ON TABLE Student
TO R1;

 

【例4.13】使R1減少了SELECT權限

 

REVOKE SELECT 
ON TABLE Student
FROM R1;

 


 

4.2.6強制存取控制方法

 

在強制存取控制中,數據庫管理系統所管理的全部實體被分爲主體和客體兩大類。

主體:是系統中的活動實體。

客體:是系統中的被動實體。

 

系統存取規則:

(1)僅當主體的許可證級別大於或等於客體的密級時,該主體才能讀取相應的客體。

(2)僅當主體的許可證級別小於或等於客體的密級時,該主體才能寫相應的客體。

 

4.3視圖機制

 

可以爲不同的用戶定義不同的視圖,把數據對象限制在一定的範圍內。

視圖機制間接地實現支持存取謂詞的用戶權限定義。

 

【例4.14】建立計算機系學生的視圖,把對該視圖的SELECT權限授於王平,把該視圖上的所有操作權限授於張明。

 

CREATE VIEW CS_Student        /*先建立視圖SC_Student*/
AS
SELECT *
FROM Student
WHERE Sdept='CS';

GRANT SELECT                  /*王平老師只能檢索計算機系學生的信息*/
ON CS_Student
TO 王平;
     
GRANT ALL PRIVILEGES
ON CS_Student
TO 張明;

 


 

4.4審計

 

審計功能把用戶對數據庫的所有操作自動記錄下來放入審計日誌中。

審計員可以利用審計日誌監控數據庫中的各種行爲,重視導致數據庫現有狀況的一系列事件,找出非法存取數據的人、時間和內容等。

 

【例4.15】對修改SC表結構或修改SC表數據的操作進行審計。

 

AUDIT ALTER,UPDATE  
ON SC;

 

【例4.16】取消對SC表的一切審計。

 

NOAUDIT ALTER,UPDATE  
ON SC;

 


總結

 

沒什麼大難度,就是最開始報的那個錯,一直沒有搞清楚,好像這些代碼加了TABLE都會報錯,貌似不加是正確的。

都挺好理解的,格式記住了應該就沒什麼問題了。

 


插眼傳送:

 

完成時間:1h19min

          以上

                                         ————(2020.4.5)

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