sql_設置權限_數據庫基礎
2024-07-21 02:44:59
供稿:網友
設置權限
不論用戶或角色,都是權限的設置對象。除了應用程序角色較特殊,與其他角色及用
戶有相互排斥關系外,數據庫角色及成員在權限的關系上非常密切。一個用戶可能同時隸
屬于多個數據庫角色,每一角色又可擁有不同權限,此時用戶獲取實際權限的原則是“并
集”,除非有 deny(禁止)的設置。如角色 A 禁止讀取數據表 B,但角色 C 可讀取數據表
B,此時同時隸屬角色 A 和 C 的用戶,仍無法讀取數據表 B,因為他已被禁止。
在權限的作用對象上,可分為服務器及數據庫,即這兩者可分別設置權限,請見如下
說明。
指定服務器權限
(1)在對象資源管理器的服務器上右擊,再選擇“屬性”。
(2)在對話框中切換至“權限”。
(3)在“登錄名或角色”中選擇要設置權限的對象,在“顯式權限”中分別勾選授權,
完成后單擊“確定”按鈕,如圖 15-21 所示。
如圖 15-21 所示,就是對服務器的權限設置。“授權者”就是當前登錄至 SQL Server
服務器的登錄名;“權限”是所有當前登錄名可設置的權限;“授予”表示授予權限;若勾
選“具有授予”,表示 sa 授予選中對象的權限可再授予其他登錄名;“拒絕”就是禁止使用。
這三個選項的選擇有其連帶關系,勾選“拒絕”,就自動清除“授予”及“具有授予”;若
勾選“具有授予”,則清除“拒絕”并選擇“授予”。
“登錄名或角色”就是被設置權限的對象,讀者可單擊“添加”按鈕,指定其他登錄
名或角色,但所有內置服務器角色均無法更改權限,但可以為 public 角色指定權限。
若要查看當前選擇登錄名或角色的權限,請單擊“有效權限”按鈕,因為有效權限可
能不止在圖 15-21 中設置,還要視登錄名所屬的角色而定。所以圖 15-21 只會顯示在此設
置定義的權限,默認已有的權限則不會顯示。
圖 15-21 設置服務器權限
指定數據庫權限
(1)在對象資源管理器中選擇 eBook 數據庫,右擊后選擇“屬性”。
(2)在對話框中切換至“權限”。
(3)在“用戶或角色”中選擇要設置權限的對象,“顯式權限”中分別勾選權限,完
成后單擊“確定”按鈕,如圖 15-22 所示。
對象權限
(1)在對象資源管理器中選擇 eBook 數據庫,打開“數據表”,選擇“Orders”數據
表,右擊后選擇“屬性”。
(2)在對話框中切換至“權限”。
(3)單擊“添加”按鈕,再在對話框中指定要更改權限的用戶、數據庫角色或應用程
序角色。
(4)在“用戶或角色”中選擇要設置權限的對象,“顯式權限”中分別勾選權限,完
成后單擊“確定”按鈕,如圖 15-23 所示。
圖 15-21 及圖 15-23 的操作方式完全相同,區別是分別設置服務器、數據庫及對象的
權限,可設置的對象也不同。在圖 15-21 中可為登錄名及服務器角色指定權限,在圖 15-22
及圖 15-23 中可為用戶、數據庫角色及應用程序角色指定權限;另一區別是可指定的權限
內容不同。
圖 15-22 設置數據庫權限
圖 15-23 設置對象權限
權限內容
SQL Server 可設置的權限內容非常復雜,由服務器到對象共有 94 個權限,較難理解的
是服務器及數據庫的屬性,重要項目如表 15-4 所示。
表 15-4 重要權限說明
權限內容 說明
CONTROL 將類似所有權的能力授予給被授予者。被授予者實際上擁有安全對
象上已定義的所有權限
ALTER 授予更改特定安全對象的屬性(除了所有權之外)的能力。在特定范
圍授予 ALTER 權限時,也會一起授予更改、創建或刪除該范圍內
包含的任何安全對象的能力
ALTER ANY <服務器安全對象> 授予創建、更改或刪除服務器安全對象的個別實例的能力
ALTER ANY <數據庫安全對象> 授予 CREATE、ALTER 或 DROP 數據庫安全對象的個別實例的
能力
TAKE OWNERSHip 讓被授予者可以取得被授予的安全對象的所有權
CREATE <服務器安全對象> 將創建服務器安全對象的能力授予被授予者
CREATE <數據庫安全對象> 將創建數據庫安全對象的能力授予給被授予者
VIEW DEFINITION 讓被授予者能訪問元數據
表 15-4 中的“安全對象”指的是權限設置操作的作用對象,如“Create Role”中的“Role”
就是此處的安全對象。
用 T-SQL 設置權限
在 T-SQL 中設置權限可使用 GRANT(授予)、DENY(拒絕)及 REVOKE(撒銷)三個語句,
這三個語句的用法非常多,基本形式如下:
GRANT ALL 或權限名稱 ON 對象 TO 用戶或角色名稱 WITH 選項
REVOKE ALL 或權限名稱 ON 對象 TO 用戶或角色名稱 CASCADE
DENY ALL 或權限名稱 ON 對象 TO 用戶或角色名稱 CASCADE
每 一 語 句 都 有 三 個 元 素 , 分 別 是 權 限 名 稱 、 對 象 及 用 戶 ( 角 色 ), 如 下
(Ch15/1524Grant.sql):
USE eBook
GRANT SELECT ON OBJECT::dbo.members TO David
GRANT REFERENCES (MemberID) ON OBJECT::dbo.Orders
TO David WITH GRANT OPTION
以上語句是使用 Grant 語句分別授予權限給 David,但對象內容不同,對象名稱請以
“OBJECT::”開頭,其后最好使用完整名稱,即加上所有者。第二個 Grant 語句的作用對
象較特殊,“(MemberID) ON OBJECT:: dbo.Orders”,表示作用于 Orders 對象的 MemberID
字段,將此列的視圖權限授予 David。同時加上“WITH GRANT OPTION”,表示 David 可
再將此權限授予他人,相當于圖 15-23 的“具有授予”。
而在 Revoke 及 Deny 語句中,最后可加入 Cascade,此關鍵詞的功能是一起撤銷 To 之
后用戶可授予其他人的權限,即取消“具有授予”。
查看可用權限
由于可用權限非常多,在 T-SQL 中沒有選項可供選擇,所以使用 GRANT、DENY 及
REVOKE 時,必須首先知道權限名稱才能進行設置。讀者可查看 sys.fn_builtin_permissions、
sys.database_permissions、sys.server_permissions 三個系統數據表,如圖 15-24 所示。
圖 15-24 查看可用權限
圖 15-24 中的“permission_name”就是可用的權限名稱,可應用在 Grant、DENY 或
Revoke 語句中。
查看權限內容
若要查看當前登錄名及用戶的權限內容,可執行 sp_helPRotect 存儲過程,如圖 15-25
所示。
圖 15-25 中的 Grantee 是授予權限的用戶名稱,Grantor 是將權限授予他人的用戶名稱。
sp_helprotect 存儲過程之后最多可使用四個參數,分別代表對象名稱、用戶名稱、授予人名
稱,第四個參數可以是 o 或 s,分別代表查詢對象權限或語句權限。