1.GRANT
GRANT語句的一般格式為:
GRANT <權限>
ON <對象類型 > < 對象名>
TO <用戶>
[ WITH GRANT OPTION]
其語義為:將對指定操作對象的指定操作權限授予指定的用戶.發出該GRANT語句的可以是數據庫管理員,也可以是該數據庫對象的創建者。
如果指定來WITH GRANT OPTION 子句,則獲得某種權限的用戶還可以把這種權限授予其他用戶。但不允許循環傳授,即被授權者不能把權限在授回給授權者或祖先。如圖
如果沒有指定WITH GRANT OPTION 子句,則獲得某種權限的用戶只能使用該權限,不能傳播該權限。
例1:把查詢Student表的權限授給用戶U1
GRANT SELECT
ON TABLE Student
TO U1;
例2:對SC表操作把INSERT權限授給U5表
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
U5表將此權限授給U6
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
同樣,U6還可以將此權限授U7
2.REVOKE
授予用戶的權限可以由數據庫管理員或其他授權者用REVOKE語句收回,REVOKE語句的一般格式為:
REVOKE <權限>
ON <對象類型> <對象名>
FROM <用戶> [CASCADE | RESTRICT];
例:把用戶U5對SC表的INSERT權限收回。
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
其語義為:將用戶U5的INSERT權限收回同時,級聯(CASCADE)收回了U6和U7的INSERT權限,否則系統將拒絕執行該命令。
SQL提供了非常靈活的授權機制:
1.數據庫管理員擁有對數據庫中所有對象的所有權限,並根據實際情況將不同的權限授予不同的用戶。
2.用戶對自己建的基本表和視圖擁有全部操作權限,並可以使用GRANT語句授權給其他用戶,其他用戶擁有繼續授權的許可,還有再授權給其他用戶。
3.所有授予出去的權力在必要時又可以用REVOKE語句收回。
可見,用戶可以“自主”地將數據的存取權限授予任何人,決定是否也將“授權”的權限授予別人,因此稱這樣的存取控制是自主存取控制。在現實當中,只有自己強大了你才有“自主”的權限。否則你只能被“授權”。