2016-11-17 89 views
3

我有它加载数据到目标表,并在会议上与我的AD凭据运行时工作正常的存储过程。SQL Server中执行的程序,用户

当我尝试在作业中运行它(再次在运行方式选择自己的广告信息)突然登录不具有访问的数据库的一个。

我用

EXEC SP1 

后就正常了。

我以前(仿效工作运行存储过程)

EXECUTE AS user = 'Domain\JDoe' 

EXECUTE SP1 

REVERT 

哪些失败。

为什么与在不同的会话窗口中成功地使用相同的凭据运行时存储过程会失败?

在此先感谢

+0

你有没有考虑过你的运行SQL作业或作业步骤为一个特定的(域)用户,而不是在你的执行定义呢? – Jens

+0

@Jens,是的,那是我第一次尝试。我检查了工作历史,发现错误消息说我没有正确访问必要的DB之一。在看到我用EXEC线路手动运行SP后,我用我的用户名尝试了EXEC AS,结果与作业 – Powell21

+0

相同错误失败。您使用哪个dbms? – jarlh

回答

3

您需要将源数据库设置为TRUSTWORTHY。请注意,这具有其他安全隐患(参见下文)。

默认情况下,在SQL Server中不能使用的假定的安全上下文走出一个数据库,进入另一个除非源是可信的。将数据库设置为TRUSTWORTHY是指示数据库是可信来源的方式。这是一种安全措施,旨在防止某人从应用程序入侵一个数据库(通常通过注入),然后将其用作同一SQL Server中所有其他数据库的跳板。通过将其设定值得信赖你说“这个数据库是安全,没有人可以出去谁是不应该。

用alter database像这样的语句需要,没有人在你修改它的时候在数据库中。您可以将WITH ROLLBACK IMMEDIATE添加到该命令的末尾,以便首先抛出其他所有人。当然,这可能有自己的后果... ;-)