Contrôle de la connexion au serveur

De RAD Studio
Aller à : navigation, rechercher

Remonter à Connexion aux bases de données - Index


La plupart des serveurs de base de données distants incluent une gestion de la sécurité pour empêcher les accès non autorisés. Généralement, le serveur demande un nom d'utilisateur et un mot de passe lors de la procédure de connexion avant d'autoriser l'accès à une base de données.

Lors de la conception, si un serveur requiert une procédure de connexion, une boîte de dialogue de connexion standard demande de saisir un nom d'utilisateur et un mot de passe au moment de la première tentative de connexion à la base de données.

A l'exécution, trois moyens permettent de gérer la procédure de connexion d'un serveur :

Le premier moyen consiste à laisser la boîte de dialogue de connexion par défaut demander et traiter la connexion. C'est l'approche par défaut. Définissez la propriété LoginPrompt du composant connexion sur True (valeur par défaut) et si vous utilisez Delphi, ajoutez DBLogDlg à la clause uses de l'unité qui déclare le composant connexion. Votre application affiche la boîte de dialogue standard de connexion lorsque le serveur attend un nom d'utilisateur et un mot de passe.

Le second moyen consiste à fournir les informations de connexion avant la tentative de connexion. Chaque type de composant connexion utilise un mécanisme différent pour spécifier le nom d'utilisateur et le mot de passe :

  • Pour les ensembles de données BDE, dbExpress et InterBase Express, les paramètres de connexion Nom d'utilisateur et Mot de passe sont accessibles par le biais de la propriété Params. (Pour les ensembles de données BDE, les valeurs de paramètres peuvent aussi être associées à un alias BDE, tandis que pour les ensembles de données dbExpress, elles peuvent aussi être associées à un nom de connexion).
  • Pour les ensembles de données ADO, le nom d'utilisateur et le mot de passe peuvent être inclus dans la propriété ConnectionString (ou fournis en tant que paramètres de la méthode Open).

Si vous spécifiez le nom d'utilisateur et le mot de passe avant que le serveur ne les demande, veillez à définir LoginPrompt sur False afin que la boîte de dialogue de connexion par défaut n'apparaisse pas. Par exemple, le code suivant définit le nom d'utilisateur et le mot de passe sur un composant connexion SQL dans le gestionnaire d'événement BeforeConnect, en décodant un mot de passe crypté associé au nom de connexion en cours :

 procedure TForm1.SQLConnectionBeforeConnect(Sender: TObject);
 begin
   with Sender as TSQLConnection do
   begin
     if LoginPrompt = False then
     begin
       Params.Values['User_Name'] := 'SYSDBA';
       Params.Values['Password'] := Decrypt(Params.Values['Password']);
     end;
   end;
 end;

L'initialisation du nom d'utilisateur et du mot de passe à la conception ou l'utilisation de chaînes codées en dur dans le code génèrent l'intégration des valeurs dans le fichier exécutable de l'application. Cette approche compromet la sécurité du serveur car elle permet de les trouver facilement :

Le troisième moyen consiste à fournir votre propre traitement de l'événement de connexion. Le composant connexion génère un événement lorsqu'il requiert le nom d'utilisateur et le mot de passe.

  • Pour TDatabase, TSQLConnection et TIBDatabase, il s'agit d'un événement OnLogin. Le gestionnaire d'événement possède deux paramètres, le composant connexion et une copie locale des paramètres de nom d'utilisateur et de mot de passe dans une liste de chaînes. (TSQLConnection inclut aussi le paramètre de base de données). Vous devez définir la propriété LoginPrompt sur True pour que cet événement puisse se produire. Lorsque la propriété LoginPrompt a pour valeur False et qu'un gestionnaire est affecté pour l'événement OnLogin, il est impossible d'établir une connexion à la base de données, car la boîte de dialogue par défaut ne s'affiche pas, et le gestionnaire d'événement OnLogin ne s'exécute jamais.
  • Pour TADOConnection, l'événement est un événement OnWillConnect. Le gestionnaire d'événement possède cinq paramètres, le composant connexion et quatre paramètres qui renvoient les valeurs déterminant la connexion (notamment deux paramètres pour le nom d'utilisateur et le mot de passe). Cet événement se produit toujours, quelle que soit la valeur de LoginPrompt.

Ecrivez un gestionnaire pour l'événement dans lequel vous définissez les paramètres de connexion. Dans l'exemple suivant, les valeurs des paramètres USER NAME et PASSWORD sont fournies à l'aide d'une variable globale (UserName) et d'une méthode qui renvoie un mot de passe en fonction d'un nom d'utilisateur (PasswordSearch)

 procedure TForm1.Database1Login(Database: TDatabase; LoginParams: TStrings);
 begin
   LoginParams.Values['USER NAME'] := UserName;
   LoginParams.Values['PASSWORD'] := PasswordSearch(UserName);
 end;

Comme dans les autres méthodes de transmission de paramètres de connexion, lorsque vous écrivez un gestionnaire d'événement OnLogin ou OnWillConnect, évitez de coder en dur le mot de passe dans le code de votre application. Il doit apparaître uniquement sous la forme d'une valeur cryptée, d'une entrée de base de données sécurisée utilisée par votre application pour rechercher la valeur, ou être dynamiquement obtenu auprès de l'utilisateur.

Voir aussi