链接服务器对象安全模型
Posted
技术标签:
【中文标题】链接服务器对象安全模型【英文标题】:Linked server objects security model 【发布时间】:2018-02-14 22:26:39 【问题描述】:我需要锁定对 MSSQL 服务器中链接服务器对象的访问。
我正在主机数据库上构建视图,我从中查询以填充仓库服务器上的临时表。我正在使用数据工具/SSIS 来提取视图数据。为了简化 SSIS 包,我使用OPENQUERY
syntax 来查询我的仓库服务器上存在的链接服务器对象,并通过链接服务器对象连接到其他 SQL 服务器、Oracle 服务器等。
为了提供对链接服务器的访问,我在具有读取访问权限的主机数据库上设置了一个本地 SQL 登录,然后我使用“使用此安全上下文:”并传递本地 SQL 登录。效果很好。
我现在意识到我有一个问题:任何具有仓库访问权限的用户都可以查询链接服务器对象,因为隐藏的安全上下文!我不想要那个!我确实需要有权查询的人(这样我就可以编写我的 SSIS 包)以及 SQL Server 代理服务帐户才能访问,以便当 SQL Server 代理作业以该用户身份运行时它可以成功查询链接服务器。
我相信锁定对链接服务器对象的查询访问的关键在于“本地服务器登录到远程服务器登录映射”中的某个位置,但我很难弄清楚这一点。当我尝试添加例如NT SERVICE\SQLAgent
映射到具有访问权限的本地登录名,然后保存时,我在保存时点击了'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。
关于如何允许具有访问权限的安全组和 SQL Server 代理服务帐户查询链接服务器而不是其他具有仓库访问权限的人的任何想法?
【问题讨论】:
【参考方案1】:这被称为“双跳”问题
(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 从其他服务器复制数据避免使用链接服务器?
【讨论】:
感谢您提供的信息 - 听起来我在简化方面走错了方向。所以你说一种方法是在 SSIS 中设置连接管理器并管理来自那里的连接而不是仓库中的链接服务器,对吗? 这确实是推荐的方法。 SSIS 正是为这种类型的场景而设计的,在这种场景中,链接服务器并不适合它(尽管如果您正确设置了 Kerberos,它们将可以工作)。 非常好的信息。我想我在想,对于 SSIS 连接管理器,我喜欢只有一个参数,我可以更新它以针对单独的环境。我更新到“TEST”,它以我的仓库测试环境为目标,这反过来又为我的链接服务器设置了正确的环境配置,我不必在 SSIS 中弄乱任何东西 @henhen - 您是否通过 SQL 代理运行您的作业?如果是这样 - 您可以创建 2 个作业,一个用于测试,一个用于实时 - 然后在“代理作业步骤”属性中,您可以覆盖连接管理器设置。这样你不需要更改任何设置,你只需运行相应的作业 如果你不使用 SQL 代理,你仍然可以这样做——在引用变量的连接管理器中使用变量和表达式,那么你只需要交换一个变量以上是关于链接服务器对象安全模型的主要内容,如果未能解决你的问题,请参考以下文章