Windows 上的 MSSQL: 因為未定義伺服器要從遠端登入,所以無法連線到伺服器

Microsoft.SQLServer.Windows.EventRule.DBEngine.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 表格中的名稱不完全相同,且 guest 帳戶在 sysremotelogins 中沒有對應,則會收到此錯誤。如果發現遠端使用者的登入名稱為 Null 或空白,也會看到此錯誤。

Knowledge Base article:

摘要

要設定安全性以針對遠端伺服器執行遠端程序呼叫 (RPC),需要在遠端伺服器設定登入對應,以及可能在執行 Microsoft SQL Server 執行個體的本機伺服器進行設定。對應是針對某個 server\instance 名稱,通常針對預設執行個體的話為 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 有關電腦的部分。如果不相符,您可以遵循《線上叢書》(Updated - SP3) 主題<重新命名伺服器>中的步驟,更新 @@SERVERNAME 的值。這項變更需要重新啟動 SQL Server 執行個體。如需使用磁碟映像部署 SQL Server 2000 時,複寫設定為何失敗的詳細資訊,請參閱 Microsoft 知識庫文章 818334。

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

可覆寫的參數

名稱

描述

預設值

已啟用

啟用或停用該工作流程。

間隔 (秒)

每次重複執行工作流程之間的時間間隔 (秒)。

300

優先順序

定義警示優先順序。

1

嚴重性

定義警示嚴重性。

1

同步處理時間

同步處理時間

 

逾時 (秒)

指定流程被關閉及標示為失敗之前,允許執行的時間。

200

資料庫連線的逾時 (秒)

若工作流程無法在指定的期限之內存取資料庫,將會失敗並登錄一則事件。

15

Element properties:

TargetMicrosoft.SQLServer.Windows.DBEngine
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
Windows 上的 MSSQL: 因為未定義伺服器要從遠端登入,所以無法連線到伺服器
{0}
CommentMom2017ID='{9CF46B83-7BD2-49D5-A987-B24FCB6FD0D7}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

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

Source Code:

<Rule ID="Microsoft.SQLServer.Windows.EventRule.DBEngine.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{9CF46B83-7BD2-49D5-A987-B24FCB6FD0D7}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Windows.DataSource.EventCollectionFiltered">
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<EventDisplayNumber>18483</EventDisplayNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Windows.EventRule.DBEngine.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>Event ID: $Data/Property[@Name='EventID']$. $Data/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>