GRANT (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
为主体授予安全对象的权限。 一般概念是 GRANT <some permission> ON <some object> TO <some user, login, or group>
。 有关权限的一般讨论,请参阅权限(数据库引擎)。
语法
SQL Server 和 Azure 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 LOG 、CREATE DEFAULT CREATE DATABASE 、CREATE FUNCTION 、CREATE PROCEDURE 、CREATE RULE 、、 CREATE TABLE 和CREATE VIEW |
标量函数 | EXECUTE 和 REFERENCES |
Table-valued 函数 | DELETE 、INSERT 、REFERENCES 、SELECT 和 UPDATE |
存储过程 | EXECUTE |
表 | DELETE 、INSERT 、REFERENCES 、SELECT 和 UPDATE |
视图 | DELETE 、INSERT 、REFERENCES 、SELECT 和 UPDATE |
PRIVILEGES
包含此参数是为了符合 ISO 标准。 不更改 . 的行为 ALL
。
permission
权限的名称。 以下各节介绍了对安全对象的权限的有效映射。
column
指定表中将授予权限的列的名称。 括号 (
和 )
必需。
class
指定将授予权限的安全对象的类。 需要范围限定符 ::
。
securable
指定将授予权限的安全对象。
TO principal
主体的名称。 可为其授予安全对象权限的主体随安全对象而异。 有关有效组合,请参阅以下部分。
GRANT OPTION
指示被授权者在获得指定权限的同时还可以将指定权限授予其他主体。
AS principal
AS <principal>
使用子句指示记录为权限的主体应是执行语句的人员以外的主体。 例如,假设该用户Mary
具有一12
个principal_id
,并且用户Raul
是主体15
。 Mary 执行 GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Now 表sys.database_permissions
表示grantor_prinicpal_id
Raul
15
,即使语句实际上是由用户12
执行()。Mary
通常不建议使用子 AS
句,除非需要显式定义权限链。 有关详细信息,请参阅 权限检查算法的摘要。
AS
在此语句中使用并不意味着能够模拟另一个用户。
注解
语句的完整 GRANT
语法很复杂。 简化了前面的语法关系图,以引起人们对其结构的注意。 本文后面列出的文章介绍了授予特定安全对象权限的完整语法。
该 REVOKE
语句可用于删除已授予的权限,该 DENY
语句可用于防止主体通过 a 获取 GRANT
特定权限。
授予对指定安全对象的权限将删除 DENY
或 REVOKE
授予该权限。 如果在包含安全对象的较高范围内拒绝相同的权限,则 DENY
优先。 但是,在更高的范围内撤消授予的权限并不优先。
数据库级权限在指定的数据库范围内授予。 如果用户需要另一个数据库中的对象的权限,请在该数据库中创建用户帐户,或者授权用户帐户访问该数据库以及当前数据库。
注意
表级 DENY
不优先于列级 GRANT
。 保留了权限层次结构中这种不一致性以保持向后兼容。 未来的版本会将其删除。
系统 sp_helprotect
存储过程报告对数据库级安全对象的权限。
在 Microsoft Fabric 中, CREATE USER
当前无法显式执行。 执行或DENY
执行时GRANT
,会自动创建用户。
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
可以向架构中的任何对象授予任何权限。
示例
下表列出了安全对象以及描述特定于安全对象的语法的文章。