在SqlServer 2000上,我创build了一个到SqlServer 2005机器的链接服务器,“服务器types”设置为“SQL Server”(第一个单选button),链接服务器名称设置为远程机器的主机名。
但SqlServer 2000只能看到2005服务器上的许多目录中的一个。 我可以从那个目录中的表中select,但我无法访问同一台2005服务器上的任何其他目录。
您需要编辑链接服务器的安全设置,以在SQL 2005实例上指定一个login名,该login名对所有希望通过链接服务器访问的目录具有权限。 我没有一个SQL 2000服务器来给你确切的步骤,但这里是一个MSDN文章描述如何build立SQL 2000链接服务器的安全性 。
编辑:
有关configurationKerberos身份validation的信息 ,请参阅SQL Server Central上的这篇文章,以便允许链接服务器使用当前login用户的凭据来对目标服务器进行身份validation。 另请参阅对于为SQL Server设置信任委派的问题的答案。
您正在收到此问题,因为您有半途径configurationKerberos。 您遇到双跳问题。 在过去的几天中,我已经学到了一些关于设置链接服务器的信息。 本文档“ 如何实现Kerberos约束委派与SQL Server 2008 ”对我最有帮助。
以下是关于使用链接服务器的集成安全性的一些要点(即“使用login的当前安全上下文”)
- 您的Windows帐户必须有权访问ServerA和ServerB。
- 服务器必须使用TCP / IP或命名pipe道
- ServerA和ServerB都必须有自己的SPN注册。
- 如果没有,您可能会看到用户ANONYMOUS错误的login失败。
- 当使用短名称时,它必须parsing为具有活动目录域名的FQDN。 如果您键入一个简短的名称,它parsing为任何其他域名,但您的AD域名似乎打破。 作为另一种select,在二级域名中使用指向您的AD域名的CNAME。
- 要检查SPN :setspn -l DOMAIN \ SQL_Engine_Svc_Account
- 设置SPN :我不是100%所有这些条目都是需要的,但是这些是我添加的以涵盖客户端可能连接到实例的所有不同方式。 警告! 这些SPN是区分大小写的! 。 设置SPN后,您必须重置实例。 你可以让引擎自动注册这些,但在我的情况下,使用DNS别名,它永远不会正确注册。
- 基本语法: setspn -A MSSQLSvc / SQLHOSTNAME [FQDN] [:Port] [:INSTANCE]
- 默认实例:
- setspn -A MSSQLSvc / HOSTNAME DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / HOSTNAME:1433 DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / HOSTNAME.DOMAIN.ORG DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / HOSTNAME.DOMAIN.ORG:1433 DOMAIN \ SQL_Engine_Svc_Account
- 命名实例:
- setspn -A MSSQLSvc / HOSTNAME:INSTANCENAME DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / HOSTNAME.AD.ORG:INSTANCENAME DOMAIN \ SQL_Engine_Svc_Account
- 命名实例与DNS别名:(我们使用不同于实际主机名的dns别名。)
- setspn -A MSSQLSvc / ALIAS DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / ALIAS:1433 DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / ALIAS:INSTANCENAME DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / ALIAS.DOMAIN.ORG:1433 DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / ALIAS.DOMAIN.ORG:1433 DOMAIN \ SQL_Engine_Svc_Account
- setspn -A MSSQLSvc / ALIAS.DOMAIN.ORG:INSTANCENAME DOMAIN \ SQL_Engine_Svc_Account
- sql引擎帐户不能有“帐户敏感,不能委派”的设置。
- configuration双跳链接服务器连接时,您必须configuration委派:
- 在活动目录中,用户和计算机findSQLServerA引擎服务的服务帐户(假定您正在使用帐户 – 否则find计算机帐户)。在委派选项卡下,select“信任此用户以委托指定的服务”和“使用Kerberos只有'点击添加button。 findSQLServerB的引擎服务的服务帐户。 select您之前configuration的与您尝试创build的链接服务器相关的SPN。
我刚刚做完!
用于将所有服务器彼此链接的远程loginID必须具有对数据库的读/写访问权限。
只要您给数据库的读写权限,数据库就会显示在链接服务器下的目录列表中。
你去到每个数据库>安全>用户,并find远程login。 如果不存在,请转到服务器级别>安全性>用户>用户映射,并检查要链接的数据库。 现在,请确保远程login具有读/写权限,方法是转到数据库>安全>用户>拥有架构,检查db_datareader和/或db_datawriter。
祝你好运!
Jawid