sys.server_principals (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Analytics Platform System (PDW)

每个服务器级别主体占一行。

注意

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

列名称 数据类型 说明
name sysname 主体的名称。 在服务器中是唯一的。
principal_id int 主体的 ID 号。 在服务器中是唯一的。
sid varbinary(85) 主体的 SID(安全标识符)。 如果是 Windows 主体,则它与 Windows SID 匹配。
type char(1) 主体类型:

S = SQL 登录名

U = Windows 登录名

G = Windows 组

R = 服务器角色

C = 映射到证书的登录名

E = 来自 Microsoft Entra ID 的外部登录

X = 来自 Microsoft Entra 组或应用程序的外部组

K = 映射到非对称密钥的登录名
type_desc nvarchar(60) 主体类型的说明:

SQL_LOGIN

WINDOWS_LOGIN

WINDOWS_GROUP

SERVER_ROLE

CERTIFICATE_MAPPED_LOGIN

EXTERNAL_LOGIN

EXTERNAL_GROUP

ASYMMETRIC_KEY_MAPPED_LOGIN
is_disabled int 1 = 禁用登录名。
create_date datetime 主体的创建时间。
modify_date datetime 上次修改主体定义的时间。
default_database_name sysname 该主体的默认数据库。
default_language_name sysname 该主体的默认语言。
credential_id int 与该主体关联的凭据的 ID。 如果没有与该主体关联的凭据,则 credential_id 将为 NULL。
owning_principal_id int 服务器角色所有者的principal_id。 如果主体不是服务器角色,则为 NULL。
is_fixed_role bit 如果主体是具有固定权限的内置服务器角色之一,则返回 1。 有关详细信息,请参阅 服务器级别角色

权限

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

在Azure SQL 数据库中,只有以下主体可以看到所有登录名:

  • 服务器角色 ##MS_LoginManager## 或特殊数据库角色 loginmanager 的成员 master
  • Microsoft Entra 管理员和 SQL Server 管理员

目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration

示例

以下查询将列出明确对服务器主体授予或拒绝的权限。

重要

固定服务器角色(非公共角色)的权限不会出现在sys.server_permissions中。 因此,服务器主体可能具有此处未列出的其他权限。

SELECT pr.principal_id, pr.name, pr.type_desc,   
    pe.state_desc, pe.permission_name   
FROM sys.server_principals AS pr   
JOIN sys.server_permissions AS pe   
    ON pe.grantee_principal_id = pr.principal_id;  

注意

固定服务器角色的权限不会出现在 sys.server_permissions 中。

另请参阅

安全性目录视图 (Transact-SQL)
目录视图 (Transact-SQL)
主体(数据库引擎)
权限层次结构(数据库引擎)