2012-03-07 76 views
2

如果一個Active Directory SID不匹配 SQL Server 2008 登錄SID(sys.server_principal)似乎沒有成爲一個辦法改變/更新值。 ALTER USER將讓你重新映射用戶在登錄,但ALTER LOGIN不會讓你重新映射一個登錄到Active Directory所以我的問題...更新的SQL Server 2008登錄SID

有什麼辦法,記錄或其他方式,更新與該LOGIN SID AD SID除了刪除和重新創建登錄?我使用OPENROWSET獲取廣告SID值,但我不能找到一種方法來更新登錄SID(主要是因爲我不認爲這是可以做到不)

順便說一句,我知道廣告對系統表的-hoc查詢是不允許的(因爲我已經試過了)。

回答

2

我確定沒有。您可以使用sp_change_users_login重新映射「用戶」和「登錄」之間的SID - 但是讀取您的問題聽起來像您已經知道。

儘管您可以使用sp_validatelogins來查明是否有孤立的sql登錄名(未映射到有效的windows帳戶),Micorsoft提供的唯一過程就是您已經猜到的......刪除孤立登錄名,以及創造一個新的。所有關於解決孤立登錄後的文檔都是「刪除登錄名」。

對我來說缺乏這種能力可能更多的是安全問題,而不是缺少「功能」。我可以想象各種各樣的情況下,更改登錄SID將被視爲非常陰暗的行爲。想象一下,我想做點什麼,讓它看起來像是另一個用戶。換掉SID ......做我邪惡的行爲......交換回來。

3

答案1是正確的,這將是陰暗的。

將登錄SID重新映射到不同的AD SID的一個好處是可以使管理員實施基於角色的認證。數據庫用戶可以在多個數據庫和/或多個服務器中定義爲user =「financial_officer」(FO),然後放置在多個組中,然後可以創建加入查找表的視圖以提供適當的行級安全性。然後,當FO退休或退出時,可以將「financial_officer」登錄的SID換出,以立即向新FO提供舊FO的特權。

這是我的希望,User_Created_Server_Level_Roles & UCSRL/SLR)(這是我建議MS)將啓用此功能,它可以,但只有一個單一的登錄可以被添加到UCSLR。那麼現在需要一個TSQL函數來返回SLR,就像「USER」和「SYSTEM_USER」一樣。

如果SQLServer提供了Server_Level_Position_Role,則可以在SQLServer中實現基於角色的純驗證。在這種情況下,登錄SID更改就是需要向另一個人回填位置所需的全部內容。

現在可以通過訪問每個數據庫並將FO SID更改爲回填FO位置的人員(AD SID)的SID。