sys.database_principals (Transact-SQL)
適用於:SQL Server
Azure SQL 資料庫 Azure SQL 受控執行個體
Azure Synapse Analytics Analytics
Platform System (PDW)
SQL 分析端點在 Microsoft Fabric SQL 資料庫中的 Microsoft 網
狀
架構倉儲中Microsoft網狀架構
傳回 SQL Server 資料庫中每個安全性主體的數據列。
注意
Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。
數據列描述
資料行名稱 | 資料類型 | 描述 |
---|---|---|
name | sysname | 資料庫內唯一的主體名稱。 |
principal_id | int | 資料庫內唯一的主體標識碼。 |
type | char(1) | 主體類型: A = 應用程式角色 C = 對應至憑證的使用者 E = 來自 Microsoft Entra ID 的外部使用者 G = Windows 群組 K = 對應至非對稱金鑰的使用者 R = 資料庫角色 S = SQL 使用者 U = Windows 使用者 X = Microsoft Entra 群組或應用程式的外部群組 |
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 擁有。 |
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 Server 2012 (11.x) 和更新版本。 表示驗證類型。 以下是可能的值及其描述。 0:無驗證 1:實例驗證 2:資料庫驗證 3 : Windows 驗證 4 :Microsoft Entra 驗證 |
authentication_type_desc | nvarchar(60) | 適用於:SQL Server 2012 (11.x) 和更新版本。 驗證類型的描述。 以下是可能的值及其描述。 NONE :沒有驗證INSTANCE :實例驗證DATABASE :資料庫驗證WINDOWS :Windows 驗證EXTERNAL :Microsoft Entra 驗證 |
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 組態上使用,但其他屬性只有在 Windows Server 2003 或更新版本上執行 SQL Server 時才能使用,而且已啟用CHECK_POLICY和CHECK_EXPIRATION。 如需詳細資訊,請參閱 密碼原則 。 在主體已卸除的情況下,可能會重複使用principal_id的值,因此不保證會不斷增加。
權限
任何使用者都可以看到自己的使用者名稱、系統使用者和固定資料庫角色。 若要查看其他使用者,需要 ALTER ANY USER 或使用者的許可權。 若要查看使用者定義的角色,需要 ALTER ANY ROLE 或角色的成員資格。
範例
答:列出資料庫主體的所有許可權
下列查詢會列出明確授與或拒絕資料庫主體的許可權。
重要
固定資料庫角色的許可權不會出現在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;
另請參閱
主體 (資料庫引擎)
sys.server_principals (Transact-SQL)
安全性目錄檢視 (Transact-SQL)
自主資料庫使用者 - 讓資料庫具有可攜性
使用 Microsoft Entra 驗證連線到 Azure SQL