AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 88962
In Process
ScottStonehouse
ScottStonehouse
Asked: 2008-08-29 11:13:21 +0800 CST2008-08-29 11:13:21 +0800 CST 2008-08-29 11:13:21 +0800 CST

SQL Server 到 SQL Server 链接服务器设置

  • 772

请说明设置 SQL Server 链接服务器需要什么。

服务器 A 仅是 SQL 2005 Windows 登录名。服务器 B 相同(仅限 SQL 2005 Windows 登录)。

服务器 A 运行 Windows XP。服务器 B 运行 Windows Server 2003。

两个 SQL Server 服务都在同一个域帐户下运行。我使用在两个 SQL Server 上都具有管理权限的域帐户登录到我的工作站。

请注意,这些都是 SQL Server 2005 SP2 - 我已经向我指出了旧的修补程序,但那些已经应用了。

我遇到的问题是这个错误:

“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。(Microsoft SQL Server,错误:18456)”

sql-server
  • 9 9 个回答
  • 62511 Views

9 个回答

  • Voted
  1. evilhomer
    2008-10-08T06:25:52+08:002008-10-08T06:25:52+08:00

    根据我对这个问题的理解,这是一个“HOP”问题。

    即您正在尝试使用服务器 A 将您的登录详细信息(使用 SSPI)中继到服务器 B。

    在 SQL Server 2005 中,他们添加了一大堆安全问题,这使得这比应有的更难。“Kerberos 身份验证”这个词将成为大多数系统管理员/DBA 的生活的绊脚石。它有效地用于直通身份验证。

    以下是您需要的基础知识。1) 需要在 Active Directory(AD) 中设置服务器(A 和 B),并启用 Kerberos 委派。(这是通过您的活动目录管理面板设置的)

    2) 您的 SQL Server 运行的服务帐户也需要启用委派(这也可以通过您的活动目录管理面板设置)。- 如果它们没有在服务帐户下运行,您需要创建一个。

    3) 服务器需要为实例和主机和机器名称定义 SPN。(使用 Windows 支持工具中名为 SetSPN 的工具)

    支持工具(SetSPN 在此集中) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

    (如何添加 SPN 的概述) http://technet.microsoft.com/en-us/library/bb735885.aspx

    4)您可能需要将您的数据库设置为“值得信赖”

    ALTER DATABASE SET 值得信赖

    5)完成所有这些后,重新启动您的实例。

    6)然后尝试再次创建您的链接服务器。

    最后,您可以测试与 SQL Server 的连接。如果您正确配置了所有内容,这应该可以正常工作。

    SELECT *
    FROM OPENDATASOURCE('SQLNCLI',
        'Data Source=ServerB;Integrated Security=SSPI;'
        ).MASTER.dbo.syscolumns
    

    这将告诉您您的连接身份验证类型。

    select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
    

    您想在这里获得“KERBEROS”而不是“NTLM”。

    这是一个滑坡,KERBEROS 和 Pass-through 委托,坚持下去,你最终会弄明白的。

    参考 Kerberos http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx

    http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

    http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx

    问题的其他表现 http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx

    http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx

    http://msdn2.microsoft.com/en-us/library/ms189580.aspx

    我希望这一切都有帮助。

    • 18
  2. Tim Lentine
    2008-08-29T11:36:29+08:002008-08-29T11:36:29+08:00

    如果您对 GUI 更熟悉,也可以使用 SQL Server Management Studio (SSMS) 来管理\创建链接服务器。为此:

    1. 启动 SSMS 并连接到要链接的 SQL Server 实例之一
    2. 在对象资源管理器中展开“服务器对象”
    3. 右键单击“链接服务器”并选择“新建链接服务器”
    4. 在“新建链接服务器”对话框中,选择“SQL Server”作为服务器类型,然后输入您要链接到的 SQL Server 实例。
    5. 在“安全”页面上,选择用户从当前服务器到链接服务器的身份验证方式。您提到两台服务器都设置为使用 Windows 登录。如果是这种情况,在标记为“对于上面列表中未定义的登录,连接将:”的部分下,我可能会选择标记为“使用登录的当前安全上下文进行”的选项。

    请注意,这假定在服务器 A 上登录的用户也在服务器 B 上登录。

    • 3
  3. Eric Z Beard
    2008-09-24T05:36:45+08:002008-09-24T05:36:45+08:00

    我会因为同样的问题而发疯!我记得用 2000 做到这一点总是很容易。我一直在谷歌,我无法让它工作。完全相同的设置,两台服务器都在域帐户上运行,Windows auth。

    我正在尝试使用命名管道而不是 TCP,至少我得到了一个不同的错误:

    EXEC sp_addlinkedserver 
        @server='statler', 
        @srvproduct='', 
        @provider='SQLNCLI', 
        @datasrc='np:statler', 
        @provstr='Integrated Security=SSPI'
    
    -- Then I try this:
    select net_transport, auth_scheme 
    from statler.master.sys.dm_exec_connections 
    where session_id=@@spid
    
    /*
    
    Getting closer, but still fails:
    
    OLE DB provider "SQLNCLI" for linked server "statler" returned message 
        "Login timeout expired".
    OLE DB provider "SQLNCLI" for linked server "statler" returned message 
        "An error has occurred while establishing a connection to the server. 
        When connecting to SQL Server 2005, this failure may be caused by the 
        fact that under the default settings SQL Server does not allow 
        remote connections.".
    Msg 5, Level 16, State 1, Line 0
    Named Pipes Provider: Could not open a connection to SQL Server [5]. 
    OLE DB provider "SQLNCLI" for linked server "statler" returned message 
        "Invalid connection string attribute".
    
    */
    

    这可能与启用名称管道有关,但我可以通过 sqlcmd 从服务器 A 连接到服务器 B,如下所示:

    WALDORF:>  Sqlcmd.exe /E /Snp:statler
    

    如果我不使用命名管道,只需执行以下操作:

    New Linked Server
    Server Type: SqlServer
    Security: be made using the current login's security context
    

    我明白了:

    Login failed for user NT AUTHORITY\ANONYMOUS LOGIN
    

    [编辑]我开始在 Sql Server Central 上讨论这个问题。基本上,您必须进行一些与 Kerberos 委托相关的复杂配置才能使其正常工作。

    http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

    我决定只创建一个有限的 Sql 登录帐户来处理链接查询。我讨厌诉诸于此,但它似乎比您必须进行的更改以使其与 Windows auth 一起使用更安全。

    • 1
  4. Tim Cochran
    2008-08-29T11:16:47+08:002008-08-29T11:16:47+08:00

    如果您在 sp_addlinkedserver 和 sp_linkedservers 上进行搜索,您会得到一些示例。设置非常简单。

    • 0
  5. Biri
    2008-08-29T11:19:14+08:002008-08-29T11:19:14+08:00

    此外,如果您有 SQL 管理器,您可以使用它的 GUI 添加。

    基本上,您需要通过 Tim 提到的 SP 或通过 GUI 链接两台服务器,然后设置访问规则(如果您在两台服务器上都使用 Windows 身份验证,则甚至不需要)。

    • 0
  6. ScottStonehouse
    2008-08-29T11:33:03+08:002008-08-29T11:33:03+08:00

    我知道这应该很容易,但它根本不适合我——我在这里遇到了安全问题。所以我希望有人为我拼出步骤。

    我过去在 SQL 2000 上做过这个,没有任何问题。

    • 0
  7. Biri
    2008-08-29T11:40:35+08:002008-08-29T11:40:35+08:00

    所以您可以链接它们,但由于帐户错误而无法执行查询?

    您尝试使用的 Windows 用户是否有权读取两台服务器上的数据?

    有一次我也遇到了问题,因为“数据访问”属性由于某种未知原因被设置为 false。

    还可以尝试如果您明确将一个用户设置为另一个用户以获取链接,会发生什么情况。

    (这些都可以在 SQL Manager 中完成。)

    • 0
  8. ScottStonehouse
    2008-08-30T06:57:50+08:002008-08-30T06:57:50+08:00

    蒂姆发布了我认为正确的步骤。第 5 步是安全页面。我选择“使用登录的当前安全上下文进行”。

    当我单击确定时,我收到以下错误。我不知道它为什么要使用“NT Authority\Anonymous login”。我使用在两台服务器上拥有所有权限的域帐户登录到我的工作站。

    标题:Microsoft SQL Server 管理工作室

    “链接服务器已创建,但连接测试失败。您要保留链接服务器吗?”

    - - - - - - - - - - - - - - - 附加信息:

    执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)


    用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。(Microsoft SQL Server,错误:18456)

    如需帮助,请单击: http: //go.microsoft.com/fwlink ?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476

    • 0
  9. user59243
    2010-11-05T14:39:58+08:002010-11-05T14:39:58+08:00

    尝试在本地登录到服务器时执行此操作,如果您从远程计算机执行此操作,您可能无法发送正确的凭据。

    • 0

相关问题

  • sql server 连接字符串上的网络数据包大小以提高吞吐量

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • SQL 洗衣清单

  • OPENROWSET、二进制文件、varchars 和 varbinaries

  • 聚集索引与非聚集索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    限制 Apache 仅允许使用 SSL 访问某些目录

    • 6 个回答
  • Marko Smith

    我如何告诉 Apache 使用哪个 PHP?

    • 5 个回答
  • Marko Smith

    运行 Oracle SQL 脚本并通过命令提示符退出 sqlplus.exe

    • 11 个回答
  • Martin Hope
    DrStalker 限制 Apache 仅允许使用 SSL 访问某些目录 2008-09-19 17:19:55 +0800 CST
  • Martin Hope
    Sam McAfee 我如何告诉 Apache 使用哪个 PHP? 2008-12-23 18:15:17 +0800 CST
  • Martin Hope
    JoshL 运行 Oracle SQL 脚本并通过命令提示符退出 sqlplus.exe 2008-09-23 15:33:09 +0800 CST
  • Martin Hope
    Joel Spolsky 有没有可以跟踪我拥有的所有域名的网站? 2008-08-02 08:37:51 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve