sys.database_principals (Transact-SQL)
为数据库中的每个安全主体返回一行。
列名 |
数据类型 |
说明 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
name |
sysname |
主体名称,在数据库中唯一。 |
||||||||||
principal_id |
int |
主体 ID,在数据库中唯一。 |
||||||||||
type |
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 |
指示身份验证类型。
不适用于 SQL Azure。 |
||||||||||
authentication_type_desc |
nvarchar(60) |
身份验证类型说明。
不适用于 SQL Azure。 |
||||||||||
default_language_name |
sysname |
指示此主体的默认语言。 不适用于 SQL Azure。 |
||||||||||
default_language_lcid |
int |
指示此主体的默认 LCID。 不适用于 SQL Azure。 |
注释
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;