MSSQL 2016: 서버에서 원격 로그인으로 정의되어 있지 않으므로 서버에 연결할 수 없습니다.

Microsoft.SQLServer.2016.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule (Rule)

원격 서버에 대해 원격 프로시저 호출(RPC)을 실행하기 위한 보안 설정에는 Microsoft SQL Server의 인스턴스를 실행하는 원격 서버와 로컬 서버에서 로그인 매핑을 설정하는 작업이 포함됩니다. 매핑은 특정 서버\인스턴스 이름과 관련이 있으며 대개 기본 인스턴스의 경우 NetBIOS 이름이고 명명된 인스턴스의 경우 NetBIOS 이름과 인스턴스 이름입니다. 로그인 매핑이 없거나 연결 문자열에 지정된 서버 이름이 sysremotelogins 테이블의 정확한 이름과 일치하지 않고 게스트 계정에 sysremotelogins의 매핑이 없는 경우 이 오류를 수신합니다. 원격 사용자의 로그인 이름이 null이거나 비어 있는 경우에도 이 오류가 나타납니다.

Knowledge Base article:

요약

원격 서버에 대해 원격 프로시저 호출(RPC)을 실행하기 위한 보안 설정에는 Microsoft SQL Server의 인스턴스를 실행하는 원격 서버와 로컬 서버에서 로그인 매핑을 설정하는 작업이 포함됩니다. 매핑은 특정 서버\인스턴스 이름과 관련이 있으며 대개 기본 인스턴스의 경우 NetBIOS 이름이고 명명된 인스턴스의 경우 NetBIOS 이름과 인스턴스 이름입니다. 로그인 매핑이 없거나 연결 문자열에 지정된 서버 이름이 sysremotelogins 테이블의 정확한 이름과 일치하지 않고 게스트 계정에 sysremotelogins의 매핑이 없는 경우 이 오류를 수신합니다. 원격 사용자의 로그인 이름이 null이거나 비어 있는 경우에도 이 오류가 나타납니다.

해결 방법

복제는 원격 서버 정의를 사용하여 배포자, 게시자 및 구독자에 연결합니다. 복제를 사용하도록 설정하고 구성할 때 원격 서버를 암시적으로 만들고 이러한 원격 SQL Server 인스턴스에 대해 로그인 매핑을 추가합니다. 복제 연결 문자열은 항상 기본 인스턴스의 경우 NetBIOS 이름을 지정하고 명명된 인스턴스의 경우 NetBIOS 이름과 인스턴스 이름을 함께 지정합니다. 따라서 복제는 IP 주소 또는 정규화된 도메인 이름에 정의된 원격 서버 이름을 찾거나 사용하지 않습니다. 복제 연결 시도가 sysremotelogins에서 NetBIOS 이름을 찾을 수 없으면 위의 오류가 나타납니다.

Microsoft SQL Server 복제는 관련 서버가 NetBIOS(네트워크) 이름으로 등록되었을 때 지원되지만, 관련 서버가 IP 주소 또는 정규화된 도메인 이름으로 등록되었을 때는 지원되지 않습니다. 트러스트되지 않는 도메인이나 인터넷에서 SQL Server를 실행하는 컴퓨터 간에 복제를 수행하는 방법은 Microsoft 기술 자료 문서 321822를 참조하십시오.

참고 원격 서버에 대한 지원은 이전 버전과의 호환성을 위해서만 제공됩니다. 대신 SQL Server의 원격 인스턴스에 대해 저장 프로시저를 실행해야 하는 새 응용 프로그램은 연결된 서버를 사용해야 합니다.

쿼리에 포함되거나 복제에 사용되는 서버의 이름이 바뀌었거나 이미지에서 만들어진 경우 NetBIOS(네트워크) 이름이 SQL Server의 @@SERVERNAME 컴퓨터 부분과 일치하는지 확인해야 합니다. 일치하지 않을 경우 온라인 설명서(업데이트됨 - SP3) 항목 "서버 이름 바꾸기"의 단계에 따라 @@SERVERNAME 값을 업데이트할 수 있습니다. 변경 내용을 적용하려면 SQL Server 인스턴스를 다시 시작해야 합니다. 디스크 이미지를 사용하여 SQL Server 2000을 배포할 때 복제 설정이 성공하지 못하는 이유에 대한 자세한 내용은 Microsoft 기술 자료 문서 818334를 참조하십시오.

복제하는 동안 이 오류가 발생하는 경우 IP 주소나 정규화된 도메인 이름이 아닌 NetBIOS(네트워크) 이름을 사용하여 배포자, 게시자 및 구독자를 구성했는지 확인합니다.

재정의 가능한 매개 변수

이름

설명

기본값

사용

워크플로를 사용하거나 사용하지 않도록 설정합니다.

우선 순위

알림 우선 순위를 정의합니다.

1

심각도

알림 심각도를 정의합니다.

1

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID18483
Event Source$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL 2016: 서버에서 원격 로그인으로 정의되어 있지 않으므로 서버에 연결할 수 없습니다.
{0}
Event LogApplication
CommentMom2016ID='{9CF46B83-7BD2-49D5-A987-B24FCB6FD0D7}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.2016.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2016ID='{9CF46B83-7BD2-49D5-A987-B24FCB6FD0D7}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>18483</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2016.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>