我有两个数据库服务器。一个在办公室计算机上,一个在网络服务器上。通过互联网在两台计算机之间存在安全的加密隧道。 已在webserver pc上设置SQL Server用户,以允许访问我需要的表。
在办公室电脑上有一个本地帐户需要访问这些链接表。
在计算机之间设置链接服务器。从SQL Server Management Studio中的sysadmin界面,我可以在链接服务器上随意浏览表。
但如果我以SQL Server用户身份登录并尝试测试连接
===================================
The test connection to the linked server failed.
===================================
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Program Location:
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(String cmd)
at Microsoft.SqlServer.Management.Smo.LinkedServer.TestConnection()
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.LinkedServerConnectionTest.Invoke()
===================================
Access to the remote server is denied because no login-mapping exists. (.Net SqlClient Data Provider)
------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=7416&LinkId=20476
------------------------------
Server Name: SERVER\INSTANCE
Error Number: 7416
Severity: 16
State: 2
Procedure: sp_testlinkedserver
Line Number: 1
------------------------------
Program Location:
at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException)
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
到目前为止我尝试了什么
如何设置它以便SQL Server用户可以使用链接服务器?
答案 0 :(得分:0)
问题在于需要在远程连接字符串中定义用户ID。
原因:使用参数@provstr和创建链接服务器时 您使用本地SQL Server非管理员或非Windows帐户 将参数“User Name”添加到@provstr
中解决方案:将“用户ID =用户名”添加到您的提供商字符串中 链接服务器
EXEC master.dbo.sp_addlinkedserver @server = N'LinkServerName', @ provider = N'SQLNCLI',@ srvproduct ='MS SQL Server', @ provstr = N'SERVER = serverName \ InstanceName;用户ID = myUser'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkServerName', @locallogin = NULL,@ useself = N'False',@ rmtuser = N'myUser', @rmtpassword = N'*****'
总的来说,我的设置字符串看起来像这样(有关通过互联网设置连接的额外细节。
EXEC master.dbo.sp_addlinkedserver @server = N'LINKEDSERVERNAME', @srvproduct=N'SQL_SERVER', @provider=N'SQLNCLI', @provstr=N'SERVER=SERVER\INSTANCE;User ID=webuser', @datasrc=N'www.domain.com'
小注意,我的网络服务器没有实例名称,因此我将“\ INSTANCE”部分从连接字符串构建中删除。
注2:文档说明@srvproduct ='MS SQL Server',但我的2012 sql server只接受SQL_SERVER。