sys.database_principals (Transact-SQL)

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

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

列名

数据类型

说明

name

sysname

主体名称,在数据库中唯一。

principal_id

int

主体 ID,在数据库中唯一。

类型

char(1)

主体类型:

S = SQL 用户

U = Windows 用户

G = Windows 组

A = 应用程序角色

R = 数据库角色

C = 映射到证书的用户

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

type_desc

nvarchar(60)

主体类型的说明。

SQL_USER

WINDOWS_USER

WINDOWS_GROUP

APPLICATION_ROLE

DATABASE_ROLE

CERTIFICATE_MAPPED_USER

ASYMMETRIC_KEY_MAPPED_USER

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

指示身份验证类型。

说明

0

不进行身份验证

1

实例身份验证

2

数据库身份验证

3

Windows 身份验证

适用于:SQL Server 2012 到 SQL Server 2014。

authentication_type_desc

nvarchar(60)

身份验证类型说明。

说明

NONE

不进行身份验证

INSTANCE

实例身份验证

DATABASE

数据库身份验证

WINDOWS

Windows 身份验证

适用于:SQL Server 2012 到 SQL Server 2014。

default_language_name

sysname

指示此主体的默认语言。

适用于:SQL Server 2012 到 SQL Server 2014。

default_language_lcid

int

指示此主体的默认 LCID。

适用于:SQL Server 2012 到 SQL Server 2014。

注释

PasswordLastSetTime 属性在所有支持的 SQL Server 配置中都可用,但只有在 Windows Server 2003 上运行 SQL Server 并启用了 CHECK_POLICY 和 CHECK_EXPIRATION 时,其他属性才可用。 有关详细信息,请参阅密码策略

权限

任何用户都可以查看自己的用户名称、系统用户和固定的数据库角色。 要查看其他用户,需要获取 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;

请参阅

参考

目录视图 (Transact-SQL)

安全性目录视图 (Transact-SQL)

概念

主体(数据库引擎)