GRANT (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric中的SQL分析端点Microsoft Fabric中的仓库Microsoft Fabric中的SQL数据库

为主体授予安全对象的权限。 一般概念是 GRANT <some permission> ON <some object> TO <some user, login, or group>。 有关权限的一般讨论,请参阅权限(数据库引擎)。

Transact-SQL 语法约定

Syntax

SQL Server、Azure SQL 数据库 和 Fabric SQL 数据库的语法。

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

Azure Synapse Analytics 和 Microsoft Fabric 仓库的语法。

GRANT
    <permission> [ , ...n ]
    [ ON [ <class_type> :: ] securable ]
    TO principal [ , ...n ]
    [ WITH GRANT OPTION ]
[;]

<permission> ::=
{ see the tables below }

<class_type> ::=
{
      LOGIN
    | DATABASE
    | OBJECT
    | ROLE
    | SCHEMA
    | USER
}

Arguments

ALL

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

Securable Permissions
Database BACKUP DATABASE、、BACKUP LOG、CREATE DATABASECREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、、 CREATE TABLE和CREATE VIEW
标量函数 EXECUTE 和 REFERENCES
表值函数 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE
存储过程 EXECUTE
Table DELETE、INSERT、REFERENCES、SELECT 和 UPDATE
View DELETE、INSERT、REFERENCES、SELECT 和 UPDATE

PRIVILEGES

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

permission

权限的名称。 以下各节介绍了对安全对象的权限的有效映射。

column

指定表中将授予权限的列的名称。 括号 ( 和 ) 必需。

class

指定将授予权限的安全对象的类。 需要范围限定符 :: 。

securable

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

致 校长

主体的名称。 可为其授予安全对象权限的主体随安全对象而异。 有关有效组合,请参阅以下部分。

GRANT 选项

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

副 校长

AS <principal>使用子句指示记录为权限的主体应是执行语句的人员以外的主体。 例如,假设该用户Mary具有一principal_id个12,并且用户Raul是主体15。 Mary 执行 GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Now 表sys.database_permissions表示grantor_principal_id15Raul,即使语句实际上是由用户12执行()。Mary

通常不建议使用子 AS 句,除非需要显式定义权限链。 有关详细信息,请参阅 权限检查算法的摘要。

AS在此语句中使用并不意味着能够模拟另一个用户。

Remarks

语句的完整 GRANT 语法很复杂。 简化了前面的语法关系图,以引起人们对其结构的注意。 本文后面列出的文章介绍了授予特定安全对象权限的完整语法。

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

授予对指定安全对象的权限将删除 DENY 或 REVOKE 授予该权限。 如果在包含安全对象的较高范围内拒绝相同的权限,则 DENY 优先。 但是,在更高的范围内撤消授予的权限并不优先。

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

Caution

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

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

在 Microsoft Fabric 中, CREATE USER 当前无法显式执行。 执行 GRANT 或 DENY 时,会自动创建用户。

附 GRANT 选项

指定 GRANT ... WITH GRANT OPTION 接收权限的安全主体有权向其他安全帐户授予指定权限。 当接收权限的主体是角色或 Windows 组时,当对象权限需要进一步授予不属于组或角色的用户时, AS 必须使用子句。 由于只有用户(而不是组或角色)才能执行 GRANT 语句,因此组或角色的特定成员必须在授予权限时使用 AS 子句显式调用角色或组成员身份。 以下示例演示授予角色或 Windows 组时如何使用 WITH GRANT OPTION 该角色或 Windows 组。

-- 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 TestProc TO User2;

-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc TO User2 AS TesterRole;

SQL Server 权限图表

有关 PDF 格式的所有数据库引擎权限的海报大小图表,请参阅https://aka.ms/sql-permissions-poster。

Permissions

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

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

权限的被授权者CONTROL SERVER(如 sysadmin 固定服务器角色的成员)可以向服务器中的任何安全对象授予任何权限。 对数据库的权限被授权者CONTROL(如db_owner固定数据库角色的成员)可以授予对数据库中任何安全对象的任何权限。 对架构的权限被授权者 CONTROL 可以向架构中的任何对象授予任何权限。

Examples

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

Securable GRANT 语法
应用程序角色 GRANT 数据库主权限(Transact-SQL)
Assembly GRANT 组装许可(Transact-SQL)
非对称密钥 GRANT 非对称密钥权限(Transact-SQL)
可用性组 GRANT 可用性组权限(Transact-SQL)
Certificate GRANT 证书权限(Transact-SQL)
Contract GRANT Service Broker 权限(Transact-SQL)
Database GRANT 数据库权限(Transact-SQL)
数据库作用域凭据 GRANT 数据库范围认证(Transact-SQL)
Endpoint GRANT 终结点权限(Transact-SQL)
Full-Text 目录 GRANT Full-Text 权限(Transact-SQL)
Full-Text 停止表 GRANT Full-Text 权限(Transact-SQL)
Function GRANT 对象权限(Transact-SQL)
Login GRANT 服务器主体权限(Transact-SQL)
消息类型 GRANT Service Broker 权限(Transact-SQL)
Object GRANT 对象权限(Transact-SQL)
Queue GRANT 对象权限(Transact-SQL)
远程服务绑定 GRANT Service Broker 权限(Transact-SQL)
Role GRANT 数据库主权限(Transact-SQL)
Route GRANT Service Broker 权限(Transact-SQL)
Schema GRANT 模式权限(Transact-SQL)
搜索属性列表 GRANT 搜索财产列表权限(Transact-SQL)
Server GRANT 服务器权限(Transact-SQL)
Service GRANT Service Broker 权限(Transact-SQL)
存储过程 GRANT 对象权限(Transact-SQL)
对称钥匙 GRANT 对称密钥权限(Transact-SQL)
Synonym GRANT 对象权限(Transact-SQL)
系统对象 GRANT 系统对象权限(Transact-SQL)
Table GRANT 对象权限(Transact-SQL)
类型 GRANT 类型权限(Transact-SQL)
User GRANT 数据库主权限(Transact-SQL)
View GRANT 对象权限(Transact-SQL)
XML 架构集合 GRANT XML 模式收集权限(Transact-SQL)