权限(数据库引擎)
每个 SQL Server 安全对象都有可以授予主体的关联权限。本主题提供了下列信息:
权限命名约定
与特定的安全对象相关的权限
SQL Server 权限
权限检查算法
示例
权限命名约定
下面介绍命名权限时遵循的一般约定:
CONTROL
为被授权者授予类似所有权的功能。被授权者实际上对安全对象具有所定义的所有权限。也可以为已被授予 CONTROL 权限的主体授予对安全对象的权限。因为 SQL Server 安全模型是分层的,所以 CONTROL 权限在特定范围内隐含着对该范围内的所有安全对象的 CONTROL 权限。例如,对数据库的 CONTROL 权限隐含着对数据库的所有权限、对数据库中所有组件的所有权限、对数据库中所有架构的所有权限以及对数据库的所有架构中的所有对象的权限。
ALTER
授予更改特定安全对象的属性(所有权除外)的权限。当授予对某个范围的 ALTER 权限时,也授予更改、创建或删除该范围内包含的任何安全对象的权限。例如,对架构的 ALTER 权限包括在该架构中创建、更改和删除对象的权限。
ALTER ANY <Server Securable>,其中 Server Securable 可以为任意服务器安全对象。
授予创建、更改或删除 Server Securable 的各个实例的权限。例如,ALTER ANY LOGIN 将授予创建、更改或删除实例中的任何登录名的权限。
ALTER ANY <Database Securable>,其中 Database Securable 可以为数据库级别的任意安全对象。
授予创建、更改或删除 Database Securable 的各个实例的权限。例如,ALTER ANY SCHEMA 将授予创建、更改或删除数据库中的任何架构的权限。
TAKE OWNERSHIP
允许被授权者获取所授予的安全对象的所有权。
IMPERSONATE <Login>
允许被授权者模拟该登录名。
IMPERSONATE <User>
允许被授权者模拟该用户。
CREATE <Server Securable>
授予被授权者创建 Server Securable 的权限。
CREATE <Database Securable>
授予被授权者创建 Database Securable 的权限。
CREATE <Schema-contained Securable>
授予创建包含在架构中的安全对象的权限。但是,若要在特定架构中创建安全对象,必须对该架构具有 ALTER 权限。
VIEW DEFINITION
允许被授权者访问元数据。
REFERENCES
表的 REFERENCES 权限是创建引用该表的外键约束时所必需的。
对象的 REFERENCES 权限是使用引用该对象的 WITH SCHEMABINDING 子句创建 FUNCTION 或 VIEW 时所必需的。
适用于特定安全对象的权限
下表列出了主要的权限类别以及可应用这些权限的安全对象的种类。
权限 |
适用于 |
---|---|
SELECT |
同义词 表和列 表值函数 [Transact-SQL 和公共语言运行时 (CLR)] 和列 视图和列 |
VIEW CHANGE TRACKING |
表 架构 |
UPDATE |
同义词 表和列 视图和列 |
REFERENCES |
标量函数和聚合函数(Transact-SQL 和 CLR) Service Broker 队列 表和列 表值函数(Transact-SQL 和 CLR)和列 类型 视图和列 |
INSERT |
同义词 表和列 视图和列 |
DELETE |
同义词 表和列 视图和列 |
EXECUTE |
过程(Transact-SQL 和 CLR) 标量函数和聚合函数(Transact-SQL 和 CLR) 同义词 CLR 类型 |
RECEIVE |
Service Broker 队列 |
VIEW DEFINITION |
过程(Transact-SQL 和 CLR) Service Broker 队列 标量函数和聚合函数(Transact-SQL 和 CLR) 同义词 表 表值函数(Transact-SQL 和 CLR) 视图 |
ALTER |
过程(Transact-SQL 和 CLR) 标量函数和聚合函数(Transact-SQL 和 CLR) Service Broker 队列 表 表值函数(Transact-SQL 和 CLR) 视图 |
TAKE OWNERSHIP |
过程(Transact-SQL 和 CLR) 标量函数和聚合函数(Transact-SQL 和 CLR) 同义词 表 表值函数(Transact-SQL 和 CLR) 视图 |
CONTROL |
过程(Transact-SQL 和 CLR) 标量函数和聚合函数(Transact-SQL 和 CLR) Service Broker 队列 同义词 表 表值函数(Transact-SQL 和 CLR) 视图 |
SQL Server 权限
下表提供了 SQL Server 权限的完整列表。
基础安全对象 |
对基础安全对象的粒度权限 |
权限类型代码 |
包含基础安全对象的安全对象 |
对容器安全对象的权限隐含着对基础安全对象的粒度权限 |
---|---|---|---|---|
APPLICATION ROLE |
ALTER |
AL |
DATABASE |
ALTER ANY APPLICATION ROLE |
APPLICATION ROLE |
CONTROL |
CL |
DATABASE |
CONTROL |
APPLICATION ROLE |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
ASSEMBLY |
ALTER |
AL |
DATABASE |
ALTER ANY ASSEMBLY |
ASSEMBLY |
CONTROL |
CL |
DATABASE |
CONTROL |
ASSEMBLY |
REFERENCES |
RF |
DATABASE |
REFERENCES |
ASSEMBLY |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
ASSEMBLY |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
ASYMMETRIC KEY |
ALTER |
AL |
DATABASE |
ALTER ANY ASYMMETRIC KEY |
ASYMMETRIC KEY |
CONTROL |
CL |
DATABASE |
CONTROL |
ASYMMETRIC KEY |
REFERENCES |
RF |
DATABASE |
REFERENCES |
ASYMMETRIC KEY |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
ASYMMETRIC KEY |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
CERTIFICATE |
ALTER |
AL |
DATABASE |
ALTER ANY CERTIFICATE |
CERTIFICATE |
CONTROL |
CL |
DATABASE |
CONTROL |
CERTIFICATE |
REFERENCES |
RF |
DATABASE |
REFERENCES |
CERTIFICATE |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
CERTIFICATE |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
CONTRACT |
ALTER |
AL |
DATABASE |
ALTER ANY CONTRACT |
CONTRACT |
CONTROL |
CL |
DATABASE |
CONTROL |
CONTRACT |
REFERENCES |
RF |
DATABASE |
REFERENCES |
CONTRACT |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
CONTRACT |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
DATABASE |
ALTER |
AL |
SERVER |
ALTER ANY DATABASE |
DATABASE |
ALTER ANY APPLICATION ROLE |
ALAR |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY ASSEMBLY |
ALAS |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY ASYMMETRIC KEY |
ALAK |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY CERTIFICATE |
ALCF |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY CONTRACT |
ALSC |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY DATABASE AUDIT |
ALDA |
SERVER |
ALTER ANY SERVER AUDIT |
DATABASE |
ALTER ANY DATABASE DDL TRIGGER |
ALTG |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY DATABASE EVENT NOTIFICATION |
ALED |
SERVER |
ALTER ANY EVENT NOTIFICATION |
DATABASE |
ALTER ANY DATASPACE |
ALDS |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY FULLTEXT CATALOG |
ALFT |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY MESSAGE TYPE |
ALMT |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY REMOTE SERVICE BINDING |
ALSB |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY ROLE |
ALRL |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY ROUTE |
ALRT |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY SCHEMA |
ALSM |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY SERVICE |
ALSV |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY SYMMETRIC KEY |
ALSK |
SERVER |
CONTROL SERVER |
DATABASE |
ALTER ANY USER |
ALUS |
SERVER |
CONTROL SERVER |
DATABASE |
AUTHENTICATE |
AUTH |
SERVER |
AUTHENTICATE SERVER |
DATABASE |
BACKUP DATABASE |
BADB |
SERVER |
CONTROL SERVER |
DATABASE |
BACKUP LOG |
BALO |
SERVER |
CONTROL SERVER |
DATABASE |
CHECKPOINT |
CP |
SERVER |
CONTROL SERVER |
DATABASE |
CONNECT |
CO |
SERVER |
CONTROL SERVER |
DATABASE |
CONNECT REPLICATION |
CORP |
SERVER |
CONTROL SERVER |
DATABASE |
CONTROL |
CL |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE AGGREGATE |
CRAG |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE ASSEMBLY |
CRAS |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE ASYMMETRIC KEY |
CRAK |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE CERTIFICATE |
CRCF |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE CONTRACT |
CRSC |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE DATABASE |
CRDB |
SERVER |
CREATE ANY DATABASE |
DATABASE |
CREATE DATABASE DDL EVENT NOTIFICATION |
CRED |
SERVER |
CREATE DDL EVENT NOTIFICATION |
DATABASE |
CREATE DEFAULT |
CRDF |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE FULLTEXT CATALOG |
CRFT |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE FUNCTION |
CRFN |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE MESSAGE TYPE |
CRMT |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE PROCEDURE |
CRPR |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE QUEUE |
CRQU |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE REMOTE SERVICE BINDING |
CRSB |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE ROLE |
CRRL |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE ROUTE |
CRRT |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE RULE |
CRRU |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE SCHEMA |
CRSM |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE SERVICE |
CRSV |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE SYMMETRIC KEY |
CRSK |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE SYNONYM |
CRSN |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE TABLE |
CRTB |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE TYPE |
CRTY |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE VIEW |
CRVW |
SERVER |
CONTROL SERVER |
DATABASE |
CREATE XML SCHEMA COLLECTION |
CRXS |
SERVER |
CONTROL SERVER |
DATABASE |
DELETE |
DL |
SERVER |
CONTROL SERVER |
DATABASE |
EXECUTE |
EX |
SERVER |
CONTROL SERVER |
DATABASE |
INSERT |
IN |
SERVER |
CONTROL SERVER |
DATABASE |
REFERENCES |
RF |
SERVER |
CONTROL SERVER |
DATABASE |
SELECT |
SL |
SERVER |
CONTROL SERVER |
DATABASE |
SHOWPLAN |
SPLN |
SERVER |
ALTER TRACE |
DATABASE |
SUBSCRIBE QUERY NOTIFICATIONS |
SUQN |
SERVER |
CONTROL SERVER |
DATABASE |
TAKE OWNERSHIP |
TO |
SERVER |
CONTROL SERVER |
DATABASE |
UPDATE |
UP |
SERVER |
CONTROL SERVER |
DATABASE |
VIEW DATABASE STATE |
VWDS |
SERVER |
VIEW SERVER STATE |
DATABASE |
VIEW DEFINITION |
VW |
SERVER |
VIEW ANY DEFINITION |
ENDPOINT |
ALTER |
AL |
SERVER |
ALTER ANY ENDPOINT |
ENDPOINT |
CONNECT |
CO |
SERVER |
CONTROL SERVER |
ENDPOINT |
CONTROL |
CL |
SERVER |
CONTROL SERVER |
ENDPOINT |
TAKE OWNERSHIP |
TO |
SERVER |
CONTROL SERVER |
ENDPOINT |
VIEW DEFINITION |
VW |
SERVER |
VIEW ANY DEFINITION |
FULLTEXT CATALOG |
ALTER |
AL |
DATABASE |
ALTER ANY FULLTEXT CATALOG |
FULLTEXT CATALOG |
CONTROL |
CL |
DATABASE |
CONTROL |
FULLTEXT CATALOG |
REFERENCES |
RF |
DATABASE |
REFERENCES |
FULLTEXT CATALOG |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
FULLTEXT CATALOG |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
FULLTEXT STOPLIST |
ALTER |
AL |
DATABASE |
ALTER ANY FULLTEXT CATALOG |
FULLTEXT STOPLIST |
CONTROL |
CL |
DATABASE |
CONTROL |
FULLTEXT STOPLIST |
REFERENCES |
RF |
DATABASE |
REFERENCES |
FULLTEXT STOPLIST |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
FULLTEXT STOPLIST |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
LOGIN |
ALTER |
AL |
SERVER |
ALTER ANY LOGIN |
LOGIN |
CONTROL |
CL |
SERVER |
CONTROL SERVER |
LOGIN |
IMPERSONATE |
IM |
SERVER |
CONTROL SERVER |
LOGIN |
VIEW DEFINITION |
VW |
SERVER |
VIEW ANY DEFINITION |
MESSAGE TYPE |
ALTER |
AL |
DATABASE |
ALTER ANY MESSAGE TYPE |
MESSAGE TYPE |
CONTROL |
CL |
DATABASE |
CONTROL |
MESSAGE TYPE |
REFERENCES |
RF |
DATABASE |
REFERENCES |
MESSAGE TYPE |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
MESSAGE TYPE |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
OBJECT |
ALTER |
AL |
SCHEMA |
ALTER |
OBJECT |
CONTROL |
CL |
SCHEMA |
CONTROL |
OBJECT |
DELETE |
DL |
SCHEMA |
DELETE |
OBJECT |
EXECUTE |
EX |
SCHEMA |
EXECUTE |
OBJECT |
INSERT |
IN |
SCHEMA |
INSERT |
OBJECT |
RECEIVE |
RC |
SCHEMA |
CONTROL |
OBJECT |
REFERENCES |
RF |
SCHEMA |
REFERENCES |
OBJECT |
SELECT |
SL |
SCHEMA |
SELECT |
OBJECT |
TAKE OWNERSHIP |
TO |
SCHEMA |
CONTROL |
OBJECT |
UPDATE |
UP |
SCHEMA |
UPDATE |
OBJECT |
VIEW CHANGE TRACKING |
VWCT |
SCHEMA |
VIEW CHANGE TRACKING |
OBJECT |
VIEW DEFINITION |
VW |
SCHEMA |
VIEW DEFINITION |
REMOTE SERVICE BINDING |
ALTER |
AL |
DATABASE |
ALTER ANY REMOTE SERVICE BINDING |
REMOTE SERVICE BINDING |
CONTROL |
CL |
DATABASE |
CONTROL |
REMOTE SERVICE BINDING |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
REMOTE SERVICE BINDING |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
ROLE |
ALTER |
AL |
DATABASE |
ALTER ANY ROLE |
ROLE |
CONTROL |
CL |
DATABASE |
CONTROL |
ROLE |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
ROLE |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
ROUTE |
ALTER |
AL |
DATABASE |
ALTER ANY ROUTE |
ROUTE |
CONTROL |
CL |
DATABASE |
CONTROL |
ROUTE |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
ROUTE |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
SCHEMA |
ALTER |
AL |
DATABASE |
ALTER ANY SCHEMA |
SCHEMA |
CONTROL |
CL |
DATABASE |
CONTROL |
SCHEMA |
DELETE |
DL |
DATABASE |
DELETE |
SCHEMA |
EXECUTE |
EX |
DATABASE |
EXECUTE |
SCHEMA |
INSERT |
IN |
DATABASE |
INSERT |
SCHEMA |
REFERENCES |
RF |
DATABASE |
REFERENCES |
SCHEMA |
SELECT |
SL |
DATABASE |
SELECT |
SCHEMA |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
SCHEMA |
UPDATE |
UP |
DATABASE |
UPDATE |
SCHEMA |
VIEW CHANGE TRACKING |
VWCT |
DATABASE |
VIEW CHANGE TRACKING |
SCHEMA |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
SERVER |
ADMINISTER BULK OPERATIONS |
ADBO |
不适用 |
不适用 |
SERVER |
ALTER ANY CONNECTION |
ALCO |
不适用 |
不适用 |
SERVER |
ALTER ANY CREDENTIAL |
ALCD |
不适用 |
不适用 |
SERVER |
ALTER ANY DATABASE |
ALDB |
不适用 |
不适用 |
SERVER |
ALTER ANY ENDPOINT |
ALHE |
不适用 |
不适用 |
SERVER |
ALTER ANY EVENT NOTIFICATION |
ALES |
不适用 |
不适用 |
SERVER |
ALTER ANY LINKED SERVER |
ALLS |
不适用 |
不适用 |
SERVER |
ALTER ANY LOGIN |
ALLG |
不适用 |
不适用 |
SERVER |
ALTER ANY SERVER AUDIT |
ALAA |
不适用 |
不适用 |
SERVER |
ALTER RESOURCES |
ALRS |
不适用 |
不适用 |
SERVER |
ALTER SERVER STATE |
ALSS |
不适用 |
不适用 |
SERVER |
ALTER SETTINGS |
ALST |
不适用 |
不适用 |
SERVER |
ALTER TRACE |
ALTR |
不适用 |
不适用 |
SERVER |
AUTHENTICATE SERVER |
AUTH |
不适用 |
不适用 |
SERVER |
CONNECT SQL |
COSQ |
不适用 |
不适用 |
SERVER |
CONTROL SERVER |
CL |
不适用 |
不适用 |
SERVER |
CREATE ANY DATABASE |
CRDB |
不适用 |
不适用 |
SERVER |
CREATE DDL EVENT NOTIFICATION |
CRDE |
不适用 |
不适用 |
SERVER |
CREATE ENDPOINT |
CRHE |
不适用 |
不适用 |
SERVER |
CREATE TRACE EVENT NOTIFICATION |
CRTE |
不适用 |
不适用 |
SERVER |
EXTERNAL ACCESS ASSEMBLY |
XA |
不适用 |
不适用 |
SERVER |
SHUTDOWN |
SHDN |
不适用 |
不适用 |
SERVER |
UNSAFE ASSEMBLY |
XU |
不适用 |
不适用 |
SERVER |
VIEW ANY DATABASE |
VWDB |
不适用 |
不适用 |
SERVER |
VIEW ANY DEFINITION |
VWAD |
不适用 |
不适用 |
SERVER |
VIEW SERVER STATE |
VWSS |
不适用 |
不适用 |
SERVICE |
ALTER |
AL |
DATABASE |
ALTER ANY SERVICE |
SERVICE |
CONTROL |
CL |
DATABASE |
CONTROL |
SERVICE |
SEND |
SN |
DATABASE |
CONTROL |
SERVICE |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
SERVICE |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
SYMMETRIC KEY |
ALTER |
AL |
DATABASE |
ALTER ANY SYMMETRIC KEY |
SYMMETRIC KEY |
CONTROL |
CL |
DATABASE |
CONTROL |
SYMMETRIC KEY |
REFERENCES |
RF |
DATABASE |
REFERENCES |
SYMMETRIC KEY |
TAKE OWNERSHIP |
TO |
DATABASE |
CONTROL |
SYMMETRIC KEY |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
TYPE |
CONTROL |
CL |
SCHEMA |
CONTROL |
TYPE |
EXECUTE |
EX |
SCHEMA |
EXECUTE |
TYPE |
REFERENCES |
RF |
SCHEMA |
REFERENCES |
TYPE |
TAKE OWNERSHIP |
TO |
SCHEMA |
CONTROL |
TYPE |
VIEW DEFINITION |
VW |
SCHEMA |
VIEW DEFINITION |
USER |
ALTER |
AL |
DATABASE |
ALTER ANY USER |
USER |
CONTROL |
CL |
DATABASE |
CONTROL |
USER |
IMPERSONATE |
IM |
DATABASE |
CONTROL |
USER |
VIEW DEFINITION |
VW |
DATABASE |
VIEW DEFINITION |
XML SCHEMA COLLECTION |
ALTER |
AL |
SCHEMA |
ALTER |
XML SCHEMA COLLECTION |
CONTROL |
CL |
SCHEMA |
CONTROL |
XML SCHEMA COLLECTION |
EXECUTE |
EX |
SCHEMA |
EXECUTE |
XML SCHEMA COLLECTION |
REFERENCES |
RF |
SCHEMA |
REFERENCES |
XML SCHEMA COLLECTION |
TAKE OWNERSHIP |
TO |
SCHEMA |
CONTROL |
XML SCHEMA COLLECTION |
VIEW DEFINITION |
VW |
SCHEMA |
VIEW DEFINITION |
权限检查算法摘要
检查权限可能很复杂。权限检查算法包括重叠的组成员关系和所有权链接、显式和隐式权限,并且会受包含安全实体的安全类的权限影响。该算法的一般过程是收集所有相关权限。如果未找到阻止性 DENY,该算法将搜索提供足够访问权限的 GRANT。该算法包含三个基本元素:安全上下文、权限空间和必需的权限。
注意 |
---|
无法对 sa、dbo、实体所有者、information_schema、sys 或您自己授予、拒绝或撤消权限。 |
安全上下文
这是提供进行访问权限检查的权限的一组主体。这些是与当前登录名或用户有关的权限,除非使用 EXECUTE AS 语句将安全上下文更改为其他登录名或用户。安全上下文包括以下主体:
登录名
用户
角色成员资格
Windows 组成员身份
如果使用模块签名,则指证书的任何登录名或用户帐户(该证书用于对用户当前正在执行的模块进行签名),以及该主体的相关角色成员资格。
权限空间
这是安全实体和所有包含安全实体的安全类。例如,表(安全实体)包含在架构安全类和数据库安全类中。访问权限会受表级、架构级、数据库级和服务器级权限影响。有关详细信息,请参阅权限层次结构(数据库引擎)。
必需的权限
必需的权限种类。例如,INSERT、UPDATE、DELETE、SELECT、EXECUTE、ALTER、CONTROL 等等。
访问可能需要多个权限,如下面的示例中所示:
存储过程可能既需要针对存储过程的 EXECUTE 权限,也需要针对该存储过程引用的每个表的 INSERT 权限。
动态管理视图可能同时需要针对该视图的 VIEW SERVER STATE 和 SELECT 权限。
算法的通用步骤
算法确定是否允许访问某个安全对象时,使用的具体步骤可能会变化,这取决于涉及的主体和安全对象。但是,算法会执行以下通用步骤:
如果登录名是 sysadmin 固定服务器角色的成员或用户是当前数据库中的 dbo 用户,则绕过权限检查。
如果所有权链接适用且以前针对链中对象的访问权限检查通过了安全检查,则允许访问。有关所有权链接的详细信息,请参阅所有权链。
聚合与调用方关联的服务器级、数据库级和已签名模块的标识,以创建安全上下文。
对于该安全上下文,收集为权限空间授予或拒绝的所有权限。权限可以明确表述为 GRANT、GRANT WITH GRANT 或 DENY,也可以是隐含或涵盖的权限 GRANT 或 DENY。例如,针对架构的 CONTROL 权限隐含对表的 CONTROL,对表的 CONTROL 则隐含 SELECT。因此,如果授予了针对架构的 CONTROL 权限,也就授予了对表的 SELECT 权限。如果拒绝了对表的 CONTROL 权限,也就拒绝了对表的 SELECT 权限。有关详细信息,请参阅涵盖/隐含的权限(数据库引擎)。
注意 列级权限的 GRANT 覆盖对象级的 DENY。
标识必需的权限。
如果对于权限空间中的对象,直接或隐式拒绝授予安全上下文中任何标识必需的权限,则权限检查失败。
如果对于权限空间中的任何对象,没有拒绝必需的权限且必需的权限包含对安全上下文中任何标识直接或隐式的 GRANT 或 GRANT WITH GRANT 权限,则通过权限检查。
示例
以下示例说明如何检索权限信息。
A. 返回可授予权限的完整列表
下列语句使用 fn_builtin_permissions 函数返回所有数据库引擎权限。有关详细信息,请参阅sys.fn_builtin_permissions (Transact-SQL)。
SELECT * FROM fn_builtin_permissions(default);
GO
B. 返回对某类对象的权限
还可以使用 fn_builtin_permissions 函数查看安全对象类别可用的所有权限。以下示例将返回对程序集的权限。
SELECT * FROM fn_builtin_permissions('assembly');
GO
C. 返回授予对象的执行主体的权限
可以使用 fn_my_permissions 返回指定安全对象的调用主体所具有的有效权限列表。有关详细信息,请参阅 sys.fn_my_permissions (Transact-SQL)。以下示例将返回对名为 Orders55 的对象的权限。
SELECT * FROM fn_my_permissions('Orders55', 'object');
GO
D. 返回适用于指定对象的权限
以下示例将返回适用于名为 Yttrium 的对象的权限。请注意,使用了内置函数 OBJECT_ID 来检索对象 Yttrium 的 ID。
SELECT * FROM sys.database_permissions
WHERE major_id = OBJECT_ID('Yttrium');
GO