2014-05-06 109 views
0

我有一個用戶需要重命名數據庫。我可以賦予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」方法。任何可以做到這一點的東西都是值得歡迎的。

感謝,

伊夫

回答

0

檢查ALTER DATABASE在MSDN - >權限

需要對數據庫ALTER權限。

所以剛纔查詢如下

USE A 
GO 
GRANT ALTER TO 'someuser' 
GO 
0

用戶必須是dbcreator服務器角色成員。 (MSDN文檔是錯誤的!)。