MSSQL sur Linux : Impossible de se connecter au serveur, car il n'est pas défini comme connexion distante au niveau du serveur

Microsoft.SQLServer.Linux.EventRule.DBEngine.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule (Rule)

La configuration de la sécurité pour exécuter des appels RPC sur un serveur distant implique de configurer des mappages de connexion sur le serveur distant et éventuellement sur le serveur local qui exécute une instance de Microsoft SQL Server. Le mappage est spécifique à un nom de serveur/d'instance donné, généralement le nom NetBIOS pour une instance par défaut et le nom NetBIOS plus le nom de l'instance pour une instance nommée. Si le mappage de connexion n'existe pas ou si le nom du serveur spécifié dans la chaîne de connexion ne correspond pas exactement au nom indiqué dans la table sysremotelogins, et si le compte Invité n'a pas de mappage dans sysremotelogins, vous recevez cette erreur. Vous recevez également cette erreur si la valeur affectée au nom de connexion du serveur distant est NULL ou vide.

Knowledge Base article:

Récapitulatif

La configuration de la sécurité pour exécuter des appels RPC sur un serveur distant implique de configurer des mappages de connexion sur le serveur distant et éventuellement sur le serveur local qui exécute une instance de Microsoft SQL Server. Le mappage est spécifique à un nom de serveur\d’instance donné, généralement le nom NetBIOS pour une instance par défaut et le nom NetBIOS plus le nom de l’instance pour une instance nommée. Si le mappage de connexion n’existe pas ou si le nom du serveur spécifié dans la chaîne de connexion ne correspond pas exactement au nom indiqué dans la table sysremotelogins, et si le compte Invité n’a pas de mappage dans sysremotelogins, vous recevez cette erreur. Vous recevez également cette erreur si la valeur affectée au nom de connexion du serveur distant est NULL ou vide.

Résolutions

La réplication utilise des définitions de serveur distant pour se connecter au serveur de distribution, au serveur de publication et à l'abonné. Quand vous activez et configurez la réplication, vous créez implicitement des serveurs distants et ajoutez des mappages de connexion pour ces instances SQL Server distantes. Les chaînes de connexion de réplication spécifient toujours le nom NetBios d'une instance par défaut, et le nom NetBIOS plus le nom de l'instance d'une instance nommée. Par conséquent, la réplication ne peut ni trouver, ni utiliser les noms de serveur distant définis pour des adresses IP ou pour des noms de domaine complets. Quand la tentative de connexion de réplication ne parvient pas à trouver le nom NetBIOS dans sysremotelogins, vous recevez l'erreur ci-dessus.

La réplication Microsoft SQL Server est prise en charge quand les serveurs impliqués sont inscrits par nom NetBIOS (réseau) et non quand ils sont inscrits par adresse IP ou par nom de domaine complet. Pour plus d'informations sur la réplication entre ordinateurs exécutant SQL Server dans des domaines non approuvés ou sur Internet, consultez l'article 321822 de la Base de connaissances Microsoft.

Remarque La prise en charge des serveurs distants n'est assurée qu'à des fins de compatibilité descendante. Pour exécuter des procédures stockées sur des instances distantes de SQL Server, les nouvelles applications doivent utiliser des serveurs liés.

Si l’un des serveurs impliqués dans la requête ou utilisés dans la réplication a été renommé ou créé à partir d’une image, assurez-vous que le nom NetBIOS (réseau) correspond à la partie du nom d’ordinateur figurant dans la valeur @@SERVERNAME de SQL Server. Dans le cas contraire, suivez les instructions fournies dans la documentation en ligne (Mise à jour - SP3) à la rubrique « Modification du nom d’un serveur » pour mettre à jour la valeur de @@SERVERNAME. Cette modification ne nécessite pas le redémarrage de l’instance SQL Server. Pour plus d’informations sur l’échec de la configuration de la réplication lorsque SQL Server 2000 est déployé à l’aide d’une image disque, consultez l’article 818334 de la Base de connaissances Microsoft.

Si cette erreur se produit lors d’une réplication, assurez-vous d’avoir configuré le serveur de distribution, le serveur de publication et l’abonné à l’aide du nom NetBIOS (réseau) et non de l’adresse IP ou du nom de domaine complet.

Paramètres remplaçables

Nom

Description

Valeur par défaut

Activé

Active ou désactive le flux de travail.

Oui

Intervalle (en secondes)

Intervalle régulier (en secondes) auquel exécuter le flux de travail.

300

Priorité

Définit la priorité de l'alerte.

1

Gravité

Définit la gravité de l'alerte.

1

Heure de synchronisation

Heure de synchronisation

 

Délai d'expiration (secondes)

Spécifie la durée pendant laquelle le flux de travail est autorisé à s'exécuter avant d'être fermé et marqué comme ayant échoué.

200

Délai d’attente pour la connexion de base de données (secondes)

Le workflow échoue et enregistre un événement s’il ne peut pas accéder à la base de données pendant la période spécifiée.

15

Element properties:

TargetMicrosoft.SQLServer.Linux.DBEngine
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL sur Linux : Impossible de se connecter au serveur, car il n'est pas défini comme connexion distante au niveau du serveur
{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.Linux.DataSource.EventCollectionFiltered Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.Linux.EventRule.DBEngine.Could_not_connect_to_server_because_it_is_not_defined_as_a_remote_login_at_the_server_1_5_Rule" Target="SqlDiscL!Microsoft.SQLServer.Linux.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.Linux.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>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<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.Linux.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>