在安全系統中創建一項,以拒絕給當前數據庫內的安全帳戶授予權限並防止安全帳戶通過其組或角色成員資格繼承權限。
語句權限:
DENY { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]
對象權限:
DENY
{ ALL [ PRIVILEGES ] | permission [ ,...n ] }
{
[ ( column [ ,...n ] ) ] ON { table | vIEw }
| ON { table | vIEw } [ ( column [ ,...n ] ) ]
| ON { stored_procedure | extended_procedure }
| ON { user_defined_function }
}
TO security_account [ ,...n ]
[ CASCADE ]
ALL
指定拒絕所有適用的權限。對於語句權限,只有 sysadmin 角色成員可以使用 ALL。對於對象權限,sysadmin 和 db_owner 角色成員和數據庫對象所有者都可以使用 ALL。
statement
是被拒絕權限的語句。語句列表可以包括:
n
是一個占位符,表示在以逗號分隔的列表中可以有重復的項目。
TO
指定安全帳戶列表。
security_account
是當前數據庫內受拒絕權限影響的安全帳戶名稱。安全帳戶可以是:
拒絕來自 SQL Server 用戶或 Windows NT 用戶帳戶的權限時,受權限影響的唯一帳戶是指定的 security_account。如果拒絕來自某個 SQL Server 角色或 Windows NT 組的權限,拒絕的權限將影響當前數據庫內所有是該組或角色成員的用戶,與已授予該組或角色成員的權限無關。
如果組或角色與其成員的權限發生沖突,限制性最強的權限 (DENY) 優先。
DENY 可用於兩種特殊的安全帳戶。在 public 角色上拒絕的權限適用於數據庫中的所有用戶。在 guest 用戶上拒絕的權限將由數據庫內所有沒有用戶帳戶的用戶使用。
對 Windows NT 本地組或全局組拒絕權限時,指定在該組上定義的域名或計算機名,後面跟一個反斜線,然後是組名。但是,若要對 Windows NT 內置的本地組拒絕權限,請指定 BUILTIN 而不是域名或計算機名。
PRIVILEGES
是可以包含在符合 SQL-92 標准的語句中的可選關鍵字。
permission
是被拒絕的對象權限。在表或視圖上拒絕權限時,權限列表可以包括一個或多個這些語句:SELECT、INSERT、DELETE 或 UPDATE。
在表上拒絕的對象權限還可以包括 REFERENCES,在存儲過程或擴展存儲過程上拒絕的對象權限可以包括 EXECUTE。在列上拒絕權限時,權限列表可以包括 SELECT 或 UPDATE。
column
是當前數據庫內要被拒絕權限的列名。
table
是當前數據庫內要被拒絕權限的表名。
vIEw
是當前數據庫內要被拒絕權限的視圖名稱。
stored_procedure
是當前數據庫內要被拒絕權限的存儲過程名稱。
extended_procedure
是要被拒絕權限的擴展存儲過程名稱。
user_defined_function
是拒絕權限的用戶定義函數名。
CASCADE
指定拒絕來自 security_account 的權限時,也將拒絕由 security_account 授權的任何其它安全帳戶。拒絕可授予的權限時使用 CASCADE。如果沒有指定 CASCADE,將給指定的用戶授予 WITH GRANT OPTION 權限並返回錯誤。
如果使用 DENY 語句禁止用戶獲得某個權限,那麼以後將該用戶添加到已得到該權限的組或角色時,該用戶不能訪問這個權限。
如果用戶激活一個應用程序角色,DENY 對用戶使用該應用程序角色訪問的任何對象沒有任何作用。雖然用戶可能被拒絕訪問當前數據庫內的特定對象,但如果應用程序角色能夠訪問該對象,則當應用程序角色激活時,用戶仍可以訪問該對象。
使用 REVOKE 語句可從用戶帳戶中刪除拒絕的權限。安全帳戶不能訪問刪除的權限,除非將該權限授予了用戶所在的組或角色。使用 GRANT 語句可刪除拒絕的權限並將權限顯式應用於安全帳戶。
說明 在 SQL Server 6.x 版兼容模式中 DENY 是一個新關鍵字。
DENY 專門用於拒絕來自用戶帳戶的權限,因為在 SQL Server 7.0 版中 REVOKE 只刪除以前授予或拒絕的權限。使用 REVOKE 的現有 SQL Server 6.x 腳本可能必須改用 DENY 維護行為。
默認情況下,將 DENY 權限授予 sysadmin、db_owner 或 db_securityadmin 角色成員和數據庫對象所有者。
下例對多個用戶拒絕多個語句權限。用戶不能使用 CREATE DATABASE 和 CREATE TABLE 語句,除非給他們顯式授予權限。
DENY CREATE DATABASE, CREATE TABLETO Mary, John, [Corporate\BobJ]
下例顯示權限的優先順序。首先,給 public 角色授予 SELECT 權限。然後,拒絕用戶 Mary、John 和 Tom 的特定權限。這樣,這些用戶就沒有對 authors 表的權限。
USE pubsGOGRANT SELECTON authorsTO publicGODENY SELECT, INSERT, UPDATE, DELETEON authorsTO Mary, John, Tom
下例對所有 Accouting 角色成員拒絕 CREATE TABLE 權限。即使已給現有的 Accouting 用戶顯式授予了 CREATE TABLE 權限,DENY 仍替代該權限。
DENY CREATE TABLE TO Accounting
向後兼容性
GRANT
拒絕權限
REVOKE
sp_helprotect