SQL 服务器以用户身份执行过程
SQL Server execute procedure as user
我有一个将数据加载到目标 table 的存储过程,并且在 运行 使用我的 AD 凭据进行会话时工作正常。
当我在工作中尝试 运行 它时(再次在 运行 As 选项中使用我的 AD 详细信息)突然登录无法访问其中一个数据库。
我用过
EXEC SP1
效果很好。
我使用(在作业中模拟 运行ning 存储过程)
EXECUTE AS user = 'Domain\JDoe'
EXECUTE SP1
REVERT
失败了。
当 运行 在不同会话 window 中成功使用相同凭据时,为什么存储过程会失败?
提前致谢
您需要将源数据库设置为TRUSTWORTHY。请注意,这还有其他安全隐患(见下文)。
默认情况下,在 SQL 服务器中,您不能使用假定的安全上下文离开一个数据库并进入另一个数据库,除非来源是可信的。将数据库设置为 TRUSTWORTHY 是表明数据库是可信来源的方式。这是一种安全措施,旨在防止有人从应用程序(通常通过注入)侵入一个数据库,然后将其用作进入同一 SQL 服务器中所有其他数据库的跳板。通过将其设置为 TRUSTWORTHY 你是说“这个数据库是 安全 并且没有一个不应该出去的人可以出去。"
像这样的更改数据库语句要求在您更改它时数据库中没有其他人。您可以将 WITH ROLLBACK IMMEDIATE 添加到命令的末尾,以首先将其他人赶出去。当然,这可能会产生自己的后果......;-)
我有一个将数据加载到目标 table 的存储过程,并且在 运行 使用我的 AD 凭据进行会话时工作正常。
当我在工作中尝试 运行 它时(再次在 运行 As 选项中使用我的 AD 详细信息)突然登录无法访问其中一个数据库。
我用过
EXEC SP1
效果很好。
我使用(在作业中模拟 运行ning 存储过程)
EXECUTE AS user = 'Domain\JDoe'
EXECUTE SP1
REVERT
失败了。
当 运行 在不同会话 window 中成功使用相同凭据时,为什么存储过程会失败?
提前致谢
您需要将源数据库设置为TRUSTWORTHY。请注意,这还有其他安全隐患(见下文)。
默认情况下,在 SQL 服务器中,您不能使用假定的安全上下文离开一个数据库并进入另一个数据库,除非来源是可信的。将数据库设置为 TRUSTWORTHY 是表明数据库是可信来源的方式。这是一种安全措施,旨在防止有人从应用程序(通常通过注入)侵入一个数据库,然后将其用作进入同一 SQL 服务器中所有其他数据库的跳板。通过将其设置为 TRUSTWORTHY 你是说“这个数据库是 安全 并且没有一个不应该出去的人可以出去。"
像这样的更改数据库语句要求在您更改它时数据库中没有其他人。您可以将 WITH ROLLBACK IMMEDIATE 添加到命令的末尾,以首先将其他人赶出去。当然,这可能会产生自己的后果......;-)