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

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 資料表中的確切名稱不相符,且來賓 (guest) 帳戶在 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 位址或完整網域名稱) 設定散發者、發行者及訂閱者。

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>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>