公司有多台数据库服务器,需要链接距服务器查询,其中两台可以正常链接,链接后可正常查询
但有一台不行,查询报错
EXEC sp_addlinkedserver 'memberdb','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=192.168.0.2\SQLDATA;UID=sa;PWD=1;'
select top 10 * from memberdb.member.dbo.users
memberdb 为链接服务器名,也就是指向的其它服务器
执行上面的sql出现如下错误
链接服务器"memberdb"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[Microsoft][ODBC SQL Server Driver][SQL Server]用户 'sa' 登录失败。"。
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "memberdb" 的 OLE DB 访问接口 "MSDASQL" 报错。身份验证失败。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "memberdb" 的 OLE DB 访问接口 "MSDASQL" 的数据源对象。
,补充一句,如果重新打开 Microsoft SQL Server Management Studio
用windows验证方式登录,则可以正常查询!
补充2,用户 'sa' 登录失败。"。应该不是指的链接的其它服务器sa,而是指的本机的sa,因为我换个用户 abc,则提示 用户 'abc' 登录失败。"。
急等高手!
是不是有实例名的问题。我看了SQLOLEDB链接的例子,实例名是写在 datasrc 里面的,而不是 severname 里面。
Scenario is: Trying to create a linked server on Computer1 pointing to a
database named ADMIN on a named instance (DMSQL11\NAMED1) on Computer2.
I executed the following:
EXEC sp_addlinkedserver @server = 'TESTLINK', @srvproduct='',
@provider='SQLOLEDB', @datasrc = 'DMSQL1\NAMED1', @catalog = 'ADMIN'
EXEC sp_addlinkedsrvlogin @rmtsrvname = 'TESTLINK', @useself = 'false',
@rmtuser = '<USER>', @rmtpassword = '<PASSWORD>' (I put the appropriate
user and password in of course).
以上引用自:
http://database.ittoolbox.com/groups/technical-functional/sql-server-l/linked-servers-named-instances-different-machines-238173
你按上面这个方法试试看呢?如果你确定不是用户名和密码的问题的话。
你登录SQL服务器端的时候用的windows身份登录的吗?也就是windows身份验证码?换成sa用户登录试试
换楼上方法试试吧!
--创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go
不行就重装系统吧!