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