【发布时间】: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