Partager via


Sécurité des serveurs distants

Pour permettre les appels de procédures à distance (RPC) sur un serveur distant, vous devez définir des mappages de connexion sur le serveur distant et éventuellement sur le serveur local exécutant une instance SQL Server. Par défaut, les appels de procédure distante sont désactivés dans SQL Server. Cette configuration accroît la sécurité de votre serveur en réduisant sa zone de surface attaquable. Vous devez activer cette fonctionnalité avant de pouvoir l'utiliser. Pour plus d'informations, consultez sp_configure (Transact-SQL).

[!REMARQUE]

Pour les serveurs distants, un support est fourni à des fins de compatibilité ascendante uniquement. Les nouvelles applications qui doivent exécuter des procédures stockées sur des instances distantes de SQL Server doivent plutôt utiliser des serveurs liés. Pour plus d'informations, consultez Liaison des serveurs.

Configuration du serveur distant

Les mappages de connexion à distance doivent être configurés sur le serveur distant. Ils permettent au serveur distant d'établir le mappage entre la connexion d'accès entrant RPC d'un serveur donné et la connexion d'accès locale. Les mappages de connexion à distance peuvent être définis à l'aide de la procédure stockée sp_addremotelogin sur le serveur distant.

[!REMARQUE]

SQL Server ne prend pas en charge l'option trusted (approuvée) pour sp_remoteoption.

Configuration du serveur local

Vous ne devez pas définir de mappage de connexion sur le serveur local pour les connexions locales authentifiées par SQL Server. En effet, SQL Server utilise la connexion locale et le mot de passe pour se connecter au serveur distant. En revanche, pour les connexions authentifiés par Windows, vous devez définir un mappage de connexion locale sur un serveur local qui définit la connexion et le mot de passe à utiliser par une instance de SQL Server en cas de connexion RPC sur un serveur distant.

Pour les connexions créées par l'authentification Windows, vous devez créer un mappage vers un nom de connexion et un mot de passe à l'aide de la procédure stockée sp_addlinkedsrvlogin. Ce nom de connexion et ce mot de passe doivent correspondre à la connexion d'accès et au mot de passe entrants attendus par le serveur distant et créés à l'aide de sp_addremotelogin.

[!REMARQUE]

Utilisez si possible l'authentification Windows.

Exemple de sécurité de serveur distant

Considérons les installations SQL Server suivantes : serverSend et serverReceive. serverReceive est configuré pour un mappage entre une connexion d'accès entrant du serveur serverSend appelée Sales_Mary et une connexion authentifiée SQL Server du serveur serverReceive appelée Alice. Une autre connexion d'accès entrant de serverSend appelée Joe est mappée sur une connexion authentifiée SQL Server du serveur serverReceive*,* appelée Joe.

L'exemple de code Transact-SQL suivant illustre la configuration du serveur serverSend en vue de l'exécution de RPC sur le serveur serverReceive.

--Create remote server entry for RPCs 
--from serverSend in serverReceive.
EXEC sp_addserver 'serverSend'
GO

--Create remote login mapping for login 'Sales_Mary' from serverSend
--to Alice.
EXEC sp_addremotelogin 'serverSend', 'Alice', 'Sales_Mary'
GO
--Create remote login mapping for login Joe from serverReceive 
--to same login.
--Assumes same password for Joe in both servers.
EXEC sp_addremotelogin 'serverSend', 'Joe', 'Joe'
GO

Sur le serveur serverSend, un mappage de connexion locale est créé pour une connexion authentifiée Windows Sales\Mary sur une connexion Sales_Mary. Aucun mappage local n'est nécessaire pour la connexion Joe puisque le même nom de connexion et le même mot de passe sont utilisés par défaut et que le serveur serverReceive possède un mappage pour la connexion Joe.

--Create a remote server entry for RPCs from serverReceive.
EXEC sp_addserver 'serverReceive'
GO
--Create a local login mapping for the Windows authenticated login.
--Sales\Mary to Sales_Mary. The password should match the
--password for the login Sales_Mary in serverReceive.
EXEC sp_addlinkedsrvlogin 'serverReceive', false, 'Sales\Mary',
   'Sales_Mary', '430[fj%dk'
GO