为什么以域用户身份执行不起作用?

时间:2018-10-11 15:47:33

标签: sql-server

我已经创建了一个存储过程,该过程从网络服务器带来了图像并将其存储在数据库中。

如果图像存储在本地服务器上,则存储过程将正常执行。

由于代理没有对网络服务器的许可,它不会与网络上存储的图像一起执行。

要尝试对此进行排序,我添加了对图像服务器具有权限的网络用户。授予他们bulkadmin担任服务器角色。

并尝试运行:

execute as user = 'domain\user'
exec dbo.stored_proc 'value1','\\servername\path\imgname.bmp'
revert

但是我收到错误消息:

The EXECUTE permission was denied on the object 'xxxxxxx', database 'zzzzzzz', schema 'dbo'.

我尝试过:

grant execute on dbo.stored_proc to [domain\user] ;

出现以下错误:

Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.

域用户不是sysadmin,db_owner或数据库中的任何架构。

我没有以要设置的用户身份登录。

我想念或忘记什么?

非常感谢

1 个答案:

答案 0 :(得分:1)

  

由于代理没有对网络服务器的许可,它不会与网络上存储的图像一起执行。

您不能为此使用SQL Server模拟。 SQL Server模拟仅在SQL Server引擎内有效。为此,您需要真实的Windows模拟。幸运的是,您正在使用通过SQL Agent Proxies支持此功能的SQL Agent。

请注意,您不能将Agent Proxies与TSQL Job Steps一起使用。 TSQL作业步骤始终以SQL代理帐户身份连接并使用SQL模拟。因此,您需要通过cmdexec或powershell作业步骤运行存储过程。

SQL Agent将检索存储的凭据,使用凭据执行本地登录,然后使用该身份执行powerhsell或cmdexec脚本。