MSSQL en Windows: no se pudo conectar al servidor porque no está definido como inicio de sesión remoto en el servidor

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)

Configurar la seguridad ejecutando llamadas a procedimiento remoto (RPC) hacia un servidor remoto implicará la configuración de asignaciones de inicios de sesión en el servidor remoto y, posiblemente, en el servidor local donde se ejecute una instancia de Microsoft SQL Server. La asignación es específica para un servidor o nombre de instancia específico. Suele ser el nombre de NetBIOS de una instancia predeterminada y el nombre de NetBIOS más el nombre de una instancia con nombre. Si no existe la asignación de inicio de sesión o si el nombre del servidor especificado en la cadena de conexión no coincide con el nombre exacto de la tabla sysremotelogins y la cuenta de invitado no dispone de una asignación en sysremotelogins, recibirá este error. Verá este error también si se detecta que el usuario remoto posee un nombre de inicio de sesión nulo o vacío.

Knowledge Base article:

Resumen

Configurar la seguridad ejecutando llamadas a procedimiento remoto (RPC) hacia un servidor remoto implicará la configuración de asignaciones de inicios de sesión en el servidor remoto y, posiblemente, en el servidor local donde se ejecute una instancia de Microsoft SQL Server. La asignación es específica para un servidor o nombre de instancia específico. Suele ser el nombre de NetBIOS de una instancia predeterminada y el nombre de NetBIOS más el nombre de una instancia con nombre. Si no existe la asignación de inicio de sesión o si el nombre del servidor especificado en la cadena de conexión no coincide con el nombre exacto de la tabla sysremotelogins y la cuenta de invitado no dispone de una asignación en sysremotelogins, recibirá este error. Verá este error también si se detecta que el usuario remoto posee un nombre de inicio de sesión nulo o vacío.

Resoluciones

La replicación usa definiciones de servidor remoto para conectarse al distribuidor, al publicador y al suscriptor. En el momento en el que se habilita y configura la replicación, se crean de manera implícita servidores remotos y se agregan asignaciones de inicio de sesión a dichas instancias de SQL Server remotas. Las cadenas de conexión de replicación especificarán siempre el nombre de NetBios de una instancia predeterminada y el nombre de NetBIOS junto con el nombre de una instancia con nombre. Por lo tanto, la replicación no encontrará ni usará nombres de servidor remoto que ya se hubieran definido para las direcciones IP o los nombres de dominio completos. Cuando un intento de conexión de réplica no encuentra el nombre de NetBIOS en sysremotelogins, se recibirá el mensaje anterior.

La replicación de Microsoft SQL Server se admite cuando los servidores implicados están registrados por el nombre de NetBIOS (red), pero no cuando los servidores implicados están registrados por una dirección IP o un nombre de dominio completo. Para obtener más información sobre cómo replicar entre equipos que ejecutan SQL Server en dominios que no son de confianza o por Internet, vea el artículo de Microsoft Knowledge Base 321822.

Nota: solo se admiten servidores remotos por cuestiones de compatibilidad con versiones anteriores. Las aplicaciones nuevas que deban ejecutar procedimientos almacenados en instancias remotas de SQL Server deben usar servidores vinculados en su lugar.

Si se le ha cambiado el nombre alguna vez a alguno de los servidores implicados en la consulta o usados en la replicación, o bien se crearon a partir de una imagen, deberá asegurarse de que el nombre de NetBIOS (red) coincida con la parte del equipo de @@SERVERNAME de SQL Server. Si no coinciden, puede seguir los pasos indicados en el tema acerca de cómo cambiar el nombre de un servidor de los Libros en pantalla (actualizados: SP3) para actualizar el valor de @@SERVERNAME. Este cambio requiere que se reinicie la instancia de SQL Server. Para obtener más información acerca de los motivos por los que la configuración de la réplica no es correcta cuando SQL Server 2000 se implementa utilizando una imagen de disco, vea el artículo de Microsoft Knowledge Base 818334.

Si se produce este error durante la replicación, compruebe que ha configurado el distribuidor, el publicador y el suscriptor usando el nombre de NetBIOS (red) y no la dirección IP o el nombre de dominio completo.

Parámetros invalidables

Nombre

Descripción

Valor predeterminado

Habilitado

Habilita o deshabilita el flujo de trabajo.

Intervalo (segundos)

Intervalo de tiempo periódico en segundos en que se ejecuta el flujo de trabajo.

300

Prioridad

Define la prioridad de alerta.

1

Gravedad

Define la gravedad de alerta.

1

Hora de sincronización

Hora de sincronización

 

Tiempo de espera (segundos)

Especifica el tiempo que el flujo de trabajo se puede ejecutar antes de cerrarlo y marcarlo como erróneo.

200

Tiempo de expiración de la conexión de base de datos (segundos)

Se producirá un error en el flujo de trabajo y se registrará un evento si no puede obtener acceso a la base de datos durante el período especificado.

15

Element properties:

TargetMicrosoft.SQLServer.Windows.DBEngine
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL en Windows: no se pudo conectar al servidor porque no está definido como inicio de sesión remoto en el servidor
{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>