Hyd*_*per 2 impersonation sql-server-2008-r2
我在Windows 7机器上使用SQL Server 2008 R2.我创建了一个存储过程来运行SQL命令EXECUTE AS USER:
CREATE PROCEDURE dbo.ImpersonateUser
AS
BEGIN
EXECUTE AS USER = 'UserName';
END
Run Code Online (Sandbox Code Playgroud)
然后,我试图看看我是否冒充了用户......
PRINT CURRENT_USER;
EXEC ImpersonateUser;
PRINT CURRENT_USER
Run Code Online (Sandbox Code Playgroud)
......结果是......
dbo
dbo
Run Code Online (Sandbox Code Playgroud)
......当我希望它......
dbo
UserName
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,因为该EXECUTE AS USER语句仅在存储过程中有效ImpersonateUser. 我的问题是:存储过程是否可能ImpersonateUser影响调用上下文(会话)?我想在存储过程中封装(和隐藏)其他逻辑.
这不可能.任何EXECUTE AS更改都会在过程结束时自动恢复.
其他不超出过程范围的事情是使用SET命令和#TempObjects进行更改.
但是,您可以做的是封装需要在过程中的不同安全上下文下执行的逻辑,然后从更改上下文的过程中调用该逻辑.就像是:
CREATE PROCEDURE dbo.CallWithImpersonateUser
@ProcedureName
AS
BEGIN
EXECUTE AS USER = 'UserName';
EXEC @ProcedureName;
END;
Run Code Online (Sandbox Code Playgroud)