现在的位置: 首页 > 综合 > 正文

grant,revoke,deny 服务器权限控制命令

2014年09月05日 ⁄ 综合 ⁄ 共 8641字 ⁄ 字号 评论关闭

GRANT服务器权限命令

为主体授予安全对象的权限。
一般概念是 GRANT <某种权限> ON <某个对象> TO <某个用户、登录名或组>。

有关权限的一般讨论,请参阅权限(数据库引擎)

语法


Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
      | permission [ ( column [ ,...n ] ) ] [ ,...n ]
      [ ON [ class :: ] securable ] TO principal [ ,...n ] 
      [ WITH GRANT OPTION ] [ AS principal ]

参数


ALL

不推荐使用此选项,保留此选项仅用于向后兼容。
它不会授予所有可能的权限。
授予 ALL 参数相当于授予以下权限。

  • 如果安全对象是数据库,则 ALL 对应 BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE 和 CREATE VIEW。

  • 如果安全对象是标量函数,则 ALL 对应 EXECUTE 和 REFERENCES。

  • 如果安全对象是表值函数,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

  • 如果安全对象是存储过程,则 ALL 表示 EXECUTE。

  • 如果安全对象是表,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

  • 如果安全对象是视图,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

PRIVILEGES

包含此参数是为了符合 ISO 标准。
请不要更改 ALL 的行为。

permission

权限的名称。
下面列出的子主题介绍了不同权限与安全对象之间的有效映射。

column

指定表中将授予权限的列的名称。
需要使用圆括号 ()。

class

指定将授予权限的安全对象的类。
需要使用作用域限定符 ::

securable

指定将授予权限的安全对象。

TO principal

主体的名称。
可为其授予安全对象权限的主体随安全对象而异。
有关有效的组合,请参阅下面列出的子主题。

GRANT OPTION

指示被授权者在获得指定权限的同时还可以将指定权限授予其他主体。

作为 principal

指定一个主体,执行该查询的主体从该主体获得授予该权限的权限。

GRANT 语句的完整语法非常复杂。
上面的语法关系图进行了简化以突出其结构。
下面列出的主题介绍了在授予特定安全对象权限时使用的完整语法。

REVOKE 语句可用于删除已授予的权限,DENY 语句可用于防止主体通过 GRANT 获得特定权限。

授予权限将删除对所指定安全对象的相应权限的 DENY 或 REVOKE 权限。如果在包含该安全对象的更高级别拒绝了相同的权限,则 DENY 优先。但是,在更高级别撤消已授予权限的操作并不优先。

数据库级权限在指定的数据库范围内授予。
如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。

注意事项注意

表级 DENY 并不优先于列级 GRANT。
保留了权限层次结构中这种不一致性以保持向后兼容。
未来的版本会将其删除。

sp_helprotect 系统存储过程报告数据库级安全对象的权限。

GRANTWITH GRANT OPTION 指定向接收权限的安全主体提供向其他安全帐户授予指定权限的能力。在接收权限的主体是某一角色或某一 Windows 组时,如果需要进一步将对象权限授予不是该组或角色的成员的用户,则必须使用AS
子句。
因为只有用户(而非某个组或角色)才能执行 GRANT 语句,所以,在授予权限时,该组或角色的特定成员必须使用AS 子句显式调用该角色或组成员身份。下面的示例说明如何在授予角色或 Windows
组时使用 WITH GRANT OPTION

-- Execute the following as a database owner
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION
EXEC sp_addrolemember TesterRole, User1;
-- Execute the following as User1
-- The following fails because User1 does not have the permission as the User1
GRANT EXECUTE ON TestMe TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;

有关 pdf 格式的所有数据库引擎权限的海报大小图表,请参阅
http://go.microsoft.com/fwlink/?LinkId=229142

授权者(或用 AS 选项指定的主体)自身必须具有此权限(带 GRANT OPTION),或具有隐含所授予权限的更高权限。如果使用 AS 选项,则还应满足其他要求。有关详细信息,请参阅特定于安全对象的主题。

对象所有者可以授予对其所拥有的对象的权限。
对某安全对象具有 CONTROL 权限的主体可以授予对该安全对象的权限。

被授予 CONTROL SERVER 权限的用户(例如 sysadmin 固定服务器角色的成员)可以授予对相应服务器中任一个安全对象的任意权限。被授予数据库的 CONTROL 权限的用户(例如 db_owner 固定数据库角色的成员)可以授予数据库中任何安全对象的任意权限。被授予架构的
CONTROL 权限的用户可以授予架构中任何对象的任意权限。

下表列出了安全对象以及描述特定于安全对象的语法的主题。

应用程序角色

GRANT 数据库主体权限 (Transact-SQL)

程序集

GRANT 程序集权限 (Transact-SQL)

非对称密钥

GRANT 非对称密钥权限 (Transact-SQL)

可用性组

GRANT 可用性组权限 (Transact-SQL)

证书

GRANT 证书权限 (Transact-SQL)

约定

GRANT Service Broker 权限 (Transact-SQL)

数据库

GRANT 数据库权限 (Transact-SQL)

端点

GRANT 端点权限 (Transact-SQL)

全文目录

GRANT 全文权限 (Transact-SQL)

全文非索引字表

GRANT 全文权限 (Transact-SQL)

函数

GRANT 对象权限 (Transact-SQL)

登录

通过 GRANT 语句授予服务器主体权限 (Transact-SQL)

消息类型

GRANT Service Broker 权限 (Transact-SQL)

对象

GRANT 对象权限 (Transact-SQL)

队列

GRANT 对象权限 (Transact-SQL)

远程服务绑定

GRANT Service Broker 权限 (Transact-SQL)

角色

GRANT 数据库主体权限 (Transact-SQL)

路由

GRANT Service Broker 权限 (Transact-SQL)

架构

GRANT 架构权限 (Transact-SQL)

搜索属性列表

授予搜索属性列表权限 (Transact-SQL)

服务器

GRANT 服务器权限 (Transact-SQL)

服务

GRANT Service Broker 权限 (Transact-SQL)

存储过程

GRANT 对象权限 (Transact-SQL)

对称密钥

GRANT 对称密钥权限 (Transact-SQL)

同义词

GRANT 对象权限 (Transact-SQL)

系统对象

GRANT 系统对象权限 (Transact-SQL)

GRANT 对象权限 (Transact-SQL)

类型

GRANT 类型权限 (Transact-SQL)

用户

GRANT 数据库主体权限 (Transact-SQL)

视图

GRANT 对象权限 (Transact-SQL)

XML 架构集合

GRANT XML 架构集合权限 (Transact-SQL)


REVOKE服务器权限命令

删除服务器级 GRANT 和 DENY 权限。


语法

REVOKE [ GRANT OPTION FOR ] permission  [ ,...n ] 
    { TO | FROM } <grantee_principal> [ ,...n ]
        [ CASCADE ]
    [ AS <grantor_principal> ] 

<grantee_principal> ::= SQL_Server_login 
        | SQL_Server_login_mapped_to_Windows_login
    | SQL_Server_login_mapped_to_Windows_group
    | SQL_Server_login_mapped_to_certificate
    | SQL_Server_login_mapped_to_asymmetric_key
    | server_role

<grantor_principal> ::= SQL_Server_login 
    | SQL_Server_login_mapped_to_Windows_login
    | SQL_Server_login_mapped_to_Windows_group
    | SQL_Server_login_mapped_to_certificate
    | SQL_Server_login_mapped_to_asymmetric_key
    | server_role

参数

permission

指定可对服务器授予的权限。
有关权限的列表,请参阅本主题后面的“备注”部分。

{ TO | FROM } <grantee_principal>

指定要从中撤消权限的主体。

AS <grantor_principal>

指定执行此查询的主体要从哪个主体派生其撤消该权限的权限。

GRANT OPTION FOR

指示要撤消为其他主体授予指定权限的权限。
不会撤消该权限本身。

重要说明重要提示

如果主体具有不带 GRANT 选项的指定权限,则将撤消该权限本身。

CASCADE

指示要撤消的权限也会从此主体授予或拒绝该权限的其他主体中撤消。

注意事项注意

如果对授予了 WITH GRANT OPTION 权限的权限执行级联撤消,将同时撤消该权限的 GRANT 和 DENY 权限。

SQL_Server_login

指定 SQL Server 登录名。

SQL_Server_login_mapped_to_Windows_login

指定映射到 Windows 登录名的 SQL Server 登录名。

SQL_Server_login_mapped_to_Windows_group

指定映射到 Windows 组的 SQL Server 登录名。

SQL_Server_login_mapped_to_certificate

指定映射到证书的 SQL Server 登录名。

SQL_Server_login_mapped_to_asymmetric_key

指定映射到非对称密钥的 SQL Server 登录名。

server_role

指定用户定义的服务器角色。

只有在当前数据库为 master 时,才能撤消服务器作用域内的权限。

REVOKE 操作可同时删除 GRANT 和 DENY 权限。

可以使用 REVOKE GRANT OPTION FOR 撤消重新授予指定权限的权限。如果主体所具有的权限还带有授予该权限的权限,则将撤消授予该权限的权限,而不会撤消权限本身。但是,如果主体具有不带 GRANT 选项的指定权限,则会撤消权限本身。

可以在
sys.server_permissions
目录视图中查看有关服务器权限的信息;在
sys.server_principals
目录视图中查看有关服务器主体的信息;

以及在 sys.server_role_members 目录视图中查看有关服务器角色成员身份的信息。

服务器是权限层次结构的最高级别。
下表列出了可撤消的对服务器最为具体的限定权限。

服务器权限

服务器权限隐含的权限

ADMINISTER BULK OPERATIONS

CONTROL SERVER

ALTER ANY CONNECTION

CONTROL SERVER

ALTER ANY CREDENTIAL

CONTROL SERVER

ALTER ANY DATABASE

CONTROL SERVER

ALTER ANY ENDPOINT

CONTROL SERVER

ALTER ANY EVENT NOTIFICATION

CONTROL SERVER

ALTER ANY EVENT SESSION

CONTROL SERVER

ALTER ANY LINKED SERVER

CONTROL SERVER

ALTER ANY LOGIN

CONTROL SERVER

ALTER ANY SERVER AUDIT

CONTROL SERVER

ALTER ANY SERVER ROLE

CONTROL SERVER

ALTER RESOURCES

CONTROL SERVER

ALTER SERVER STATE

CONTROL SERVER

ALTER SETTINGS

CONTROL SERVER

ALTER TRACE

CONTROL SERVER

AUTHENTICATE SERVER

CONTROL SERVER

CONNECT SQL

CONTROL SERVER

CONTROL SERVER

CONTROL SERVER

CREATE ANY DATABASE

ALTER ANY DATABASE

CREATE DDL EVENT NOTIFICATION

ALTER ANY EVENT NOTIFICATION

CREATE ENDPOINT

ALTER ANY ENDPOINT

CREATE TRACE EVENT NOTIFICATION

ALTER ANY EVENT NOTIFICATION

EXTERNAL ACCESS ASSEMBLY

CONTROL SERVER

SHUTDOWN

CONTROL SERVER

UNSAFE ASSEMBLY

CONTROL SERVER

VIEW ANY DATABASE

VIEW ANY DEFINITION

VIEW ANY DEFINITION

CONTROL SERVER

VIEW SERVER STATE

ALTER SERVER STATE

要求具有 CONTROL SERVER 权限,或者具有 sysadmin 固定服务器角色的成员身份。

A.从登录名中撤消权限

以下示例从 SQL Server 登录名 WanidaBenshoof 中撤消VIEW SERVER STATE 权限。

USE master;
REVOKE VIEW SERVER STATE FROM WanidaBenshoof;
GO

B.撤消 WITH GRANT 选项

以下示例从 SQL Server 登录名 JanethEsteves 中撤消授予CONNECT SQL 的权限。

USE master;
REVOKE GRANT OPTION FOR CONNECT SQL FROM JanethEsteves;
GO

该登录名仍然具有 CONNECT SQL 权限,但是不能将该权限再授予其他主体。

DENY 服务器权限命令

拒绝为主体授予权限。
防止该主体通过组或角色成员身份继承权限。

Simplified syntax for DENY
DENY { ALL [ PRIVILEGES ] }
      | permission [ ( column [ ,...n ] ) ] [ ,...n ]
      [ ON [ class :: ] securable ] TO principal [ ,...n ] 
      [ CASCADE] [ AS principal ]

参数


ALL

该选项不拒绝所有可能权限。
拒绝 ALL 相当于拒绝下列权限。

  • 如果安全对象是数据库,则 ALL 对应 BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE 和 CREATE VIEW。

  • 如果安全对象是标量函数,则 ALL 对应 EXECUTE 和 REFERENCES。

  • 如果安全对象是表值函数,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

  • 如果安全对象是存储过程,则 ALL 表示 EXECUTE。

  • 如果安全对象是表,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

  • 如果安全对象是视图,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。

注意注意

不推荐使用 DENY ALL 语法。
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。应改为拒绝特定权限。

PRIVILEGES

包含此参数是为了符合 ISO 标准。
请不要更改 ALL 的行为。

permission

权限的名称。
下面列出的子主题介绍了不同权限与安全对象之间的有效映射。

column

指定表中拒绝授予其权限的列名。
需要使用圆括号 ()。

class

指定拒绝授予其权限的安全对象的类。
需要使用作用域限定符 ::

securable

指定拒绝授予其权限的安全对象。

TO principal

主体的名称。
可以对其拒绝安全对象权限的主体随安全对象而异。
有关有效的组合,请参阅下面列出的特定于安全对象的主题。

CASCADE

指示拒绝授予指定主体该权限,同时,对该主体授予了该权限的所有其他主体,也拒绝授予该权限。当主体具有带 GRANT OPTION 的权限时,为必选项。

作为 principal

指定一个主体,执行该语句的主体从该主体获得拒绝授予该权限的权限。

DENY 语句的完整语法很复杂。
上面的语法关系图进行了简化以突出其结构。
下列主题说明了用于拒绝授予特定安全对象的权限的完整语法。

如果在拒绝为主体授予某种权限时未指定 CASCADE,而之前为该主体授予此权限时指定了 GRANT OPTION,则 DENY 将失败。

sp_helprotect 系统存储过程报告数据库级安全对象的权限。

注意事项注意

表级 DENY 并不优先于列级 GRANT。
保留了权限层次结构中这种不一致性以保持向后兼容。
未来的版本会将其删除。

注意事项注意

拒绝授予数据库 CONTROL 权限将隐式拒绝授予该数据库 CONNECT 权限。如果拒绝授予某一主体对某一数据库的 CONTROL 权限,该主体将无法连接到该数据库。

注意事项注意

拒绝授予 CONTROL SERVER 权限将隐式拒绝授予对服务器的 CONNECT SQL 权限。如果拒绝授予某一主体对某一服务器的 CONTROL SERVER 权限,该主体将无法连接到该服务器。

调用方(或使用 AS 选项指定的主体)必须对安全对象具有 CONTROL 权限,或对该安全对象具有隐含 CONTROL 权限的更高权限。如果使用 AS 选项,那么指定主体必须拥有其权限被拒绝授予的安全对象。

被授予 CONTROL SERVER 权限的用户(如 sysadmin 固定服务器角色的成员)可以拒绝授予服务器中的任何安全对象的任意权限。被授予数据库的 CONTROL 权限的用户(如 db_owner 固定数据库角色的成员)可以拒绝授予数据库中的任何安全对象的任意权限。被授予架构
CONTROL 权限的用户可以拒绝对架构中任何对象授予权限。
如果使用 AS 子句,那么指定主体必须拥有其权限被拒绝授予的安全对象。

下表列出了安全对象以及描述特定于安全对象的语法的主题。

应用程序角色

DENY 数据库主体权限 (Transact-SQL)

程序集

DENY 程序集权限 (Transact-SQL)

非对称密钥

DENY 非对称密钥权限 (Transact-SQL)

可用性组

DENY 可用性组权限 (Transact-SQL)

证书

DENY 证书权限 (Transact-SQL)

约定

DENY Service Broker 权限 (Transact-SQL)

数据库

DENY 数据库权限 (Transact-SQL)

端点

DENY 端点权限 (Transact-SQL)

全文目录

DENY 全文权限 (Transact-SQL)

全文非索引字表

DENY 全文权限 (Transact-SQL)

函数

DENY 对象权限 (Transact-SQL)

登录

拒绝服务器主体权限 (Transact-SQL)

消息类型

DENY Service Broker 权限 (Transact-SQL)

对象

DENY 对象权限 (Transact-SQL)

队列

DENY 对象权限 (Transact-SQL)

远程服务绑定

DENY Service Broker 权限 (Transact-SQL)

角色

DENY 数据库主体权限 (Transact-SQL)

路由

DENY Service Broker 权限 (Transact-SQL)

架构

DENY 架构权限 (Transact-SQL)

搜索属性列表

拒绝搜索属性列表权限 (Transact-SQL)

服务器

DENY 服务器权限 (Transact-SQL)

服务

DENY Service Broker 权限 (Transact-SQL)

存储过程

DENY 对象权限 (Transact-SQL)

对称密钥

DENY 对称密钥权限 (Transact-SQL)

同义词

DENY 对象权限 (Transact-SQL)

系统对象

DENY 系统对象权限 (Transact-SQL)

DENY 对象权限 (Transact-SQL)

类型

DENY 类型权限 (Transact-SQL)

用户

DENY 数据库主体权限 (Transact-SQL)

视图

DENY 对象权限 (Transact-SQL)

XML 架构集合

DENY XML 架构集合权限 (Transact-SQL)

抱歉!评论已关闭.