GRANT (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 中的 SQL 终结点 Microsoft Fabric 中的仓库 Microsoft Fabric SQL 数据库

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

Transact-SQL 语法约定

语法

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
}

参数

ALL

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

安全对象 权限
数据库 BACKUP DATABASE、、BACKUP LOGCREATE DEFAULTCREATE DATABASECREATE FUNCTIONCREATE PROCEDURECREATE RULE、、 CREATE TABLECREATE VIEW
标量函数 EXECUTEREFERENCES
Table-valued 函数 DELETEINSERTREFERENCESSELECTUPDATE
存储过程 EXECUTE
DELETEINSERTREFERENCESSELECTUPDATE
视图 DELETEINSERTREFERENCESSELECTUPDATE

PRIVILEGES

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

permission

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

column

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

class

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

securable

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

TO principal

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

GRANT OPTION

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

AS principal

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

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

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

注解

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

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

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

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

注意

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

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

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

WITH GRANT OPTION

指定 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

权限

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

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

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

示例

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

安全对象 GRANT 语法
应用程序角色 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 语句授予服务器主体权限 (Transact-SQL)
消息类型 GRANT Service Broker 权限 (Transact-SQL)
Object 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)
User GRANT 数据库主体权限 (Transact-SQL)
视图 GRANT 对象权限 (Transact-SQL)
XML 架构集合 GRANT XML 架构集合权限 (Transact-SQL)