您是否可以将存储过程设置为始终作为特定用户执行?

Geo*_*wdy 1 sql t-sql sql-server-2012

我想将存储过程设置为始终作为特定域用户执行.无论用户调用还是尝试执行该过程,我都可以强制该过程作为另一个用户执行.

我们的一个供应商的应用程序硬编码使用本地数据库帐户执行某些程序来导入一些csv文件.遗憾的是,我们无法将csv文件存储在本地数据库服务器上,需要将它们放在网络共享上.因此,我需要将这些过程设置为以域用户身份执行,并且可以访问我将放置文件的网络共享.以下语句授予执行权限,但我需要一些强制sp作为特定用户执行的东西.

CREATE ROLE exec_procs
GRANT EXECUTE ON sys.sp_oaMETHOD TO [domain\user]
Run Code Online (Sandbox Code Playgroud)

JNK*_*JNK 5

您想要EXECUTE AS在SP定义中使用.

CREATE PROCEDURE dbo.MyProcedure
WITH EXECUTE AS 'domain\user'
AS
...
Run Code Online (Sandbox Code Playgroud)

或者,您只能以SP中的用户身份执行某些命令:

EXECUTE AS USER = 'Domain\User'
  <Commands>
REVERT
Run Code Online (Sandbox Code Playgroud)

在您的情况下,第二个选项可能更可取,以防止再次登录数据库.