【问题标题】:How to give permission to rename a database sql-server如何授予重命名数据库 sql-server 的权限
【发布时间】:2014-06-23 16:55:19
【问题描述】:

我有一个用户需要重命名数据库。我可以授予 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”方法。欢迎任何可以解决问题的方法。

谢谢,

伊夫

【问题讨论】:

    标签: sql-server database rename database-permissions


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      检查MSDN 中的 ALTER DATABASE -> 权限

      需要数据库的 ALTER 权限。

      所以查询如下

      USE A
      GO
      GRANT ALTER TO 'someuser'
      GO
      

      【讨论】:

        猜你喜欢
        • 2019-04-30
        • 2011-02-20
        • 1970-01-01
        • 2015-04-24
        • 2011-03-06
        • 1970-01-01
        • 2011-04-29
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多