無法連線到伺服器,因為並未定義為伺服器的遠端登入

Microsoft.SQLServer.2008.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule (Rule)

Knowledge Base article:

摘要

設定對遠端伺服器執行遠端程序呼叫 (RPC) 的安全性時,會在遠端伺服器中設定登入對應,也可能會在執行 Microsoft SQL Server 執行個體的本機伺服器中,設定登入對應。「指定的伺服器\執行個體名稱」會有各自的對應,通常是預設執行個體的 NetBIOS 名稱,及 NetBIOS 名稱加上具名執行個體的執行個體名稱。如果登入對應不存在,或連接字串中指定的伺服器名稱與 sysremotelogins 資料表中的名稱沒有完全相符,且來賓帳戶在 sysremotelogins 中沒有對應,將會收到此錯誤。如果遠端使用者的登入名稱為 Null 或空白,也會看到此錯誤。

解決方式

複寫使用遠端伺服器定義來連線到散發者、發行者及訂閱者。啟用與設定複寫時,會於背景為這些遠端 SQL Server 執行個體建立遠端伺服器及新增登入對應。複寫連接字串一律會為預設執行個體指定 NetBios 名稱,以及 NetBIOS 名稱加上具名執行個體的執行個體名稱。因此,複寫不會尋找或使用已為 IP 位址所定義的遠端伺服器名稱或是完整的網域名稱。複寫連線嘗試在 sysremotelogins 中找不到的 NetBIOS 名稱時,會收到上述錯誤。

涉及的伺服器由 NetBIOS (網路) 名稱註冊時支援 Microsoft SQL Server 複寫,但涉及的伺服器由 IP 位址或完整網域名稱註冊時則不支援該複寫。如需如何在非信任的網域或整個網際網路中執行 SQL Server 的電腦之間進行複寫的詳細資訊,請參閱 Microsoft 知識庫文件 321822。

附註:僅為回溯相容性提供遠端伺服器的支援。必須對 SQL Server 的遠端執行個體執行預存程序的新應用程式應使用連結伺服器。

如果查詢中相關的任何伺服器或複寫中使用的任何伺服器,經過重新命名或是從映像建立,您就必須確定 NetBIOS (網路) 名稱與 SQL Server 的 @@SERVERNAME 之電腦部分相符。如果不相符,可以遵循線上叢書 (已更新 - SP3)<重新命名伺服器>主題中的步驟,更新 @@SERVERNAME 的值。此變更需要重新啟動 SQL Server 執行個體。如需在使用磁碟映像部署 SQL Server 2000 時,複寫設定不成功的原因之詳細資訊,請參閱 Microsoft 知識庫文章 818334。

如果在複寫期間發生此錯誤,請確認您已使用 NetBIOS (網路) 名稱來設定散發者、發行者和訂閱者,而不是 IP 位址或完整的網域名稱。

可覆寫的參數

名稱

描述

預設值

已啟用

啟用或停用該工作流程。

優先順序

定義警示優先順序。

1

嚴重性

定義警示嚴重性。

1

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID18483
Event Source$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
無法連線到伺服器,因為並未定義為伺服器的遠端登入
{0}
Event LogApplication
CommentMom2008ID='{9CF46B83-7BD2-49D5-A987-B24FCB6FD0D7}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

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

Source Code:

<Rule ID="Microsoft.SQLServer.2008.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2008ID='{9CF46B83-7BD2-49D5-A987-B24FCB6FD0D7}';MOM2008GroupID={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" RunAs="SQL!Microsoft.SQLServer.SQLDefaultAccount">
<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="SQL!Microsoft.SQLServer.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.2008.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>