SQLGRANT详解.docx
- 文档编号:8964345
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:11
- 大小:18.61KB
SQLGRANT详解.docx
《SQLGRANT详解.docx》由会员分享,可在线阅读,更多相关《SQLGRANT详解.docx(11页珍藏版)》请在冰豆网上搜索。
SQLGRANT详解
Transact-SQL参考
GRANT
在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的Transact-SQL语句。
语法
语句权限:
GRANT{ALL|statement[,...n]}
TOsecurity_account[,...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}
}
TOsecurity_account[,...n]
[WITHGRANTOPTION]
[AS{group|role}]
参数
ALL
表示授予所有可用的权限。
对于语句权限,只有sysadmin角色成员可以使用ALL。
对于对象权限,sysadmin和db_owner角色成员和数据库对象所有者都可以使用ALL。
statement
是被授予权限的语句。
语句列表可以包括:
∙CREATEDATABASE
∙CREATEDEFAULT
∙CREATEFUNCTION
∙CREATEPROCEDURE
∙CREATERULE
∙CREATETABLE
∙CREATEVIEW
∙BACKUPDATABASE
∙BACKUPLOG
n
一个占位符,表示此项可在逗号分隔的列表中重复。
TO
指定安全帐户列表。
security_account
是权限将应用的安全帐户。
安全帐户可以是:
∙Microsoft®SQLServer™用户。
∙SQLServer角色。
∙MicrosoftWindowsNT®用户。
∙WindowsNT组。
当权限被授予一个SQLServer用户或WindowsNT用户帐户,指定的security_account是权限能影响到的唯一帐户。
若权限被授予SQLServer角色或WindowsNT组,权限可影响到当前数据库中该组或该角色成员的所有用户。
若组或角色和它们的成员之间存在权限冲突,最严格的权限(DENY)优先起作用。
security_account必须在当前数据库中存在;不可将权限授予其它数据库中的用户、角色或组,除非已为该用户在当前数据库中创建或给予了访问权限。
两个特殊的安全帐户可用于GRANT语句。
授予public角色的权限可应用于数据库中的所有用户。
授予guest用户的权限可为所有在数据库中没有用户帐户的用户使用。
当授予某个WindowsNT本地组或全局组权限时,请指定在其上定义该组的域名或计算机名,然后依次输入反斜线和组名。
但是,若要授予访问WindowsNT内置本地组的权限,请指定BUILTIN而不是域名或计算机名。
PRIVILEGES
是可以包含在符合SQL-92标准的语句中的可选关键字。
permission
是当前授予的对象权限。
当在表、表值函数或视图上授予对象权限时,权限列表可以包括这些权限中的一个或多个:
SELECT、INSERT、DELETE、REFENENCES或UPDATE。
列列表可以与SELECT和UPDATE权限一起提供。
如果列列表未与SELECT和UPDATE权限一起提供,那么该权限应用于表、视图或表值函数中的所有列。
在存储过程上授予的对象权限只可以包括EXECUTE。
在标量值函数上授予的对象权限可以包括EXECUTE和REFERENCES。
为在SELECT语句中访问某个列,该列上需要有SELECT权限。
为使用UPDATE语句更新某个列,该列上需要有UPDATE权限。
为创建引用某个表的FOREIGNKEY约束,该表上需要有REFERENCES权限。
为使用引用某个对象的WITHSCHEMABINDING子句创建FUNCTION或VIEW,该对象上需要有REFERENCES权限。
column
是当前数据库中授予权限的列名。
table
是当前数据库中授予权限的表名。
view
是当前数据库中被授予权限的视图名。
stored_procedure
是当前数据库中授予权限的存储过程名。
extended_procedure
是当前数据库中授予权限的扩展存储过程名。
user_defined_function
是当前数据库中授予权限的用户定义函数名。
WITHGRANTOPTION
表示给予了security_account将指定的对象权限授予其它安全帐户的能力。
WITHGRANTOPTION子句仅对对象权限有效。
AS{group|role}
指当前数据库中有执行GRANT语句权力的安全帐户的可选名。
当对象上的权限被授予一个组或角色时使用AS,对象权限需要进一步授予不是组或角色的成员的用户。
因为只有用户(而不是组或角色)可执行GRANT语句,组或角色的特定成员授予组或角色权力之下的对象的权限。
注释
不允许有跨数据库权限;只能将当前数据库中的对象和语句的权限授予当前数据库中的用户。
如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。
说明系统存储过程是例外,因为EXECUTE权限已经授予public角色,允许任何人去执行。
但是在执行系统存储过程后,将检查用户的角色成员资格。
如果此用户不是运行此存储过程所需要的适当的固定服务器或数据库角色的成员,则此存储过程不会继续执行。
REVOKE语句可用于删除已授予的权限,DENY语句可用于防止用户通过GRANT语句获得权限给他们的用户帐户。
授予权限删除所授予级别(用户、组或角色)上的已拒绝权限或已废除权限。
在另一级别(诸如包含此用户的组或角色)上被拒绝的同一权限优先起作用。
但是,虽然在另一级别上所废除的同一权限仍然适用,但它并不阻止用户访问该对象。
如果用户激活应用程序角色,对此用户通过该应用程序角色访问的任何对象,GRANT的作用为空。
因此,尽管一个用户可能被授予了对当前数据库中的指定对象的访问权限,但是如果此用户使用对此对象无访问权限的应用程序角色,则在应用程序角色激活期间,此用户也没有此对象的访问权限。
sp_helprotect系统存储过程报告在数据库对象或用户上的权限。
权限
GRANT权限依赖于所授予的语句权限和权限中涉及的对象。
sysadmin角色中的成员可在任何数据库中授予任何权限。
对象所有者可为他们所拥有的对象授予权限。
db_owner或db_securityadmin角色的成员可授予其数据库中任何语句或对象上的任何权限。
需要权限的语句是那些在数据库中增加对象,或对数据库执行管理活动的语句。
每条需要权限的语句都有一个特定的角色集,自动有权限执行此语句。
例如,sysadmin、db_owner和db_ddladmin角色的成员默认有CREATETABLE权限。
sysadmin和db_owner角色以及表的所有者默认有对表执行SELECT语句的权限。
有一些Transact-SQL语句不能被授予权限;执行这些语句要求有固定角色中的成员资格,此角色有默示执行特殊语句的权限。
例如,若要执行SHUTDOWN语句,用户必须添加为serveradmin角色中的成员。
dbcreator、processadmin、securityadmin和serveradmin固定服务器角色的成员仅有权执行以下Transact-SQL语句。
语句
dbcreator
processadmin
securityadmin
serveradmin
bulkadmin
ALTERDATABASE
X
CREATEDATABASE
X
BULKINSERT
X
DBCC
X
(1)
DENY
X
(2)
GRANT
X
(2)
KILL
X
RECONFIGURE
X
RESTORE
X
REVOKE
X
(2)
SHUTDOWN
X
(1)有关更多信息,请参见DBCC语句。
(2)仅适用于CREATEDATABASE语句。
说明diskadmin和setupadmin固定服务器角色的成员没有权限执行任何Transact-SQL语句,他们只能执行特定的系统存储过程。
但是,sysadmin固定服务器角色的成员有权限执行所有的Transact-SQL语句。
下面的固定数据库角色的成员有权限执行指定的Transact-SQL语句。
语句
db_owner
db_datareader
db_datawriter
db_ddladmin
db_backupoperator
db_securityadmin
ALTERDATABASE
X
X
ALTERFUNCTION
X
X
ALTERPROCEDURE
X
X
ALTERTABLE
X
(1)
X
ALTERTRIGGER
X
X
ALTERVIEW
X
(1)
X
BACKUP
X
X
CHECKPOINT
X
X
CREATEDEFAULT
X
X
CREATEFUNCTION
X
X
CREATEINDEX
X
(1)
X
CREATEPROCEDURE
X
X
CREATERULE
X
X
CREATETABLE
X
X
CREATETRIGGER
X
(1)
X
CREATEVIEW
X
X
DBCC
X
X
(2)
DELETE
X
(1)
X
DENY
X
X
DENYonobject
X
DROP
X
(1)
X
EXECUTE
X
(1)
GRANT
X
X
GRANTonobject
X
(1)
INSERT
X
(1)
X
READTEXT
X
(1)
X
REFERENCES
X
(1)
X
RESTORE
X
REVOKE
X
X
REVOKEonobject
X
(1)
SELECT
X
(1)
X
SETUSER
X
TRUNCATETABLE
X
(1)
X
UPDATE
X
(1)
X
UPDATESTATISTICS
X
(1)
UPDATETEXT
X
(1)
X
WRITETEXT
X
(1)
X
(1)权限也适用于对象所有者。
(2)有关更多信息,请参见DBCC语句。
说明db_accessadmin固定数据库角色的成员没有执行任何Transact-SQL语句的权限,只可执行特定的系统存储过程。
不需要权限即可执行的Transact-SQL语句有(已自动授予public):
BEGINTRANSACTION
COMMITTRANSACTION
RAISERROR
ROLLBACKTRANSACTION
SAVETRANSACTION
SET
有关执行系统存储过程所需权限的更多信息,请参见相应的系统存储过程。
示例
A.授予语句权限
下面的示例给用户Mary和John以及WindowsNT组Corporate\BobJ授予多个语句权限。
GRANTCREATEDATABASE,CREATETABLE
TOMary,John,[Corporate\BobJ]
B.在权限层次中授予对象权限
下例显示权限的优先顺序。
首先,给public角色授予SELECT权限。
然后,将特定的权限授予用户Mary、John和Tom。
于是这些用户就有了对authors表的所有权限。
USEpubs
GO
GRANTSELECT
ONauthors
TOpublic
GO
GRANTINSERT,UPDATE,DELETE
ONauthors
TOMary,John,Tom
GO
C.给SQLServer角色授予权限
下面的示例将CREATETABLE权限授予Accounting角色的所有成员。
GRANTCREATETABLETOAccounting
D.用AS选项授予权限
用户Jean拥有表Plan_Data。
Jean将表Plan_Data的SELECT权限授予Accounting角色(指定WITHGRANTOPTION子句)。
用户Jill是Accounting的成员,他要将表Plan_Data上的SELECT权限授予用户Jack,Jack不是Accounting的成员。
因为对表Plan_Data用GRANT语句授予其他用户SELECT权限的权限是授予Accounting角色而不是显式地授予Jill,不能因为已授予Accounting角色中成员该权限,而使Jill能够授予表的权限。
Jill必须用AS子句来获得Accounting角色的授予权限。
/*UserJean*/
GRANTSELECTONPlan_DataTOAccountingWITHGRANTOPTION
/*UserJill*/
GRANTSELECTONPlan_DataTOJackASAccounting
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLGRANT 详解