Sql-Server

以非 Windows 使用者身份執行 xp_cmdshell

  • November 10, 2016

所以我有一堆數據庫使用者,他們應該能夠通過呼叫 xp_cmdshell 來執行一個過程。它們不是 Windows 域帳戶,它們只是 sql-server 登錄。我想使用代理來做到這一點##xp_cmdshell_proxy_account##。我知道它可能帶來的安全威脅。由於我們公司的內部版本控制,我不能使用“以管理員身份執行”,而且我顯然不想授予所有使用者執行權限xp_cmdshell,這就是為什麼我唯一的選擇(我在這裡嗎?)是使用代理帳戶.

我有一個特殊的 windows 域帳戶,我授予了 xp_cmdshell 執行權限。我可以使用此帳戶成功執行 cmdshell。我使用以下命令創建了代理帳戶:

EXEC sp_xp_cmdshell_proxy_account  [my_domain\special_account],'SuperSecretPassword'

當我嘗試以沒有 xp_cmdshell 權限的數據庫使用者身份執行任何 xp_cmdshell 命令時,會出現錯誤:

The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.

我的問題是 - 我可以使用 sql server 登錄名執行 xp_cmdshell 命令嗎?我只是在這裡遺漏了一些東西,還是只能使用域帳戶?是否有任何其他程序可以在這裡實現?

如果我無法完成上述工作,我將不得不將一些邏輯切換到 CLR 過程,但我決心讓它工作。

我正在使用 sql-server 2012。任何幫助將不勝感激,謝謝!

看來您需要為您的 sql server 登錄授予對 xp_cmdshell 的訪問權限。一旦使用者有權執行 xp_cmdshell,它將使用您的代理帳戶來執行它,因為它是非特權使用者。

另一種選擇是使用證書來簽署您的儲存過程,允許您為執行該儲存過程的使用者授予額外的權限。

https://msdn.microsoft.com/en-us/library/bb283630.aspx

證書的缺點是每次更改過程都需要重新簽名,這可能會很痛苦。

引用自:https://dba.stackexchange.com/questions/146274