【问题标题】:TSQL - Stored Procedure - Execute as Owner - OpenqueryTSQL - 存储过程 - 以所有者身份执行 - Openquery
【发布时间】: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


【解决方案1】:

用户必须映射到 db_owner 组

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2015-09-21
    • 1970-01-01
    • 2017-07-28
    • 2014-06-15
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多