IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

[role] Detecter le role des utilisateurs


Sujet :

SQL Firebird

  1. #1
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut [role] Detecter le role des utilisateurs
    Bonjour,

    Je suis entrain de réaliser une interface d'administration pour gerer les utilisateurs de mon aplication.

    J'utilise donc sous Delphi7 un TIBSecurityService pour ajouter et supprimer des utilisateurs.
    Je cherche maintenant le moyen d'afficher tous les Utilisateurs referencés pour mon application. Facile ils ont tous un point communs : Il appartiennent tous au role 'ROLE_MON_APLLI'.

    Recuperer la liste de tous les utilisateur se fait aisément a l aide d'un TIBSecurityService, en revanche, comment savoir si un utilisateur lamba appartient au role 'ROLE_MON_APLLI' ?


    Merci

  2. #2
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    Je répond partiellement à ma question, ce qui m'ammene à une nouvelle question :

    en lancant cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from RDB$user_privileges where rdb$relation_name='MON_ROLE' and rdb$privilege='M'
    j'obtiens la liste de tous les utilisateurs membre du role 'MON_ROLE'.

    Nouveau probleme : dans cette liste figure les utilisateurs qui ont ete créés, puis qui ont recu les privilege du role 'MON_ROLE', puis qui ont été supprimés. (ca me fait une belle jambe de savoir que l'utilisateur XXXX, qui a été supprimé y a 1 an, etait membre du role 'MON_ROLE').

    donc ma nouvelle question :
    Comment recuperer la liste de tous les utilisateurs "valide" au moment présent ? c'est à dire ceux qui peuvent ACTUELLEMENT se connecter à interbase ?

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Il ne reste plus qu'à restreindre la liste avec la liste des utilisateurs retournés par le TIBSecurityService.

    Et comme cette liste (les utilisateurs) se trouve dans la base isc4.gdb et qu'on ne peux pas faire de requete inter-base (c'est un comble ) (on ne peux pas faire une requete avec jointure qui utiliserai des tables se trouvant dans des bases différentes), il n'y a pas de solution en une seule requete.

    Donc je vois plusieurs solutions :
    1- Soit restreindre la liste manuellement.
    2- Essayer un backup/restore (avec recréation de la base) pour voir si ça ne fait pas le ménage et du coup votre requete sera bonne.
    3- Soit avant de supprimer un USER vous lui enlever les ROLES auquel il appartient.
    4-Utiliser une UDF extistante (ou créer sa propre UDF), qui vérifierait si le USER existe encore dans isc4.gdb.

    Voilà les pistes que j'explorerai.
    Bonnes recherches. (Merci de nous tenir informer, ça peux interresser d'autres internautes )

  4. #4
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    Merci Bardibulle,
    j'ai réaliser la permiere solution.

    Voici un le bout de code qui permet de le réaliser en DELPHI7, si ca interesse certain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    //récupération de tous les users connu d'interbase
    IBAdmin.DisplayUsers;
      for i := 0 to IBAdmin.UserInfoCount - 1 do
      begin
        if (premier) then
        begin
          S := s + 'rdb$user='''  + IBAdmin.UserInfo[i].UserName + '''';
          premier := false;
        end
        else S := s + ' OR rdb$user='''  + IBAdmin.UserInfo[i].UserName + '''';
      end;
    // S est de la forme : RDB$USER='XXX' OR RDB$USER='YYY' OR RDB$USER='SYSDBA'
     
    //je fais une requte classique sur la table RDB$USER qui renvoie une liste d'utilisateurs qui verifie que : 
    // - chaque utilisateur est connu d'interbase
    // - chaque utilisateur appartient au role 'MON_ROLE'
    // - je force également l'affichage l'utilisateur SYSDBA (qui n'appartient pas forcément à 'MON_ROLE' mais qui a les droits dessus)
      IBSQL1.SQL.Clear;
      IBSQL1.SQL.Add('select DISTINCT RDB$USER from RDB$user_privileges where (rdb$relation_name=''MON_ROLE'' and rdb$privilege=''M'' AND ('+s+') OR RDB$USER=''SYSDBA'') ORDER BY RDB$USER');
      IBSQL1.Open;
      i:=0;
      while not(IBSQL1.Eof) do
      begin
        grille.Cells[0,i] := IBSQL1.FieldByName('RDB$USER').AsString;
        i:=i+1;
        IBSQL1.Next;
      end;
      IBSQL1.Close;

  5. #5
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Merci bien

    J'ai juste une remarque, plutot que de faire
    s := RDB$USER='USER1' OR RDB$USER='USER2' OR RDB$USER='USER3'
    vous pouviez utiliser
    RDB$USER in ('USER1','USER2','USER3')
    et donc simplifier votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //récupération de tous les users connu d'interbase 
    IBAdmin.DisplayUsers; 
      s := '';
      for i := 0 to IBAdmin.UserInfoCount - 1 do 
        s := s + QuotedStr(IBAdmin.UserInfo[i].UserName) + ',';
      s := leftStr(s, length(s)-1);
    // S est de la forme : 'USER1','USER2','SYSDBA' 
     
    //je fais une requete classique sur la table RDB$USER qui renvoie une liste d'utilisateurs qui verifie que : 
    // - chaque utilisateur est connu d'interbase 
    // - chaque utilisateur appartient au role 'MON_ROLE' 
    // - je force également l'affichage l'utilisateur SYSDBA (qui n'appartient pas forcément à 'MON_ROLE' mais qui a les droits dessus) 
      IBSQL1.SQL.Clear; 
      IBSQL1.SQL.Add('select DISTINCT RDB$USER from RDB$user_privileges where (rdb$relation_name=''MON_ROLE'' and rdb$privilege=''M'' AND RDB$USER IN('+s+') OR RDB$USER=''SYSDBA'') ORDER BY RDB$USER'); 
      IBSQL1.Open; 
      i:=0; 
      while not(IBSQL1.Eof) do 
      begin 
        grille.Cells[0,i] := IBSQL1.FieldByName('RDB$USER').AsString; 
        i:=i+1; 
        IBSQL1.Next; 
      end; 
      IBSQL1.Close;

  6. #6
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    hooo merci de l astuce !!

    je pensais que l 'opérateur IN ne pouvait etre utilisé qu'avec une requete (pour son opérateur Droit).

    effectivement je vais pouvoir clarifier mes requetes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SBI] gestion des utilisateurs/roles
    Par bash13 dans le forum SpagoBI
    Réponses: 0
    Dernier message: 23/07/2010, 12h14
  2. définir les role des utilisateurs dans un Workflow
    Par samworkflow dans le forum SharePoint
    Réponses: 2
    Dernier message: 16/03/2009, 11h10
  3. Réponses: 0
    Dernier message: 17/02/2009, 11h16
  4. GUI en fonction des "roles" des utilisateurs
    Par mrshadow dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 18/04/2008, 10h33
  5. Réponses: 4
    Dernier message: 18/10/2005, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo