- 【例4.1】~【例4.13】
- 【例4.14】~【例4.16】可以下週講完了再做,也可以提前預習、提前做。
1. 在SQLserver上運行,觀察運行效果,並把代碼寫到作業中。
2. 寫出自己的理解/收穫/心得體會(部分比較複雜的例題,建議增加測試方法和測試數據,舉一反三)。
作業原地址:作業
目錄
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)