GRANT 对象权限 (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
授予对表、视图、表值函数、存储过程、扩展存储过程、标量函数、聚合函数、服务队列或同义词的权限。
语法
GRANT <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column_name [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ]
[ AS <database_principal> ]
<permission> ::=
ALL [ PRIVILEGES ] | permission [ ( column_name [ ,...n ] ) ]
<database_principal> ::=
Database_user
| Database_role
| Application_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
| Database_user_mapped_to_certificate
| Database_user_mapped_to_asymmetric_key
| Database_user_with_no_login
参数
permission
指定可以授予的对架构包含的对象的权限。 有关权限的列表,请参阅注解。
ALL
授予 ALL 不会授予所有可能的权限。 授予 ALL 等同于授予适用于指定对象的所有 ANSI-92 权限。 对于不同权限,ALL 的含义有所不同:
- 标量值函数权限:EXECUTE、REFERENCES。
- 表值函数权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
- 存储过程权限:EXECUTE。
- 表权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
- 视图权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
注意
ALL 权限已不再推荐使用,并且只保留用于兼容性目的。
PRIVILEGES
包含此参数以符合 ANSI-92 标准。 请不要更改 ALL 的行为。
column_name
指定表、视图或表值函数中要授予对其权限的列的名称。 需要使用括号 ( )。 只能授予对列的 SELECT、REFERENCES、UPDATE 及 UNMASK 权限。 可以在权限子句中或在安全对象名称之后指定 column_name。
注意
表级 DENY 并不优先于列级 GRANT。 保留了权限层次结构中的这种不一致性以保持向后兼容。
ON [ OBJECT :: ] [ schema_name ] . object_name
指定要授予对其权限的对象。 如果指定了 schema_name,则 OBJECT 短语是可选的。 如果使用了 OBJECT 短语,则需要作用域限定符 (::)。 如果未指定 schema_name,则使用默认架构。 如果指定了 schema_name,则需要使用架构作用域限定符 (.)。
TO <database_principal>
指定要向其授予权限的主体。
WITH GRANT OPTION
指示该主体还可以向其他主体授予所指定的权限。
AS <database_principal>
指定一个主体,执行该查询的主体从该主体获得授予该权限的权利。
Database_user
指定数据库用户。
Database_role
指定数据库角色。
Application_role
指定应用程序角色。
Database_user_mapped_to_Windows_User
指定映射到 Windows 用户的数据库用户。
Database_user_mapped_to_Windows_Group
指定映射到 Windows 组的数据库用户。
Database_user_mapped_to_certificate
指定映射到证书的数据库用户。
Database_user_mapped_to_asymmetric_key
指定映射到非对称密钥的数据库用户。
Database_user_with_no_login
指定无相应服务器级主体的数据库用户。
备注
重要
在某些情况下,如果同时拥有 ALTER
权限和 REFERENCE
权限,被授权者将可以查看数据或执行未经授权的函数。 例如:对表拥有 ALTER
权限和对函数拥有 REFERENCE
权限的用户可对函数创建计算列并执行该函数。 在此情况下,用户可能需要对计算列具有 SELECT
权限。
可以在各种目录视图中查看对象的有关信息。 有关详细信息,请参阅对象目录视图 (Transact-SQL)。
对象是一个架构级的安全对象,包含于权限层次结构中作为其父级的架构中。 下表列出了可授予的对对象最为具体的限定权限,以及隐含这些权限的更为通用的权限。
对象权限 | 对象权限隐含的权限 | 架构权限隐含的权限 |
---|---|---|
ALTER |
CONTROL |
ALTER |
CONTROL |
CONTROL |
CONTROL |
DELETE |
CONTROL |
DELETE |
EXECUTE |
CONTROL |
EXECUTE |
INSERT |
CONTROL |
INSERT |
RECEIVE |
CONTROL |
CONTROL |
REFERENCES |
CONTROL |
REFERENCES |
SELECT |
RECEIVE |
SELECT |
TAKE OWNERSHIP |
CONTROL |
CONTROL |
UPDATE |
CONTROL |
UPDATE |
VIEW CHANGE TRACKING |
CONTROL |
VIEW CHANGE TRACKING |
VIEW DEFINITION |
CONTROL |
VIEW DEFINITION |
权限
授权者(或用 AS 选项指定的主体)必须具有带 GRANT OPTION
的相同权限,或具有隐含所授予权限的更高权限。
若要使用 AS 选项,还必须满足以下附加要求:
AS | 所需的其他权限 |
---|---|
数据库用户 | 对用户的 IMPERSONATE 权限、db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或 sysadmin 固定服务器角色的成员身份。 |
映射到 Windows 登录名的数据库用户 | 对用户的 IMPERSONATE 权限、db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或 sysadmin 固定服务器角色的成员身份。 |
映射到 Windows 组的数据库用户 | Windows 组的成员身份、db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或 sysadmin 固定服务器角色的成员身份。 |
映射到证书的数据库用户 | db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或 sysadmin 固定服务器角色的成员身份。 |
映射到非对称密钥的数据库用户 | db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或 sysadmin 固定服务器角色的成员身份。 |
未映射到任何服务器主体的数据库用户 | 对用户的 IMPERSONATE 权限、db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或 sysadmin 固定服务器角色的成员身份。 |
数据库角色 | 对角色的 ALTER 权限、db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或sysadmin 固定服务器角色的成员身份。 |
应用程序角色 | 对角色的 ALTER 权限、db_securityadmin 固定数据库角色的成员身份、db_owner 固定数据库角色的成员身份或sysadmin 固定服务器角色的成员身份。 |
示例
A. 授予表的 SELECT 权限
以下示例授予用户 SELECT
对 RosaQdM
数据库中表 Person.Address
的 AdventureWorks2022
权限。
编写的此示例在 Microsoft Fabric 中不起作用,因为它使用用户进行 SQL 身份验证的登录,但同一示例适用于 Microsoft Entra ID Fabric 用户,例如 RosaQdM@contoso.com
。
GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;
GO
B. 授予对存储过程的 EXECUTE 权限
以下示例授予名为 EXECUTE
的应用程序角色对存储过程 HumanResources.uspUpdateEmployeeHireInfo
的 Recruiting11
权限。
USE AdventureWorks2022;
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
TO Recruiting11;
GO
°C 使用 GRANT OPTION 授予对视图的 REFERENCES 权限
以下示例使用 REFERENCES
,授予用户 BusinessEntityID
对视图 HumanResources.vEmployee
中列 Wanida
的 GRANT OPTION
权限。
编写的此示例在 Microsoft Fabric 中不起作用,因为它使用用户进行 SQL 身份验证的登录,但同一示例适用于 Microsoft Entra ID Fabric 用户,例如 Wanida@contoso.com
。
GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee
TO Wanida WITH GRANT OPTION;
GO
D. 不使用 OBJECT 短语授予对表的 SELECT 权限
以下示例授予用户 SELECT
对 RosaQdM
数据库中表 Person.Address
的 AdventureWorks2022
权限。
编写的此示例在 Microsoft Fabric 中不起作用,因为它使用用户进行 SQL 身份验证的登录,但同一示例适用于 Microsoft Entra ID Fabric 用户,例如 RosaQdM@contoso.com
。
GRANT SELECT ON Person.Address TO RosaQdM;
GO
E. 向域帐户授予对表的 SELECT 权限
以下示例授予用户 SELECT
对 AdventureWorks2022\RosaQdM
数据库中表 Person.Address
的 AdventureWorks2022
权限。
编写的此示例在 Microsoft Fabric 中不起作用,因为它使用域帐户,但同一示例适用于 Microsoft Entra ID Fabric 用户,例如 RosaQdM@contoso.com
。
GRANT SELECT ON Person.Address TO [AdventureWorks2022\RosaQdM];
GO
F. 向角色授予对过程的 EXECUTE 权限
以下示例创建一个角色,然后针对 EXECUTE
数据库中的过程 uspGetBillOfMaterials
,将 AdventureWorks2022
权限授予该角色。
CREATE ROLE newrole ;
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;
GO
G. 授予对列的 UNMASK 权限
以下示例向用户 OutreachCoordinator
授予表 Data.Membership
中列 email
的 UNMASK
权限(动态数据掩码的一部分)。
Microsoft Fabric 目前不支持动态数据掩码。
GRANT UNMASK ON OBJECT::Data.Membership (email) to OutreachCoordinator;
GO