0

随着下个月 Windows 2003 停产数据的临近,我正在将一个旧应用程序迁移到 Windows 2008。除了我们与索引服务的连接之外,这一切都进行得非常顺利。

我们有两台服务器,一台运行 SQL 2008 的数据库服务器和一台 Web 服务器。我们的 Web 应用程序允许用户搜索文档存储。这是过程:

  1. 用户输入对 Web 应用程序的查询
  2. Web 应用程序向数据库服务器发送查询
  3. 该查询将 Web 应用程序作为链接数据库服务器引用,并将检索到的路径加载到临时表中
  4. 数据库服务器将这些路径与 SQL 服务器中的另一个表连接起来
  5. 数据库服务器将结果发送回 Web 应用程序
  6. Web 应用程序向用户显示结果。

Web 应用程序通过 SQL 身份验证登录到数据库服务器以执行查询,但它失败并出现以下错误:

准备查询 "SELECT PATH FROM "10.0.1.89".MyCatalog..SCOPE('DEEP TRAVERSAL OF "C:\Documents"') WHERE (FREETEXT(Contents, 'introduction')) OR (FREETEXT(FileName) 时出错, 'introduction'))" 用于针对链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”执行。

当我通过 SSMS 在数据库服务器上以该用户身份登录时尝试执行查询时,会显示相同的错误,但会显示一些额外信息:

链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”返回消息“无效的目录名称 'MYCATALOG'。SQLSTATE=42000”。

消息 7399,第 16 层,状态 1,第 1 行

链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”报告错误。

拒绝访问。

消息 7321,第 16 层,状态 2,第 1 行

准备查询 "SELECT PATH FROM "10.0.1.89".MyCatalog..SCOPE('DEEP TRAVERSAL OF "C:\Documents"') WHERE (FREETEXT(Contents, 'introduction')) OR (FREETEXT(FileName) 时出错, 'introduction'))" 用于针对链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”执行。

但是,当我使用我的 Windows 身份验证帐户登录 SSMS 时,我能够执行相同的查询并返回结果。我的用户名和密码必须与 Web 服务器上的帐户相同 - 如果我在 Web 服务器上更改我的密码,则会引发错误,但不是同一个:

链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”返回消息“未指定错误”。

链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”返回消息“无效的目录名称 'MYCATALOG'。SQLSTATE=42000”。

Msg 7321, Level 16, State 2, Line 1 准备查询“SELECT PATH FROM "10.0.1.89".MyCatalog..SCOPE('DEEP TRAVERSAL OF "C:\Documents"') WHERE (FREETEXT(Contents , 'introduction')) OR (FREETEXT(FileName, 'introduction'))" 用于针对链接服务器“文件系统”的 OLE DB 提供程序“MSIDXS”执行。

我用这个查询创建了链接服务器,它似乎与旧系统的配置相匹配:

EXEC sp_addlinkedserver FileSystem, 'Index Server', 'MSIDXS', 'Web';
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'FileSystem', @locallogin = NULL, @useself = N'False', @rmtuser = N'CatalogUser', @rmtpassword = N'xxx';

我在 Web 服务器上创建了一个名为 CatalogUser 的用户,并将其密码设置为与上面的查询相同。

但是,当我使用 Windows 身份验证连接时,此信息似乎被忽略了,而是使用了我的 Windows 身份验证数据。如果我将密码更改为任何内容,查询仍然会成功。

我尝试启用 CatalogUser 以作为服务帐户登录,但这没有任何效果。

这两台机器不在域中,但两台 Windows 2003 机器也不在域中,而且工作得很好。

我一定错过了两者之间的设置。不幸的是,这些机器早在人们开始为这样的东西保存文档之前就已经设置好了,所以我不确定缺少的步骤是什么。

网上没有太多关于这个问题的信息,大概是因为软件年代久远,所以至少我们可以在这里开始建立一个知识库。我想知道现在是否有更多的人对这个软件有问题,生命即将结束。

4

1 回答 1

0

我现在已经解决了这个问题。我不知道,但是当您在 下运行程序时NT AUTHORITY\LOCAL SYSTEM,它将作为匿名用户通过网络进行身份验证。

为了解决这个问题,我使用相同的密码在 Web 服务器和 DB 服务器上创建了一个新的 SqlServer 用户。然后我将我的 SQL Server 实例配置为在这个新用户下运行,并且它开始正确地进行身份验证。

似乎为 MSIDXS 后端输入的任何安全信息都被忽略了,尽管如果您加入了域,则可能不会。我阅读的所有其他文档都建议这是执行此操作的唯一方法,但在原始设置中并非如此,这里也不是这样。

于 2015-06-09T15:11:28.800 回答