-
設定權限不論使用者或角色,都是權限的設定對象。除了應用程式角色較特殊,與其他角色及使用者有互斥關係外,資料庫角色及成員在權限的關係上非常密切。一個使用者可能同時隸屬於多個資料庫角色,每個角色又可擁有不同權限,此時使用者取得實際權限的原則是“並集”,除非有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
每語句都有三個元素, 分別是權限名稱、 物件及使用者( 角色), 如下(Ch151524Grant.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,分別代表查詢物件權限或語句權