這聽起來很愚蠢,但我覺得很困惑:在MSDN中,定義是可以請求SQL Server資源的實體。基本上有三種類型的校長:Windows級校長,SQL Server級校長和數據庫級校長。到目前爲止,沒關係。只是它給了我一個印象,即一個主體的標識符應該與其他主體的標識符不同,不管這種原則是什麼類型(如果這三種類型的所有主體都可以排列在一張表中,它們將具有唯一標識符)如何理解SQL Server中的委託人?
混亂的一部分來自於以下三種查詢:
1)
Select name,principal_id from sys.database_principals
(注:我在一個數據庫上運行它)
2)
Select name,principal_id from sys.server_principals
現在我知道第一個返回數據庫用戶主體,而第二個返回服務器用戶主體(糾正我,如果我錯了)。但是爲什麼第一個查詢中的一行可以與第二個查詢中的一行具有相同的principal_id?例如,從數據庫主體一行是:
名:INFORMATION_SCHEMA,principal_id:3
而來自第二查詢中的一個行是
名:系統管理員,principal_id:3
這兩個principal_id是什麼?正如我所提到的,我認爲兩個主體的標識符會有所不同,即使其中一個是數據庫用戶,另一個是服務器用戶(並且從我的名字我認爲principal_id是標識符)。
那麼,如果principal_id對所有主體都不唯一,但在每個查詢的範圍內唯一(第一個查詢的principal_id只是數據庫用戶的標識符,所以它可能恰好與服務器用戶的標識符相同),然後我有一個第三個查詢,不明白這是什麼意思:
3)
SELECT
SDP.PRINCIPAL_ID AS [Principal ID],
SDP.NAME AS [Database UserName],
SDP.TYPE_DESC AS [Datebase UserType],
SSP.NAME AS [Server LoginName],
SSP.TYPE_DESC AS [Server LoginType]
FROM sys.database_principals SDP
INNER JOIN sys.server_principals SSP
ON SDP.PRINCIPAL_ID = SSP.PRINCIPAL_ID
如果兩個principal_id的是他們的範圍內唯一的,這是什麼意思,使內加入兩個principal_id?內部連接意味着這個列是共同唯一的,對嗎?
必須有一些非常基本的東西,我誤解了。感謝您的幫助!
你從哪裏獲得第三個查詢? –
@Damien_The_Unbeliever很多文章都有類似的文章。像這樣的鏈接:http://www.sql-server-performance.com/2009/analyzing-sql-server-permissions/ – tete
並且您是否閱讀了關於該文章的一條評論 - 指出加入principal_id不正確,並且應該使用SID來代替? –