在安全系統(tǒng)中創(chuàng)建項(xiàng)目,使當(dāng)前數(shù)據(jù)庫(kù)中的用戶(hù)得以處理當(dāng)前數(shù)據(jù)庫(kù)中的數(shù)據(jù)或執(zhí)行特定的 Transact-SQL 語(yǔ)句。
語(yǔ)句權(quán)限:
GRANT { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]
對(duì)象權(quán)限:
GRANT
{ 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 ]
[ WITH GRANT OPTION ]
[ AS { group | role ]
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è)占位符,表示此項(xiàng)可在逗號(hào)分隔的列表中重復(fù)。
TO
指定安全帳戶(hù)列表。
security_account
是權(quán)限將應(yīng)用的安全帳戶(hù)。安全帳戶(hù)可以是:
當(dāng)權(quán)限被授予一個(gè) SQL Server 用戶(hù)或 Windows NT 用戶(hù)帳戶(hù),指定的 security_account 是權(quán)限能影響到的唯一帳戶(hù)。若權(quán)限被授予 SQL Server 角色或 Windows NT 組,權(quán)限可影響到當(dāng)前數(shù)據(jù)庫(kù)中該組或該角色成員的所有用戶(hù)。若組或角色和它們的成員之間存在權(quán)限沖突,最嚴(yán)格的權(quán)限 (DENY) 優(yōu)先起作用。security_account 必須在當(dāng)前數(shù)據(jù)庫(kù)中存在;不可將權(quán)限授予其它數(shù)據(jù)庫(kù)中的用戶(hù)、角色或組,除非已為該用戶(hù)在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建或給予了訪問(wèn)權(quán)限。
兩個(gè)特殊的安全帳戶(hù)可用于 GRANT 語(yǔ)句。授予 public 角色的權(quán)限可應(yīng)用于數(shù)據(jù)庫(kù)中的所有用戶(hù)。授予 guest 用戶(hù)的權(quán)限可為所有在數(shù)據(jù)庫(kù)中沒(méi)有用戶(hù)帳戶(hù)的用戶(hù)使用。
當(dāng)授予某個(gè) Windows NT 本地組或全局組權(quán)限時(shí),請(qǐng)指定在其上定義該組的域名或計(jì)算機(jī)名,然后依次輸入反斜線(xiàn)和組名。但是,若要授予訪問(wèn) Windows NT 內(nèi)置本地組的權(quán)限,請(qǐng)指定 BUILTIN 而不是域名或計(jì)算機(jī)名。
PRIVILEGES
是可以包含在符合 SQL-92 標(biāo)準(zhǔn)的語(yǔ)句中的可選關(guān)鍵字。
permission
是當(dāng)前授予的對(duì)象權(quán)限。當(dāng)在表、表值函數(shù)或視圖上授予對(duì)象權(quán)限時(shí),權(quán)限列表可以包括這些權(quán)限中的一個(gè)或多個(gè):SELECT、INSERT、DELETE、REFENENCES 或 UPDATE。列列表可以與 SELECT 和 UPDATE 權(quán)限一起提供。如果列列表未與 SELECT 和 UPDATE 權(quán)限一起提供,那么該權(quán)限應(yīng)用于表、視圖或表值函數(shù)中的所有列。
在存儲(chǔ)過(guò)程上授予的對(duì)象權(quán)限只可以包括 EXECUTE。在標(biāo)量值函數(shù)上授予的對(duì)象權(quán)限可以包括 EXECUTE 和 REFERENCES。
為在 SELECT 語(yǔ)句中訪問(wèn)某個(gè)列,該列上需要有 SELECT 權(quán)限。為使用 UPDATE 語(yǔ)句更新某個(gè)列,該列上需要有 UPDATE 權(quán)限。
為創(chuàng)建引用某個(gè)表的 FOREIGN KEY 約束,該表上需要有 REFERENCES 權(quán)限。
為使用引用某個(gè)對(duì)象的 WITH SCHEMABINDING 子句創(chuàng)建 FUNCTION 或 VIEW,該對(duì)象上需要有 REFERENCES 權(quán)限。
column
是當(dāng)前數(shù)據(jù)庫(kù)中授予權(quán)限的列名。
table
是當(dāng)前數(shù)據(jù)庫(kù)中授予權(quán)限的表名。
view
是當(dāng)前數(shù)據(jù)庫(kù)中被授予權(quán)限的視圖名。
stored_procedure
是當(dāng)前數(shù)據(jù)庫(kù)中授予權(quán)限的存儲(chǔ)過(guò)程名。
extended_procedure
是當(dāng)前數(shù)據(jù)庫(kù)中授予權(quán)限的擴(kuò)展存儲(chǔ)過(guò)程名。
user_defined_function
是當(dāng)前數(shù)據(jù)庫(kù)中授予權(quán)限的用戶(hù)定義函數(shù)名。
WITH GRANT OPTION
表示給予了 security_account 將指定的對(duì)象權(quán)限授予其它安全帳戶(hù)的能力。WITH GRANT OPTION 子句僅對(duì)對(duì)象權(quán)限有效。
AS {group | role}
指當(dāng)前數(shù)據(jù)庫(kù)中有執(zhí)行 GRANT 語(yǔ)句權(quán)力的安全帳戶(hù)的可選名。當(dāng)對(duì)象上的權(quán)限被授予一個(gè)組或角色時(shí)使用 AS,對(duì)象權(quán)限需要進(jìn)一步授予不是組或角色的成員的用戶(hù)。因?yàn)橹挥杏脩?hù)(而不是組或角色)可執(zhí)行 GRANT 語(yǔ)句,組或角色的特定成員授予組或角色權(quán)力之下的對(duì)象的權(quán)限。
不允許有跨數(shù)據(jù)庫(kù)權(quán)限;只能將當(dāng)前數(shù)據(jù)庫(kù)中的對(duì)象和語(yǔ)句的權(quán)限授予當(dāng)前數(shù)據(jù)庫(kù)中的用戶(hù)。如果用戶(hù)需要另一個(gè)數(shù)據(jù)庫(kù)中的對(duì)象的權(quán)限,請(qǐng)?jiān)谠摂?shù)據(jù)庫(kù)中創(chuàng)建用戶(hù)帳戶(hù),或者授權(quán)用戶(hù)帳戶(hù)訪問(wèn)該數(shù)據(jù)庫(kù)以及當(dāng)前數(shù)據(jù)庫(kù)。
說(shuō)明 系統(tǒng)存儲(chǔ)過(guò)程是例外,因?yàn)?EXECUTE 權(quán)限已經(jīng)授予 public 角色,允許任何人去執(zhí)行。但是在執(zhí)行系統(tǒng)存儲(chǔ)過(guò)程后,將檢查用戶(hù)的角色成員資格。如果此用戶(hù)不是運(yùn)行此存儲(chǔ)過(guò)程所需要的適當(dāng)?shù)墓潭ǚ?wù)器或數(shù)據(jù)庫(kù)角色的成員,則此存儲(chǔ)過(guò)程不會(huì)繼續(xù)執(zhí)行。
REVOKE 語(yǔ)句可用于刪除已授予的權(quán)限,DENY 語(yǔ)句可用于防止用戶(hù)通過(guò) GRANT 語(yǔ)句獲得權(quán)限給他們的用戶(hù)帳戶(hù)。
授予權(quán)限刪除所授予級(jí)別(用戶(hù)、組或角色)上的已拒絕權(quán)限或已廢除權(quán)限。在另一級(jí)別(諸如包含此用戶(hù)的組或角色)上被拒絕的同一權(quán)限優(yōu)先起作用。但是,雖然在另一級(jí)別上所廢除的同一權(quán)限仍然適用,但它并不阻止用戶(hù)訪問(wèn)該對(duì)象。
如果用戶(hù)激活應(yīng)用程序角色,對(duì)此用戶(hù)通過(guò)該應(yīng)用程序角色訪問(wèn)的任何對(duì)象,GRANT 的作用為空。因此,盡管一個(gè)用戶(hù)可能被授予了對(duì)當(dāng)前數(shù)據(jù)庫(kù)中的指定對(duì)象的訪問(wèn)權(quán)限,但是如果此用戶(hù)使用對(duì)此對(duì)象無(wú)訪問(wèn)權(quán)限的應(yīng)用程序角色,則在應(yīng)用程序角色激活期間,此用戶(hù)也沒(méi)有此對(duì)象的訪問(wèn)權(quán)限。
sp_helprotect 系統(tǒng)存儲(chǔ)過(guò)程報(bào)告在數(shù)據(jù)庫(kù)對(duì)象或用戶(hù)上的權(quán)限。
GRANT 權(quán)限依賴(lài)于所授予的語(yǔ)句權(quán)限和權(quán)限中涉及的對(duì)象。sysadmin 角色中的成員可在任何數(shù)據(jù)庫(kù)中授予任何權(quán)限。對(duì)象所有者可為他們所擁有的對(duì)象授予權(quán)限。db_owner 或 db_securityadmin 角色的成員可授予其數(shù)據(jù)庫(kù)中任何語(yǔ)句或?qū)ο笊系娜魏螜?quán)限。
需要權(quán)限的語(yǔ)句是那些在數(shù)據(jù)庫(kù)中增加對(duì)象,或?qū)?shù)據(jù)庫(kù)執(zhí)行管理活動(dòng)的語(yǔ)句。每條需要權(quán)限的語(yǔ)句都有一個(gè)特定的角色集,自動(dòng)有權(quán)限執(zhí)行此語(yǔ)句。例如,sysadmin、db_owner 和 db_ddladmin 角色的成員默認(rèn)有CREATE TABLE 權(quán)限。sysadmin 和 db_owner 角色以及表的所有者默認(rèn)有對(duì)表執(zhí)行 SELECT 語(yǔ)句的權(quán)限。
有一些 Transact-SQL 語(yǔ)句不能被授予權(quán)限;執(zhí)行這些語(yǔ)句要求有固定角色中的成員資格,此角色有默示執(zhí)行特殊語(yǔ)句的權(quán)限。例如,若要執(zhí)行 SHUTDOWN 語(yǔ)句,用戶(hù)必須添加為 serveradmin 角色中的成員。
dbcreator、processadmin、securityadmin 和 serveradmin 固定服務(wù)器角色的成員僅有權(quán)執(zhí)行以下 Transact-SQL 語(yǔ)句。
語(yǔ)句 | dbcreator | processadmin | securityadmin | serveradmin | bulkadmin |
---|---|---|---|---|---|
ALTER DATABASE | X | ||||
CREATE DATABASE | X | ||||
BULK INSERT | X | ||||
DBCC | X (1) | ||||
DENY | X (2) | ||||
GRANT | X (2) | ||||
KILL | X | ||||
RECONFIGURE | X | ||||
RESTORE | X | ||||
REVOKE | X (2) | ||||
SHUTDOWN | X |
(1) 有關(guān)更多信息,請(qǐng)參見(jiàn) DBCC 語(yǔ)句。
(2) 僅適用于 CREATE DATABASE 語(yǔ)句。
說(shuō)明 diskadmin 和 setupadmin 固定服務(wù)器角色的成員沒(méi)有權(quán)限執(zhí)行任何 Transact-SQL 語(yǔ)句,他們只能執(zhí)行特定的系統(tǒng)存儲(chǔ)過(guò)程。但是,sysadmin 固定服務(wù)器角色的成員有權(quán)限執(zhí)行所有的 Transact-SQL 語(yǔ)句。
下面的固定數(shù)據(jù)庫(kù)角色的成員有權(quán)限執(zhí)行指定的 Transact-SQL 語(yǔ)句。
語(yǔ)句 | db_owner | db_datareader | db_datawriter | db_ddladmin | db_backupoperator | db_securityadmin |
---|---|---|---|---|---|---|
ALTER DATABASE | X | X | ||||
ALTER FUNCTION | X | X | ||||
ALTER PROCEDURE | X | X | ||||
ALTER TABLE | X (1) | X | ||||
ALTER TRIGGER | X | X | ||||
ALTER VIEW | X (1) | X | ||||
BACKUP | X | X | ||||
CHECKPOINT | X | X | ||||
CREATE DEFAULT | X | X | ||||
CREATE FUNCTION | X | X | ||||
CREATE INDEX | X (1) | X | ||||
CREATE PROCEDURE | X | X | ||||
CREATE RULE | X | X | ||||
CREATE TABLE | X | X | ||||
CREATE TRIGGER | X (1) | X | ||||
CREATE VIEW | X | X | ||||
DBCC | X | X (2) | ||||
DELETE | X (1) | X | ||||
DENY | X | X | ||||
DENY on object | X | |||||
DROP | X (1) | X | ||||
EXECUTE | X (1) | |||||
GRANT | X | X | ||||
GRANT on object | X (1) | |||||
INSERT | X (1) | X | ||||
READTEXT | X (1) | X | ||||
REFERENCES | X (1) | X | ||||
RESTORE | X | |||||
REVOKE | X | X | ||||
REVOKE on object | X (1) | |||||
SELECT | X (1) | X | ||||
SETUSER | X | |||||
TRUNCATE TABLE | X (1) | X | ||||
UPDATE | X (1) | X | ||||
UPDATE STATISTICS | X (1) | |||||
UPDATETEXT | X (1) | X | ||||
WRITETEXT | X (1) | X |
(1) 權(quán)限也適用于對(duì)象所有者。
(2) 有關(guān)更多信息,請(qǐng)參見(jiàn) DBCC 語(yǔ)句。
說(shuō)明 db_accessadmin 固定數(shù)據(jù)庫(kù)角色的成員沒(méi)有執(zhí)行任何 Transact-SQL 語(yǔ)句的權(quán)限,只可執(zhí)行特定的系統(tǒng)存儲(chǔ)過(guò)程。
不需要權(quán)限即可執(zhí)行的 Transact-SQL 語(yǔ)句有(已自動(dòng)授予 public):
BEGIN TRANSACTION | COMMIT TRANSACTION |
RAISERROR | |
ROLLBACK TRANSACTION | SAVE TRANSACTION |
SET |
有關(guān)執(zhí)行系統(tǒng)存儲(chǔ)過(guò)程所需權(quán)限的更多信息,請(qǐng)參見(jiàn)相應(yīng)的系統(tǒng)存儲(chǔ)過(guò)程。
下面的示例給用戶(hù) Mary 和 John 以及 Windows NT 組 Corporate\BobJ 授予多個(gè)語(yǔ)句權(quán)限。
GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]
下例顯示權(quán)限的優(yōu)先順序。首先,給 public 角色授予 SELECT 權(quán)限。然后,將特定的權(quán)限授予用戶(hù) Mary、John 和 Tom。于是這些用戶(hù)就有了對(duì) authors 表的所有權(quán)限。
USE pubs
GO
GRANT SELECT
ON authors
TO public
GO
GRANT INSERT, UPDATE, DELETE
ON authors
TO Mary, John, Tom
GO
下面的示例將 CREATE TABLE 權(quán)限授予 Accounting 角色的所有成員。
GRANT CREATE TABLE TO Accounting
用戶(hù) Jean 擁有表 Plan_Data。Jean 將表 Plan_Data 的 SELECT 權(quán)限授予 Accounting 角色(指定 WITH GRANT OPTION 子句)。用戶(hù) Jill 是 Accounting 的成員,他要將表 Plan_Data 上的 SELECT 權(quán)限授予用戶(hù) Jack,Jack 不是 Accounting 的成員。
因?yàn)閷?duì)表 Plan_Data 用 GRANT 語(yǔ)句授予其他用戶(hù) SELECT 權(quán)限的權(quán)限是授予 Accounting 角色而不是顯式地授予 Jill,不能因?yàn)橐咽谟?Accounting 角色中成員該權(quán)限,而使 Jill 能夠授予表的權(quán)限。Jill 必須用 AS 子句來(lái)獲得 Accounting 角色的授予權(quán)限。
/* User Jean */
GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION
/* User Jill */
GRANT SELECT ON Plan_Data TO Jack AS Accounting
相關(guān)文章