我有一個用戶需要重命名數據庫。我可以賦予dbcreator權限,但這可以讓用戶重命名任何數據庫,甚至創建新的數據庫。如何授予重命名數據庫sql-server的權限
所以我嘗試創建一個用戶可以調用的存儲過程來完成這項工作。
CREATE PROCEDURE SPMyRenameDB
WITH EXECUTE AS 'MySuperUser' -- MySuperUser is a SQL user with dbcreator permission
AS
ALTER DATABASE A MODIFY NAME = B
GO
我得到一個錯誤: 服務器主體「MySuperUser」不能訪問數據庫「A」當前安全環境下。
我試過用sp_renamedb,我得到:用戶沒有執行此操作的權限。
即使是對數據庫A中的表的簡單SELECT語句也是不允許的:服務器主體「MySuperUser」無法在當前安全上下文中訪問數據庫「A」。
當我作爲MySuperUser連接並查詢數據庫A時,它按預期工作。 (MySuperUser是在服務器上具有dbCreator和sysAdmin特權的SQL用戶)。
我懷疑「WITH EXECUTE AS」語句有一些安全限制,不允許在當前數據庫之外使用它。
存儲過程位於用戶具有db_owner權限的數據庫(除A和B之外)。
有什麼建議嗎?我不需要堅持我的「WITH EXECUTE AS」方法。任何可以做到這一點的東西都是值得歡迎的。
感謝,
伊夫