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