如何授予重命名数据库sql-server的权限

时间:2014-05-06 22:21:15

标签: sql-server database rename database-permissions

我有一个用户需要重命名数据库。我可以提供dbcreator权限,但这将允许用户重命名任何数据库,甚至创建新数据库。

所以我尝试创建一个用户可以调用来完成工作的存储过程。

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”方法。任何可以做到这一点的东西都是受欢迎的。

谢谢,

伊夫

2 个答案:

答案 0 :(得分:0)

检查MSDN中的ALTER DATABASE - >权限

  

需要对数据库具有ALTER权限。

所以只需查询如下

USE A
GO
GRANT ALTER TO 'someuser'
GO

答案 1 :(得分:0)

用户必须是dbcreator服务器角色的成员。 (MSDN文档错了!)。