链接的服务器对象安全模型

时间:2018-02-14 22:26:40

标签: sql-server linked-server sql-server-agent security-context security-context-token

我需要锁定对MSSQL服务器中链接服务器对象的访问。

我正在构建一个主机数据库的视图,我从中查询填充仓库服务器上的临时表。我正在使用Data Tools / SSIS来提取视图数据。为了简化SSIS包,我使用OPENQUERY语法查询仓库服务器上存在的链接服务器对象,并通过链接服务器对象连接到其他SQL服务器,Oracle服务器等。

为了提供对链接服务器的访问,我在具有读访问权限的主机数据库上设置了本地SQL登录,然后使用'使用此安全上下文:'并传递本地SQL登录。这很好用。

我现在意识到我遇到了一个问题:任何具有仓库访问权限的用户都可以查询链接的服务器对象,因为存储了安全上下文!我不想要那个!我确实需要能够查询的人(因此我可以编写我的SSIS包)以及SQL Server代理服务帐户以便访问,以便当SQL Server代理作业以该用户成功运行时它可以成功查询链接服务器。

我认为锁定对链接服务器对象的查询访问权限的关键在“本地服务器登录到远程服务器登录映射”中,但我很难搞清楚。当我尝试添加例如NT SERVICE\SQLAgent映射到具有访问权限的本地登录时,然后保存,我在保存时点击'登录失败'NT AUTHORITY \ ANONYMOUS LOGON'。

有关如何允许具有访问权限的安全组和SQL Server代理服务帐户查询链接服务器,而不是其他具有仓库访问权限的人员的任何想法?

1 个答案:

答案 0 :(得分:0)

这被称为“双跃点”'问题

https://blogs.technet.microsoft.com/askds/2008/06/13/understanding-kerberos-double-hop/

要摆脱匿名登录错误,您必须正确设置Kerberos传递身份验证;

https://blogs.msdn.microsoft.com/farukcelik/2008/01/02/how-to-set-up-a-kerberos-authentication-scenario-with-sql-server-linked-servers/

https://www.databasejournal.com/features/mssql/article.php/3696506/Setting-Up-Delegation-for-Linked-Servers.htm

然而,这是非常复杂的 - 你提到要简化'您使用链接服务器的SSIS包,但SSIS正好解决了这个问题...为什么不使用SSIS从其他服务器复制数据以避免使用链接服务器?