随着下个月 Windows 2003 停产数据的临近,我正在将一个旧应用程序迁移到 Windows 2008。除了我们与索引服务的连接之外,这一切都进行得非常顺利。
我们有两台服务器,一台运行 SQL 2008 的数据库服务器和一台 Web 服务器。我们的 Web 应用程序允许用户搜索文档存储。这是过程:
- 用户输入对 Web 应用程序的查询
- Web 应用程序向数据库服务器发送查询
- 该查询将 Web 应用程序作为链接数据库服务器引用,并将检索到的路径加载到临时表中
- 数据库服务器将这些路径与 SQL 服务器中的另一个表连接起来
- 数据库服务器将结果发送回 Web 应用程序
- 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 机器也不在域中,而且工作得很好。
我一定错过了两者之间的设置。不幸的是,这些机器早在人们开始为这样的东西保存文档之前就已经设置好了,所以我不确定缺少的步骤是什么。
网上没有太多关于这个问题的信息,大概是因为软件年代久远,所以至少我们可以在这里开始建立一个知识库。我想知道现在是否有更多的人对这个软件有问题,生命即将结束。