【发布时间】:2014-12-23 07:49:20
【问题描述】:
我开发了一个存储过程,以便从备份文件恢复数据库并向其中添加应用程序用户。此存储过程属于 master 数据库。
问题是我的 IT 部门不允许我使用 admin 用户,只能对 sysadmin 用户使用 EXECUTE AS 语句。
我可以恢复数据库,但我找不到在进程结束时添加用户的方法。
我使用的代码:
CREATE PROCEDURE [dbo].[myProc]
@database VARCHAR(50)
WITH EXECUTE AS 'aSysAdminUser'
AS
BEGIN
--Restore the database (working)
--Add the application user (not working)
SET @sqlScript = 'USE '+@database +';
CREATE USER [myApplicationUser] FROM LOGIN [myApplicationUser];
EXEC sp_addrolemember ''db_owner'', ''myApplicationUser'''
EXEC(@sqlScript)
END
当我运行它时,我收到以下错误消息:
服务器主体“aSysAdminUser”无法 在当前安全上下文下访问数据库“数据库”。
知道如何使用 EXECUTE AS 语句从主数据库上的存储过程中以动态参数数据库名称创建用户吗?
谢谢
【问题讨论】:
-
WITH EXECUTE AS 'dbo'? -
问题与模拟(即
EXECUTE AS)及其局限性有关。我现在正在寻找答案。 PS。他们在审查这个过程吗?您不能通过 SQL 注入授予自己“系统管理员”服务器角色吗? ;-)。 -
其实,没有。我只是尝试创建登录,但它不起作用。而且我几乎可以肯定,出于同样的原因,这个脚本不能按预期工作。等等。
-
我的 IT 部门不想将 sysadmin 授予任何人,只是允许我们执行 EXECUTE AS。感谢您的帮助
标签: sql-server permissions sql-server-2008-r2 impersonation database-permissions