sys.database_principals (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库

为 SQL Server 数据库中的每个安全主体返回一行。

列名称 数据类型 说明
name sysname 主体名称,在数据库中唯一。
principal_id int 主体 ID,在数据库中唯一。
type char(1) 主体类型:

A = 应用程序角色

C = 映射到证书的用户

E = 来自 Azure Active Directory 的外部用户

G = Windows 组

K = 映射到非对称密钥的用户

R = 数据库角色

S = SQL 用户

U = Windows 用户

X = Azure Active Directory 组或应用程序中的外部组
type_desc nvarchar(60) 主体类型的说明。

APPLICATION_ROLE

CERTIFICATE_MAPPED_USER

EXTERNAL_USER

WINDOWS_GROUP

ASYMMETRIC_KEY_MAPPED_USER

DATABASE_ROLE

SQL_USER

WINDOWS_USER

EXTERNAL_GROUPS
default_schema_name sysname SQL 名称未指定架构时要使用的名称。 对于非 S、U 或 A 类型的主体,为 Null。
create_date datetime 主体的创建时间。
modify_date datetime 上次修改主体的时间。
owning_principal_id int 拥有此主体的主体的 ID。 默认情况下,所有固定数据库角色均归 dbo 所有。
sid varbinary(85) SID (主体的安全标识符) 。 SYS 和 INFORMATION SCHEMAS 为 NULL。
is_fixed_role bit 如果为 1,则该行表示与下面的某个固定数据库角色对应的条目:db_owner、db_accessadmin、db_datareader、db_datawriter、db_ddladmin、db_securityadmin、db_backupoperator、db_denydatareader、db_denydatawriter。
authentication_type int 适用于:SQL Server 2012 (11.x) 及更高版本。

指示身份验证类型。 下面是可能的值及其说明。

0:无身份验证
1:实例身份验证
2:数据库身份验证
3: Windows 身份验证
4: Azure Active Directory 身份验证
authentication_type_desc nvarchar(60) 适用于:SQL Server 2012 (11.x) 及更高版本。

身份验证类型说明。 下面是可能的值及其说明。

NONE :无身份验证
INSTANCE :实例身份验证
DATABASE :数据库身份验证
WINDOWS: Windows 身份验证
EXTERNAL: Azure Active Directory 身份验证
default_language_name sysname 适用于:SQL Server 2012 (11.x) 及更高版本。

指示此主体的默认语言。
default_language_lcid int 适用于:SQL Server 2012 (11.x) 及更高版本。

指示此主体的默认 LCID。
allow_encrypted_value_modifications bit 适用于:SQL Server 2016 (13.x) 及更高版本、SQL 数据库。

取消在大容量复制操作期间对服务器进行加密元数据检查。 这样,用户便可以使用 Always Encrypted、在表或数据库之间对数据进行大容量复制,而无需解密数据。 默认为 OFF。

注解

PasswordLastSetTime 属性可用于 SQL Server 的所有受支持的配置,但其他属性仅在 SQL Server 在 Windows Server 2003 或更高版本上运行并且启用了 CHECK_POLICY 和 CHECK_EXPIRATION 时才可用。 有关详细信息,请参阅 密码策略 。 如果主体已删除,因此可以重复使用 principal_id 的值,因此不一定会不断增加。

权限

任何用户都可以查看自己的用户名称、系统用户和固定的数据库角色。 要查看其他用户,需要获取 ALTER ANY USER 或相关的用户权限。 要查看用户定义的角色,需要获取 ALTER ANY ROLE 或相关的角色成员身份。

示例

A:列出数据库主体的所有权限

以下查询将列出明确对数据库主体授予或拒绝的权限。

重要

固定数据库角色的权限不会出现在 sys.database_permissions 中。 因此,数据库主体可能具有此处未列出的其他权限。

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc, pe.permission_name  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id;  

B:列出对数据库中架构对象的权限

以下查询将 sys.database_principals 和 sys.database_permissions 与 sys.objects 和 sys.schemas 联接,以列出对特定架构对象授予或拒绝的权限。

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc,   
    pe.permission_name, s.name + '.' + o.name AS ObjectName  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id  
JOIN sys.objects AS o  
    ON pe.major_id = o.object_id  
JOIN sys.schemas AS s  
    ON o.schema_id = s.schema_id;  

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

C:列出数据库主体的所有权限

以下查询将列出明确对数据库主体授予或拒绝的权限。

重要

固定数据库角色的权限不显示在中 sys.database_permissions 。 因此,数据库主体可能具有此处未列出的其他权限。

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc, pe.permission_name  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id;  

D:列出数据库中架构对象的权限

下面的查询联接 sys.database_principalssys.database_permissionssys.objects sys.schemas 列出向特定架构对象授予或拒绝的权限。

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pr.authentication_type_desc, pe.state_desc,   
    pe.permission_name, s.name + '.' + o.name AS ObjectName  
FROM sys.database_principals AS pr  
JOIN sys.database_permissions AS pe  
    ON pe.grantee_principal_id = pr.principal_id  
JOIN sys.objects AS o  
    ON pe.major_id = o.object_id  
JOIN sys.schemas AS s  
    ON o.schema_id = s.schema_id;  

另请参阅

主体(数据库引擎)
sys.server_principals (Transact-SQL)
安全性目录视图 (Transact-SQL)
包含的数据库用户-使你的数据库可移植
使用 Azure Active Directory 身份验证连接到 SQL 数据库