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