我想通了,如何檢查的映射,以及什麼是部分困惑我。首先,檢查服務器的登錄名和數據庫用戶之間的映射的查詢是這樣的:
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.sid = SSP.sid
的SID是所有主體包括服務器級別,數據庫級別的唯一標識符。
其次,這讓我感到困惑它的實際部分。這是因爲存在隱式映射,但即使通過查詢也不會顯示。讓我再次描述我的問題:我使用我的Windows登錄名(我們稱之爲MY_W_NAME)作爲登錄到SQL Server的身份驗證模式。之後,當我執行選擇CURRENT_USER到一個數據庫時,我得到dbo,這是一個數據庫用戶。我只假定MY_W_NAME和dbo之間有一個明確的映射關係,我想找到它。我正在使用SQL Server管理工作室,並且在我的服務器登錄名MY_W_NAME的屬性窗口中看到,有一個名爲「用戶映射」的選項卡。所以我期待在這裏看到一個映射,只是發現沒有。在我運行上面的查詢後,我仍然無法找到列在那裏的MY_W_NAME。所以它如何映射真的很神祕。
原來,這是因爲MY_W_NAME是服務器角色的「系統管理員」,默認情況下此登錄將被映射到所有數據庫中的所有「DBO」數據庫用戶。但是此查詢不會顯示該映射,也不會顯示屬性窗口中的用戶映射選項卡。一些進一步的實驗顯示了更多的關注事實:我實際上可以添加從MY_W_NAME到特定數據庫的明確映射,例如,從腳本或屬性窗口。但是,即使我看到爲MY_W_NAME創建一個新的數據庫用戶的執行是成功的,但是當我將這個數據庫選擇CURRENT_USER運行時,我仍然得到了dbo。我想這是因爲'系統管理員'具有更高的權限。相反,如果我創建了具有「公共」服務器角色的服務器登錄名,並且在此登錄名與數據庫用戶之間添加了映射,則會顯示此映射。
我必須說,這不是一個正常的人在SQL Server有限的經驗的自然方式。幾天後,終於有人向我指出了這一點。
我很抱歉,但這可能不是我的意思。我想問我如何從登錄時使用我的Windows登錄名獲取'dbo',我認爲它是數據庫用戶'dbo',從我所看到的情況來看,它只分配了'sysadmin'服務器角色。因爲我無法在這兩者之間找到清晰的映射路徑。另外,我對你的第二個劇本感到困惑。我看到函數is_member需要Windows組或SQL Server角色名稱。但是,我無法在我的服務器角色中找到「dbo」和「guest」。我很確定這個功能起作用,所以我必須有一些誤解 – tete