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

Bases de données Delphi Discussion :

[FireBird] Lire dans la table RDB$USERS?


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut [FireBird] Lire dans la table RDB$USERS?
    Bonsoir,

    J'éssaye de lire une valeur dans la table système RDB$USERS... Je ne sais pas si c'est possible mais j'ai éssayé quelque chose qui ne fonctionne pas... voici le 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    var
      IBDataBase: TIBDatabase;
      IBQuery: TIBQuery;
      IBTransaction: TIBTransaction;
      Qry: TIBSQL;
      resultat:integer;
    begin
      IBDataBase := TIBDatabase.Create(nil);
      IBQuery := TIBQuery.Create(nil);
      IBTransaction := TIBTransaction.Create(nil);
      Qry := TIBSQL.Create(nil);
      try
        //Créer base temporaire :
        IBDataBase.DatabaseName := ExtractFilePath(Application.ExeName)+'Bdd\Temp.GDB';
        IBDataBase.SQLDialect := 3;
        IBDataBase.Params.Clear;
        IBDataBase.Params.Add('USER "SYSDBA"');
        IBDataBase.Params.Add('PASSWORD "masterkey"');
        IBDataBase.Params.Add('PAGE_SIZE 4096');
        IBDataBase.CreateDatabase;
        IBDatabase.Connected := true;
        IBTransaction.DefaultDatabase := IBDataBase;
        IBQuery.Database := IBDatabase;
        IBQuery.Transaction := IBTransaction;
        Qry.database:=IBDatabase;
        Qry.Transaction:=IBTransaction;
        try
         IBTransaction.active:=true;
         Qry.SQL.Text:='SELECT count(RDB$USER_NAME) FROM RDB$USERS WHERE RDB$USER_NAME=''SYSDBA'';';
         Qry.ExecQuery;
         if Qry.Fields[0].Value = 0 then begin
             showmessage ('utilisateur non existant');
             end
         else begin
            showmessage ('Utilisateur existant');
            end;
     
        except
          IBTransaction.Rollback;
        end;
        IBDataBase.Connected := false;
      finally
        FreeAndNil(IBQuery);
        FreeAndNil(IBTransaction);
        FreeAndNil(IBDataBase);
        FreeAndNil(Qry);
     
    end;
    end;
    Le message d'erreur que j'ai c'est : TableUnknown RDB$USERS .

    Pourtant, si je regarde cette doc, http://dn.codegear.com/article/32981 je constate que RDB$USERS est une table system...

    Il y a quelque chose qui m'échape, ou alors peut être qu'on ne peut faire cela...

    Merci de votre aide !

  2. #2
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Je viens de vérifier, et dans la doc de firebird, il disent bien que le champ RDB$USER_NAME fait parti de la table RDB$USERS...

    Donc je pense que ma requete n'est pas forcement fause, mais il doit y avoir un "truque qui cloche " et qui m'échape...

    J'éspère que vous pourrez m'aider car là... je patoge totalement...

    Merci !

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Il me semble que tu as oublié la remarque que j'avais faite ici.

    En effet les utilisateurs sont en réalité stockés dans la BDD de sécurité nommée 'security2.fdb'. La table RDB$USERS est présente dans cette BDD.
    Mais tu ne pourras pas y accéder par ta méthode.
    Citation Envoyé par Notes de version FB
    Non-server access to security database is rejected
    A. Peshkov
    gsec now uses the Services API. The server will refuse any access to security2.fdb except through the Services
    Manager.
    Il faut garder à l'esprit que lorsque tu créés un utilisateur il est défini pour toutes les bases de données.

    @+ Claudius

  4. #4
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Aille... donc je ne peut pas faire ça si je comprend bien... car en faite, c'est juste pour vérifier si l'utilisateur "administrateur" de ma base est déjà crée...

    Ce que je peu faire, c'est utiliser un fichier Ini et lorsque je créer mon utilisateur j'ajoute une valeur dans le fichier par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [AdminExiste]
    présence utilisateur=true
    Ensuite, lorsque je veux vérifier si l'utilisateur existe, il me suffirat de lire la valeur dans le fichier...

    Qu'en pensez vous?

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par jojo86 Voir le message
    ... car en faite, c'est juste pour vérifier si l'utilisateur "administrateur" de ma base est déjà crée...
    Tu peux utiliser le composant IBSecurityService (à vérifier si il reste compatible avec FB2), pour obtenir la liste des utilisateurs existants.

    Mais dans tout cela, j'ai du mal à comprendre ce que tu veux gérer.

    @+

  6. #6
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Mais dans tout cela, j'ai du mal à comprendre ce que tu veux gérer.
    Bon je m'éxplique.

    Je veux créer une Application pour gérer des mots de passes.(Conçu pour mon père qui utilise plusieurs mot de passe et qui ne sait jamais lequel taper.)
    Grace à l'application, on entre le nom du site ou de l'application qu'on veut enregistrer puis le mot de passe (par exemple : "Developpez.net" "MonPass").
    Ce qui fait que si un jour je me rappel plus de mon pass, j'en ai pas pour longtemp à le retrouver !

    Puis j'ai voulu (à titre éxpérimental) permetre l'ajout de plusieurs utilisateur, au cas ou l'application est utilisée plusieurs fois sur un poste.

    Donc maintenant ce que je veux faire, c'est créer Une base pour cette application avec dedans, une table Utilisateur qui permetra de stocker les pass et login des utilisateurs, puis après je créer automatiquement Une table par nouvel utilisateur qui contiendra les champs NomApplication et Pass

    Le soucis c'est que juste après l'installation je viens executer un fichier qui Install la base automatiquement et ou on créer un "Premier Utilisateur"

    Lors de la création de la base, je viens ajouter l'utilisateur AdminGestionPass. Seul cet Utilisateur pourra afficher les données des tables etc... Le souci, c'est que SI l'utilisateur AdminGestionPass Existe déjà, j'ai un message d'erreur... Donc, je veux vérifier la présence du nom de cet utilisateur...

    J'éspère que tu vas comprendre...

  7. #7
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Par ailleur si quelqu'un avait la méthode sous la main pour obtenir la liste des utilisateurs...

    Sinon bah je rechercherais ce soir à la déboche !

    Allez bon après midi à tous !

  8. #8
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Bon et bien j'ai trouvé une solution !!!!!!!

    Voila, je n'obtiend pas la liste des utilisateurs, j'utilise la propriété UserInfoCount de TIBSecurityService ainsi que DisplayUser Voici le 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
    with IBSecurityService1 do
      begin
      LoginPrompt:=false;
      Params.Add('User_name=SYSDBA');
      Params.Add('Password=masterkey');
      Active:=true;
    
     DisplayUser('adminBasePass'); //adminBasePass étant l'utilisateur dont je souhaite tester la présence
      end;
    
    //Ici, je teste la présence de l'utilisateur, s'il y à présence de l'utilisateur, UserInfoCount renvoi 1 Sinon c'est -1
    
    if IBSecurityService1.UserInfoCount=-1 then begin
       showmessage (Utilisateur non éxistant);
       end
    else begin
      showmessage ('user existant');
      end;
    
    end;

    Voila ! Si toutefois, je me trompais, veuillez me corriger... mais j'ai testé avec plusieurs utilisateur, et ça fonctionne !!!

    Merci de votre aide qui m'as aiguillé, je pense notament à claudius !

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Voila ! Si toutefois, je me trompais, veuillez me corriger... mais j'ai testé avec plusieurs utilisateur, est ça fonctionne !!!
    Et bien a priori, ça a l'air correct. A part peut-être l'absence d'un Active := False sur le TIBSecurityService.

    Citation Envoyé par jojo86 Voir le message
    Merci de votre aide qui m'as aiguillé, je pense notament à claudius !
    You're welcome !

    Un petit tag et ce sera parfait...

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

Discussions similaires

  1. [Débutant] Connecter une base de donnée acces à VB.net et écrire/lire dans les tables.
    Par jgresse1025 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 15/04/2015, 09h59
  2. [ZF 1.11] Comment lire dans une table ?
    Par keokaz dans le forum Zend Framework
    Réponses: 39
    Dernier message: 29/07/2011, 18h09
  3. Réponses: 4
    Dernier message: 02/02/2007, 08h41
  4. Réponses: 3
    Dernier message: 28/11/2006, 08h44
  5. récupérer table et user dans une fonction
    Par papy_tergnier dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 15/12/2005, 11h38

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