2012-12-10 37 views
6

我有一個在Windows用戶的上下文中執行的Powershell腳本。此用戶在作爲sysadmin服務器角色成員的SQL 2012實例上擁有登錄名。如何將Windows用戶添加到SQL Server 2012中的sysadmin服務器角色?

我希望腳本在SQL實例(也具有相應的Windows用戶)上添加另一個登錄到sysadmin服務器角色。

要在Management Studio中嘗試了這一點(如連接SA),我使用下面的腳本:

execute as user = 'domain\currentsysadmin' 

IF IS_SRVROLEMEMBER('sysadmin', 'domain\futuresysadmin') != 1 
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [domain\futuresysadmin] 

revert 

我這裏有兩個問題:

  1. 當我運行該腳本因爲它顯示在這裏,所以對IS_SRVROLEMEMBER的調用按預期返回0,但即使domain \ currentysadmin登錄名是sysadmin的成員,對ALTER SERVER ROLE的調用返回:

    Ms g 15151,級別16,狀態1,行8 無法更改服務器角色'sysadmin',因爲它不存在或您沒有權限。

  2. 當我在沒有EXECUTE AS語句的情況下在SA的上下文中運行這個時,ALTER SERVER ROLE語句似乎運行成功,但是當我檢查domain \ futuresysadmin登錄時,它仍然不是sysadmin角色的成員

如何將domain \ futuresystem登錄添加到sysadmin服務器角色?

+0

有人請給我一個暗示,爲什麼這個問題已經downvoted和關閉?我在這裏並沒有被暴露 - 這是我關於Stack Overflow的第一個問題,所以我想了解我的問題與主題無關。 – drewmullet

回答

4

使用sp_addsrvrolemember

EXEC master..sp_addsrvrolemember @loginame = N'domain\futuresysadmin', @rolename = N'sysadmin' 

UPDATE: 用戶的上下文切換不會繼承任何服務器角色,如系統管理員。在閱讀文檔時:「顯式授予用戶令牌中的身份或通過角色成員授予的服務器級權限不受尊重。」切換用戶上下文時,用戶不再有權將sysadmin授予其他用戶。

+0

謝謝JVC。這是我的理解,雖然這種添加角色成員的方式現在已被棄用,並且ALTER SERVER ROLE應該是未來的新方式 - 請參閱http://msdn.microsoft.com/en-us/library/ms186320.aspx。 – drewmullet

+0

此外,當我使用上述代替ALTER SERVER ROLE語句時,我得到相同的「消息15151,級別16,狀態1,行8無法更改服務器角色'sysadmin',因爲它不存在或您做沒有權限。「錯誤在描述中。 – drewmullet

+1

我不認爲這會起作用。用戶上下文切換不會繼承任何服務器角色,如sysadmin。在閱讀文檔時,「顯式授予用戶令牌中的身份或通過角色成員授予的服務器級權限不受尊重」。切換用戶上下文時,用戶不再有權將sysadmin授予其他用戶。 – JVC

相關問題