sys.database_principals (Transact-SQL)

適用範圍: 是SQL Server (所有支援的版本) 是Azure SQL Database 是Azure SQL 受控執行個體 是Azure Synapse Analytics 是平行處理資料倉儲

針對 SQL Server 資料庫中每一個安全性主體,各傳回一個資料列。

資料行名稱 資料類型 描述
name sysname 主體的名稱,它在資料庫中是唯一的。
principal_id int 主體的識別碼,它在資料庫中是唯一的。
type char(1) 主體類型:

A = 應用程式角色

C = 對應至憑證的使用者

E = Azure Active Directory 的外部使用者

G = Windows 群組

K = 對應至非對稱金鑰的使用者

R = 資料庫角色

S = SQL 使用者

U = Windows 使用者

X = 來自 Azure Active Directory 群組或應用程式的外部群組
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 擁有這個主體的主體識別碼。 所有固定資料庫角色預設都是由 dbo 所擁有。
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: Azure Active Directory authentication
authentication_type_desc nvarchar(60) 適用對象:SQL Server 2012 (11.x) 及更新版本。

驗證類型的描述。 以下是可能的值及其描述。

NONE :無驗證
INSTANCE :實例驗證
DATABASE :資料庫驗證
WINDOWS: Windows 驗證
EXTERNAL: Azure Active Directory authentication
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 Database。

在大量複製作業時隱藏伺服器上的密碼編譯中繼資料檢查。 這可讓使用者大量複製使用 Always Encrypted 在資料表或資料庫之間加密的資料,而不需要解密資料。 預設值為 OFF。

備註

PasswordLastSetTime 屬性適用于 SQL Server 的所有支援設定,但只有當 SQL Server 在 Windows Server 2003 或更新版本上執行,而且已啟用 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;  

另請參閱

主體 (Database Engine)
sys.server_principals (Transact-SQL)
安全性目錄檢視 (Transact-SQL)
自主資料庫使用者-讓您的資料庫可攜
使用 Azure Active Directory 驗證連線到 SQL 資料庫