2016-07-25 24 views
0

我有兩個數據庫服務器。一個在辦公室電腦上,另一個在網絡服務器上。互聯網上兩臺計算機之間有一個安全的加密隧道。 已經在web服務器pc上設置了一個SQL Server用戶,以允許訪問我需要的表。只能通過管理員查看鏈接服務器上的表。不如SQL服務器用戶

在辦公室pc上有一個需要訪問這些鏈接表的本地帳戶。

在計算機之間建立鏈接服務器。從SQL Server Management Studio中的系統管理員界面,我可以在鏈接服務器上免費瀏覽表格。

,但如果我的身份登錄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

問題在於用戶ID需要在遠程連接字符串中定義。

https://blogs.technet.microsoft.com/mdegre/2011/03/10/access-to-the-remote-server-is-denied-because-no-login-mapping-exists/

原因:當創建與參數@provstr和 您使用的是本地SQL Server非管理員或非Windows帳戶鏈接的服務器,你必須 添加參數「用戶名稱」到@provstr

分辨率:添加‘用戶ID =用戶名’到你的 鏈接服務器

EXEC master.dbo.sp_addlinkedserver @server = N提供商串LinkServerName ' @提供商= N'SQLNCLI',@ srvproduct = 'MS SQL服務器', @ provstr = N'SERVER =服務器\實例;用戶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' 

小提示,我的web服務器沒有實例名稱,所以我將'\ INSTANCE'部分留在了連接字符串的內部。注意2:文檔狀態@ srvproduct ='MS SQL Server',但我的2012 sql server只接受SQL_SERVER。

相關問題