【发布时间】:2020-09-17 10:34:49
【问题描述】:
我使用的是 SQL Server 2008。
有一个程序...
CREATE PROCEDURE xxx WITH EXECUTE AS OWNER
AS
BEGIN
SET NOCOUNT ON;
TRUNCATE TABLE ttt;
INSERT INTO ttt
(
field
)
SELECT
order_number
FROM
OPENQUERY([sss], 'SELECT ...')
END
...所有者用户可以毫无问题地执行该过程。
我的期望是,如果我授予其他用户执行权限,其他用户也应该能够运行此过程。
但使用其他帐户收到错误:'Access to the remote server is denied because no login-mapping exists.'
实际上,我尽量避免让“其他用户”完全访问链接服务器。
【问题讨论】:
-
“我正在使用 SQL Server 2008。” SQL Server 2008 已经停止支持一年多了,您现在真的应该考虑升级路径跨度>
-
是的,很遗憾,但我无法改变它。我会将您的建议转发给更高级别。
-
EXECUTE AS OWNER将模拟对象所有者,即该数据库中的特定用户,但如果执行用户的登录无法访问远程服务器,则远程服务器必须映射到特定的服务器登录,他们将无法查询它,即使他们在调用数据库上作为不同的用户执行。您需要将链接服务器配置为使用指定的登录名,或模拟登录名,而不是用户。
标签: tsql stored-procedures openquery