sys.database_principals (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 中的 SQL 终结点 Microsoft Fabric 中的仓库 Microsoft Fabric SQL 数据库
为 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_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;
另请参阅
主体(数据库引擎)
sys.server_principals (Transact-SQL)
安全性目录视图 (Transact-SQL)
包含的数据库用户 - 使数据库可移植
使用 Microsoft Entra 身份验证连接到 Azure SQL