我已经创建了一个存储过程,该过程从网络服务器带来了图像并将其存储在数据库中。
如果图像存储在本地服务器上,则存储过程将正常执行。
由于代理没有对网络服务器的许可,它不会与网络上存储的图像一起执行。
要尝试对此进行排序,我添加了对图像服务器具有权限的网络用户。授予他们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或数据库中的任何架构。
我没有以要设置的用户身份登录。
我想念或忘记什么?
非常感谢
答案 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脚本。