SQL Server에서 SQL Server에 연결된 서버 설정


25

SQL Server 연결 서버를 설정하는 데 필요한 사항을 설명하십시오.

서버 A는 SQL 2005 Windows 로그인 전용입니다. 서버 B는 동일합니다 (SQL 2005 Windows 로그인 전용).

서버 A는 Windows XP를 실행합니다. 서버 B는 Windows Server 2003을 실행합니다.

두 SQL Server 서비스 모두 동일한 도메인 계정으로 실행됩니다. 두 SQL Server 모두에 대한 관리 권한이있는 도메인 계정으로 워크 스테이션에 로그인했습니다.

이것들은 모두 SQL Server 2005 SP2입니다. 오래된 핫픽스가 나에게 지적되었지만 이미 적용되었습니다.

내가 겪고있는 문제는 " 'NT AUTHORITY \ ANONYMOUS LOGON 사용자에 대한 로그인에 실패했습니다.'(Microsoft SQL Server, 오류 : 18456)라는 오류입니다."

답변:


18

이 문제에 대한 나의 이해에서 "HOP"문제입니다.

즉, 서버 A를 사용하여 로그인 정보 (SSPI 포함)를 서버 B로 릴레이하려고합니다.

SQL Server 2005에서는이 문제를보다 어렵게 만드는 많은 보안 문제를 추가했습니다. "Kerberos 인증"이라는 단어는 대부분의 sys-admins / DBA의 삶의 허물이됩니다. 통과 인증에 효과적으로 사용됩니다.

필요한 기본 사항은 다음과 같습니다. 1) 서버 (A 및 B)는 Kerberos에 대한 위임이 활성화 된 AD (Active Directory)에 설정되어야합니다. (이것은 활성 디렉토리 관리자 패널을 통해 설정됩니다)

2) SQL Server가 실행되는 서비스 계정도 위임을 활성화해야합니다 (이는 활성 디렉토리 관리자 패널을 통해서도 설정 됨). -서비스 계정으로 실행되고 있지 않은 경우 서비스 계정을 만들어야합니다.

3) 서버는 인스턴스와 호스트 및 머신 이름에 대해 SPN을 정의해야합니다. (Windows 지원 도구에서 SetSPN이라는 도구 사용)

지원 도구 (SetSPN은이 세트에 있음) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(SPN을 추가하는 방법에 대한 개요) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) DB를 "신뢰할 수있는"것으로 설정해야 할 수도 있습니다

신뢰할 수있는 ALTER DATABASE SET

5)이 모든 작업을 완료 한 후 인스턴스를 다시 시작하십시오.

6) 그런 다음 연결된 서버를 다시 만드십시오.

마지막으로 SQL Server 연결을 테스트 할 수 있습니다. 모든 것이 올바르게 구성되어 있으면 제대로 작동합니다.

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=ServerB;Integrated Security=SSPI;'
    ).MASTER.dbo.syscolumns

연결 인증 유형을 알려줍니다.

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID

'NTLM'이 아닌 'KERBEROS'를 받으려고합니다.

미끄러운 경사면, KERBEROS 및 Pass-through 위임은 그것을 고수하고 결국 알아낼 것입니다.

Kerberos http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx 참조

http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx

문제의 다른 표현 http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx

http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx

http://msdn2.microsoft.com/en-us/library/ms189580.aspx

이 모든 것이 도움이되기를 바랍니다.


좋은 답변입니다! 이것은 분명히 다른 곳에서 유용하게 구성되지 않은 많은 정보를 요약합니다.
ConstantineK

3

GUI에 더 익숙한 경우 SSMS (SQL Server Management Studio)를 사용하여 연결된 서버를 관리 할 수도 있습니다. 그렇게하려면 :

  1. SSMS를 시작하고 연결하려는 SQL Server 인스턴스 중 하나에 연결
  2. 개체 탐색기에서 "서버 개체"를 확장합니다
  3. "링크 된 서버"를 마우스 오른쪽 단추로 클릭하고 "새 링크 된 서버"를 선택하십시오.
  4. "새 연결된 서버"대화 상자에서 서버 유형으로 "SQL 서버"를 선택하고 연결할 SQL Server 인스턴스를 입력하십시오.
  5. "보안"페이지에서 사용자가 현재 서버에서 연결된 서버로 인증하는 방법을 선택하십시오. 두 서버 모두 Windows 로그인을 사용하도록 설정되어 있다고 언급했습니다. 이 경우 "위의 목록에 정의되지 않은 로그인의 경우 연결은 다음과 같습니다." 섹션 에서 "로그인의 현재 보안 컨텍스트를 사용하여 작성" 옵션을 선택합니다 .

이는 서버 A에 로그인 한 사용자도 서버 B에 로그인 한 것으로 가정합니다.


1

나는 같은 문제로 견딜거야! 나는 2000으로 이것을하는 것이 항상 쉽다는 것을 기억합니다. 나는 Google에 온통이 일을 할 수 없습니다. 도메인 계정에서 실행되는 두 서버 인 Windows 인증과 동일한 설정입니다.

TCP 대신 명명 된 파이프를 사용하려고하는데 적어도 다른 오류가 발생합니다.

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

이것은 이름 파이프를 활성화하는 것과 관련이있을 수 있지만 다음과 같이 sqlcmd를 통해 서버 A에서 서버 B로 연결할 수 있습니다.

WALDORF:>  Sqlcmd.exe /E /Snp:statler

명명 된 파이프를 사용하지 않고 다음을 수행하십시오.

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

나는 이것을 얻는다 :

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[편집] Sql Server Central에서 이에 대한 토론을 시작했습니다. 기본적으로이 기능을 사용하려면 Kerberos 위임과 관련된 복잡한 구성을 수행해야합니다.

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

연결된 쿼리를 처리하기 위해 하나의 제한된 Sql Login 계정을 만들기로 결정했습니다. 나는 그것에 의지하지 않지만 Windows 인증으로 작업하기 위해 변경 해야하는 것보다 더 안전합니다.


복잡한 Kerberos 설정에 대해서는 아래를 참조하십시오. 이 물건은 오랫동안 오랫동안 나를 죽였다!
evilhomer

0

sp_addlinkedserver 및 sp_linkedservers를 검색하면 몇 가지 예가 있습니다. 설정이 매우 간단합니다.


0

또한 SQL Manager가있는 경우 GUI를 사용하여 추가 할 수 있습니다.

기본적으로 Tim이 언급 한 SP 또는 GUI를 통해 두 서버를 연결 한 다음 액세스 규칙을 설정해야합니다 (두 서버에서 Windows 인증을 사용하는 경우에는 필요하지 않음).


0

나는 이것이 쉬운 것으로 알고 있지만 전혀 효과가 없다-나는 여기에 보안 문제가있다. 그래서 누군가 나를 위해 단계를 철자하고 싶습니다.

과거에는 SQL 2000에서 아무런 문제 없이이 작업을 수행했습니다.


0

따라서 연결할 수는 있지만 잘못된 계정으로 인해 쿼리를 실행할 수 없습니까?

사용하려는 Windows 사용자에게 두 서버 모두에서 데이터를 읽을 수있는 권한이 있습니까?

"데이터 액세스"속성이 알 수없는 이유로 false로 설정되어 문제가 발생한 경우

또한 링크를 위해 한 사용자를 다른 사용자로 명시 적으로 설정 한 경우 어떻게되는지 확인하십시오.

(이들 모두는 SQL Manager에서 수행 할 수 있습니다.)


0

Tim은 내가 생각했던 정확한 단계를 정확한 단계로 게시했습니다. 5 단계는 보안 페이지입니다. "로그인의 현재 보안 컨텍스트를 사용하여 작성"을 선택합니다.

확인을 클릭하면 다음 오류가 발생합니다. 왜 'NT Authority \ Anonymous login'을 사용하려고하는지 모르겠습니다. 두 서버 모두에 대한 모든 권한을 가진 도메인 계정으로 워크 스테이션에 로그인했습니다.

TITLE : Microsoft SQL Server Management Studio

"링크 된 서버가 생성되었지만 연결 테스트에 실패했습니다. 링크 된 서버를 유지 하시겠습니까?"

------------------------------ 추가 정보:

Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다. (Microsoft.SqlServer.ConnectionInfo)


사용자 'NT AUTHORITY \ ANONYMOUS LOGON'에 대한 로그인에 실패했습니다. (Microsoft SQL Server, 오류 : 18456)

도움이 필요하면 다음을 클릭하십시오. http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476


0

서버에 로컬로 로그인 한 상태에서이 작업을 시도하십시오. 원격 시스템에서 서버에 로그인하면 올바른 자격 증명을 보내지 못할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.