sys.server_principals (Transact-SQL)

适用于:SQL ServerAzure 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)
主体(数据库引擎)
权限层次结构(数据库引擎)