权限: GRANT, DENY, REVOKE

适用于:Azure Synapse Analytics分析平台系统 (PDW)Microsoft Fabric 中的 SQL 分析端点Microsoft Fabric 中的仓库

使用 GRANTDENY 语句,对安全可保护对象(如数据库、表、视图等)授予或拒绝安全主体(登录、数据库用户或数据库角色)权限(如 UPDATE)。 用于 REVOKE 移除许可的授予或拒绝。

服务器级权限适用于登录名。 数据库级权限适用于数据库用户和数据库角色。

若要查看已授予和拒绝授予的权限,请查询 sys.server_permissions 和 sys.database_permissions 视图。 可通过在具有权限的角色中获得成员身份来继承非显式授予或拒绝授予安全主体的权限。 固定数据库角色的权限无法更改,而且不会出现在 sys.server_permissions 和 sys.database_permissions 视图中。

  • GRANT 明确授予一个或多个权限。

  • DENY 明确拒绝委托人拥有一个或多个权限。

  • REVOKE 移除现有 GRANT 的或 DENY 权限。

Transact-SQL 语法约定

语法

-- Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
GRANT   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
DENY   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
REVOKE   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    [ FROM | TO ] principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

参数

<许可>[ ...n ]
要授予、拒绝授予或撤消的一个或多个权限。

ON [ <class_type> :: ] securable:ON 子句描述要对其授予、拒绝授予或撤消权限的 securable 对象参数。

<class_type>:securable 的类类型。 这可以是 LOGINDATABASE 对象、 SCHEMAROLE、 或 。USER 此外,可向 SERVERclass_type 授予权限,但没有为这些权限指定 SERVER。 DATABASE 当权限中包含该词 DATABASE 时,未指定(例如 ALTER ANY DATABASE)。 如果未指定 class_type,并且权限类型不限于服务器或数据库类,则该类假定为 OBJECT。

securable
要授予、拒绝授予或撤销权限的登录名、数据库、表、视图、架构、过程、角色或用户。 可以使用 Transact-SQL 语法约定中所述的三部分命名规则来指定对象名称。

TO principal [ ,...n ]
被授予、拒绝授予或撤销权限的一个或多个主体。 主体是登录名、数据库用户或数据库角色。

FROM principal [ ,...n ]
要从其撤销权限的一个或多个主体。 主体是登录名、数据库用户或数据库角色。 FROM 只能与语句一起使用 REVOKETO可以与、、DENYREVOKEGRANT

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

CASCADE
指示拒绝授予或撤销指定主体该权限,同时,对该主体授予了该权限的所有其他主体,也拒绝授予或撤销该权限。 当校长有OPTION许可GRANT时,必须这样做。

GRANT 选项
指示将撤消授予指定权限的能力。 使用 CASCADE 参数时,为必选项。

重要

如果负责人获得了指定的许可但没有选项 GRANT ,该许可本身将被撤销。

权限

要授予许可,授予者必须拥有带有 WITH GRANT 选项的许可,或拥有更高级别的许可,暗示该许可已被授予。 对象所有者可以授予对其所拥有的对象的权限。 对某安全对象具有 CONTROL 权限的主体可以授予对该安全对象的权限。 db_owner 和 db_securityadmin 固定数据库角色的成员可以授予数据库中的任何权限 。

一般备注

拒绝或撤消授予给某主体的权限不会影响已通过授权和当前运行的请求。 若要立即限制访问,则必须取消活动请求或终止当前会话。

注意

大部分固定服务器角色在此版本中不可用。 请改用用户定义数据库角色。 无法将登录名添加到 sysadmin 固定服务器角色。 授予 CONTROL SERVER 权限近似拥有 sysadmin 固定服务器角色的成员身份 。

某些语句需要多个权限。 例如,创建一个表需要数据库中的 CREATE TABLE 权限,以及 ALTER SCHEMA 包含该表的表的权限。

Analytics Platform System (PDW) 有时会执行存储过程,以将用户操作分发到计算节点。 因此,不能拒绝对整个数据库的 execute 权限。 (例如,DENY EXECUTE ON DATABASE::<name> TO <user>; 将失败。)作为替代方案,可拒绝对用户架构或特定对象(过程)的 execute 权限。

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

在 Microsoft Fabric 中,服务器级别的权限是不可管理的。

隐式和显式权限

显式权限是通过GRANTDENY语句授予某个主体的GRANTDENY权限。

隐式权限是指GRANTDENY主体(登录、用户或数据库角色)从另一个数据库角色继承的权限。

隐式权限还可继承自覆盖的权限或父级权限。 例如,UPDATE表上的权限可以通过对包含该表的模式拥有权限,或对表的UPDATECONTROL权限来继承。

所有权链接

当多个数据库对象按顺序互相访问时,该序列便称为“链”。 尽管这样的链不会单独存在,但是当 SQL Server 遍历链中的链接时,SQL Server 评估对构成对象的权限时的方式与单独访问对象时不同。 所有权链对管理安全性具有重要的影响。 有关所有权链的详细信息,请参阅所有权链教程:所有权链和上下文切换

权限列表

服务器级权限

可从登录名授予、拒绝授予或撤销服务器级权限。

适用于服务器的权限

  • 控制服务器

  • 管理批量操作

  • 更改任何连接

  • 更改任意 DATABASE

  • 创造任何一个 DATABASE

  • 更改任意 EXTERNAL DATA SOURCE

  • 更改任意 EXTERNAL FILE FORMAT

  • 更改任意 LOGIN

  • 更改服务器状态

  • 连接 SQL

  • VIEW 任何定义

  • VIEW 任何 DATABASE

  • VIEW 服务器状态

适用于登录名的权限

  • 控制开启 LOGIN

  • ALTER ON(变体) LOGIN

  • 冒充 LOGIN

  • VIEW 定义

数据库级权限

可从数据库用户和用户定义数据库角色授予、拒绝和撤销数据库级权限。

适用于所有数据库类的权限

  • CONTROL

  • ALTER

  • VIEW 定义

适用于除用户外的所有数据库类的权限

  • 获得所有权

仅适用于数据库的权限

  • 更改任意 DATABASE

  • ALTER ON(变体) DATABASE

  • 更改任何数据空间

  • 更改任意 ROLE

  • 更改任意 SCHEMA

  • 更改任意 USER

  • BACKUP DATABASE

  • 连接 DATABASE

  • CREATE PROCEDURE

  • CREATE ROLE

  • CREATE SCHEMA

  • CREATE TABLE

  • CREATE VIEW

  • SHOWPLAN

仅适用于用户的权限

  • IMPERSONATE

适用于数据库、架构和对象的权限

  • ALTER

  • DELETE

  • EXECUTE

  • INSERT

  • SELECT

  • UPDATE

  • REFERENCES

有关每种类型的权限定义,请参阅权限(数据库引擎)

默认权限

以下列表对默认权限进行了说明:

  • 当使用该 CREATE LOGIN 语句创建登录时,新登录会获得 CONNECT SQL 权限。

  • 所有登录名都是公共服务器角色的成员,无法从其删除 。

  • 当使用 CREATE USER 该权限创建数据库用户时,数据库用户会在数据库中获得 CONNECT 权限。

  • 包括公共角色在内的所有主体,默认情况下都无任何显式或隐式权限。

  • 登录名或用户成为数据库或对象的所有者时,登录名或用户始终拥有对数据库或对象的所有权限。 所有者权限无法更改,也不能显示为显式权限。 GRANT这些DENY、 和 REVOKE 语句对所有者没有影响。

  • sa 登录名具有设备上的所有权限。 类似于所有者权限,sa 权限无法更改,也不能显示为显式权限。 这些DENYGRANTREVOKE 语句对 SA 登录没有影响。 无法重命名 sa 登录名。

  • USE 语句不需要权限。 所有主体都可在任何数据库上运行 USE 语句。

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

A. 为登录名授予服务器级权限

以下两个语句为登录名授予服务器级权限。

GRANT CONTROL SERVER TO [Ted];  
GRANT ALTER ANY DATABASE TO Mary;  

B. 为登录名授予服务器级权限

以下示例为服务器主体(另一登录名)授予对某一登录名的服务器级权限。

GRANT  VIEW DEFINITION ON LOGIN::Ted TO Mary;  

C. 为用户授予数据库级权限

以下示例为数据库主体(另一用户)授予对某一用户的数据库级权限。

GRANT VIEW DEFINITION ON USER::[Ted] TO Mary;  

D. 授予、拒绝授予和撤消架构权限

以下 GRANT 语句赋予袁从dbo schema中任意表或视图中选择数据的能力。

GRANT SELECT ON SCHEMA::dbo TO [Yuen];  

以下 DENY 声明阻止 Yuen 从数据库模式中的任何表或视图中选择数据。 即使 Yuen 以某种其他方式(例如,通过角色成员身份)获得权限,他也无法读取数据。

DENY SELECT ON SCHEMA::dbo TO [Yuen];  

以下 REVOKE 声明移除了该 DENY 权限。 现在,Yuen 的显式权限为中性。 Yuen 可以通过其他隐式权限(如角色成员身份)从任何表中选择数据。

REVOKE SELECT ON SCHEMA::dbo TO [Yuen];  

E. 演示可选的 OBJECT:: 子句

OBJECT 是权限语句的默认类,因此以下两个语句相同。 OBJECT:: 子句为可选项。

GRANT UPDATE ON OBJECT::dbo.StatusTable TO [Ted];  
GRANT UPDATE ON dbo.StatusTable TO [Ted];