Changement d'utilisateurs sur une connexion sécurisée via CLI

Vous pouvez changer d'utilisateur sur une connexion sécurisée explicite via l'interface de ligne de commande (CLI). Pour obtenir une définition du concept de changement d'utilisateur, voir la rubrique dans les liens connexes.

Avant de commencer

  • La connexion doit avoir été créée en tant que connexion sécurisée explicite.
  • La connexion sécurisée explicite ne doit pas être dans une transaction.
  • Le contexte sécurisé qui a permis la création de la connexion sécurisée explicite doit être configuré afin que vous puissiez utiliser l'ID autorisation souhaité.

A propos de cette tâche

Les exemples illustrés dans les instructions suivantes sont rédigés en langage C et supposent que conn est un pointeur vers une connexion sécurisée explicite. La variable rc est supposée posséder le type SQLRETURN. Il est supposé que la variable newuser est un pointeur vers une chaîne de caractères contenant l'ID autorisation de l'utilisateur que vous souhaitez utiliser. Il est supposé que la variable passwd est un pointeur vers une chaîne de caractères contenant le mot de passe de cet ID autorisation.

Procédure

  1. Appelez la fonction SQLSetConnectAttr pour définir l'attribut SQL_ATTR_TRUSTED_CONTEXT_USERID.
    Attribuez-lui l'ID autorisation que vous souhaitez utiliser.
    rc = SQLSetConnectAttr(
        conn,
        SQL_ATTR_TRUSTED_CONTEXT_USERID, newuser, SQL_NTS
    );
    //Check for errors
    Veillez à rechercher les erreurs et les avertissements, en particulier ceux répertoriés dans le tableau Tableau 1.
    Tableau 1. Erreurs indiquant l'échec de définition d'un nouvel ID autorisation lors du changement d'utilisateur
    SQLCODE Signification
    CLI0106E La connexion n'est pas connectée.
    CLI0197E La connexion n'est pas une connexion sécurisée.
    CLI0124E La valeur fournie n'est pas correcte. Vérifiez qu'elle n'est pas de type null, ou qu'elle n'est trop longue, par exemple.
    CLI0196E La connexion est impliquée dans une unité de travail qui l'empêche de changer d'utilisateur. Pour pouvoir changer d'utilisateur, la connexion ne doit pas se trouver dans une transaction.
  2. Facultatif: (cette étape est facultative sauf si le contexte sécurisé qui a autorisé cette connexion sécurisée requiert un mot de passe pour l'ID autorisation vers lequel vous basculez.) Appelez la fonction SQLSetConnectAttr pour définir l'attribut SQL_ATTR_TRUSTED_CONTEXT_PASSWORD.
    Attribuez-lui le mot de passe du nouvel ID autorisation.
    rc = SQLSetConnectAttr(
        conn,
        SQL_ATTR_TRUSTED_CONTEXT_PASSWORD, passwd, SQL_NTS
    );
    //Check for errors
    Veillez à rechercher les erreurs et les avertissements, à la fois ceux répertoriés dans le tableau Tableau 1 et ceux répertoriés dans le tableau Tableau 2.
    Tableau 2. Erreurs indiquant l'échec de définition d'un nouvel mot de passe lors du changement d'utilisateur
    SQLCODE Signification
    CLI0198E L'attribut SQL_ATTR_TRUSTED_CONTEXT_USERID n'a pas encore été défini.
  3. Procédez comme avec une connexion ordinaire.
    Si vous utilisez un gestionnaire de transactions XA, le changement d'utilisateur est tenté lors de la requête suivante. Sinon, cette tentative est effectuée juste avant le lancement de l'appel de fonction suivant qui accède à la base de données (SQLExecDirect, par exemple). Dans les deux cas, en plus des erreurs et des avertissements que vous recherchez normalement, veillez à rechercher les erreurs répertoriées dans le tableau 3. Les erreurs du tableau 3 indiquent que le changement d'utilisateur a échoué.
    Tableau 3. Erreurs indiquant l'échec du changement d'utilisateur
    SQLCODE Signification
    SQL1046N Le contexte sécurisé qui a permis cette connexion sécurisée n'est pas configuré pour permettre le changement d'ID utilisateur que vous tentez d'effectuer. Vous ne pourrez pas utiliser cet ID autorisation tant que le contexte sécurisé n'est pas modifié.
    SQL30082N Le mot de passe entré n'est pas correct pour l'ID autorisation que vous souhaitez utiliser.
    SQL0969N avec une erreur native -20361 Il existe une contrainte de niveau base de données qui vous empêche de changer d'utilisateur.
    Si le changement d'utilisateur n'aboutit pas, la connexion ne sera pas établie. Vous pouvez changer d'utilisateur sur une connexion sécurisée dont l'état est non connecté mais vous ne pouvez pas accéder au serveur de bases de données. Une connexion à l'état non connecté reste en l'état jusqu'à ce que vous changiez d'utilisateur.

Procédure à suivre

Remarque :
  1. Important : Le fait de changer d'utilisateur sans indiquer de mot de passe supprime l'étape d'authentification du serveur de base de données. Votre application ne doit pas autoriser un changement d'ID autorisation sans mot de passe sauf si votre application a déjà validé et authentifié l'ID autorisation. Sinon, une brèche de sécurité est créée.
  2. Le fait d'indiquer une valeur NULL pour l'attribut SQL_ATTR_TRUSTED_CONTEXT_USERID équivaut à définir l'ID autorisation système du contexte sécurisé (l'ID utilisateur employé lors de la création de la connexion sécurisée explicite).
  3. Lorsque vous définissez la valeur de l'attribut de connexion SQL_ATTR_TRUSTED_CONTEXT_USERID sur une connexion sécurisée explicite, la connexion est immédiatement redéfinie. Cette redéfinition équivaut à la création d'une nouvelle connexion avec les attributs de connexion d'origine de cette connexion. Cette redéfinition a lieu même lorsque la valeur affectée à l'attribut de connexion est l'ID autorisation système ou est NULL ou est identique à celle de l'attribut.
  4. Si l'attribut SQL_ATTR_TRUSTED_CONTEXT_PASSWORD est défini, le mot de passe sera authentifié lors du traitement de changement d'utilisateur même si le contexte sécurisé qui a autorisé la connexion sécurisée ne requiert pas d'authentification lors d'un changement d'utilisateur pour cet ID autorisation. Un temps de traitement inutile survient alors. Cette règle ne s'applique pas à l'ID autorisation système du contexte sécurisé. Si l'ID autorisation système du contexte sécurisé ne requiert pas d'authentification lorsque vous souhaitez l'utiliser, alors il n'est pas authentifié même si un mot de passe est fourni.