sys.database_principals (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

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

注意

Microsoft Entra ID 以前称为 Azure Active Directory(Azure AD)。

列描述

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

A = 应用程序角色

C = 映射到证书的用户

E = 来自 Microsoft Entra ID 的外部用户

G = Windows 组

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

R = 数据库角色

S = SQL 用户

U = Windows 用户

X = Microsoft Entra 组或应用程序的外部组
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:Microsoft Entra 身份验证
authentication_type_desc nvarchar(60) 适用于:SQL Server 2012 (11.x) 及更高版本。

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

NONE:无身份验证
INSTANCE:实例身份验证
DATABASE:数据库身份验证
WINDOWS:Windows 身份验证
EXTERNAL:Microsoft Entra 身份验证
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 配置中都可用,但只有在 Windows Server 2003 或更高版本上运行 SQL Server 并启用了 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.objectssys.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)
包含的数据库用户 - 使数据库可移植
使用 Microsoft Entra 身份验证连接 Azure SQL