Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/12/2010, 14h54   #1
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Par défaut Comment tester si un utilisateur existe?

Bonsoir tout le monde;
Voilà, mon problème est : quel est le moyen de tester si un utilisateur existe sur un serveur Firebird? (nb. sans se préoccuper ni des bases de données ni des privilèges).
J'ai utilisé le composant IBSecurityService mais je me suis retrouver dans une ambigüité que je n'ai pas pu la résoudre;
http://www.developpez.net/forums/d10...yservice-role/

alors je cherche un autre moyen plus efficace.
Sachant que l'utilisateur qui va tester est un co-admin c-a-d ayant u le role RDB$ADMIN.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 16h38   #2
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Apparemment, ce n'est pas possible pour l'instant;
L'équipe projet Firebird n'a pas encore donner la possibilité au utilisateur ayant u le role rdb$admin de faire ce type de test.
Je me suis débrouillé pour faire passer les choses en tentant de créer l'utilisateur en question est si une erreur ce produit c'est qu'il existe :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
req:='CREATE USER '+Edit1.Text+' PASSWORD '+QuotedStr(MaskEdit1.Text)+';';
IBQuery1.SQL.Clear;
IBQuery1.SQL.ADD(req);
IF IBTransaction1.InTransaction Then
   IBTransaction1.Commit;
IBTransaction1.StartTransaction;
try
IBQuery1.ExecSQL;
IBTransaction1.Commit;
Except
//alors l'utilisateur existe
End;
Si quelqu'un trouve une solution meilleur, il fait bien de la poster.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 20h25   #3
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 213
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 213
Points : 3 315
Points : 3 315
gsec le permet
http://firebirdsql.org/manual/gsec-cmdline.html
L'api des services aussi
Code :
1
2
fbsvcmgr service_mgr -user sysdba -password masterke
    -action_display_user
donc un bon composant ou un bout de code utilsant l'api doit pouvoir le faire aussi
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 20h52   #4
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Même ces options ne répondent pas à la demande.
IBSecurityService donne les résultats voulus si on met :
Code :
1
2
IBSecurityService1.Params.ADD('user_name=sysdba');
IBSecurityService1.Params.ADD('password=masterkey');
mais ce qui bloque c'est, du moment où sysdba peut transmètre le role rdb$admin à un utilisateur B; c'est pour que B puisse ajouter/supprimer et modifier les utilisateurs, non?
Et si B peut ajouter un utilisateur, il doit pouvoir vérifier s'il existe pour ne pas provoquer des exceptions.
Cependant, B n'a aucun moyen de faire ce test, c-a-d :
Code :
1
2
IBSecurityService1.Params.ADD('user_name=B');
IBSecurityService1.Params.ADD('password=passB');
ne marche pas. Et j'ai même essayé
Code :
fbsvcmgr service_mgr -user B -password passB -action_display_user
mais toujours rien.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 21h06   #5
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Je viens de tester l'utilitaire gsec; ça marche mais seulement en ligne de commande :
si j'écris :
Code :
1
2
gsec -user B -pass passB -role rdb$admin
gsec>display
J'obtiens la liste des utilisateurs;
Finalement, tout est Ok pour firebird, il ne reste que chercher comment récupérer ces résultats par les applications.
Est ce qu'il n'y a pas un moyen pour récupérer le résultat de gsec? :
Code :
gsec -user B -password passB -role rdb$admin -display
Cette ligne de commande peut renvoyer de 0 à n lignes
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 22h06   #6
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Oh Alhamdou lilah;
Contrairement à IBSecurityService qui ne répond pas à la nouvelle option rdb$admin, j'ai tester et ça marche très bien avec le composant de UIB2.5 UIBSecurity1;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
FUNCTION utilisateur_existe(Utilisateur:String):BOOLEAN;
var i:integer;
begin
result:=false;
UIBSecurity1.UserName:='B';
UIBSecurity1.PassWord:='passB';
UIBSecurity1.Role:='rdb$admin';
UIBSecurity1.Host:='localhost';
UIBSecurity1.DisplayUsers;
FOR i := 0 TO UIBSecurity1.UserInfoCount-1 do
   IF UIBSecurity1.UserInfo[i].UserName=Utilisateur then 
  begin
     result:=true;
     BREAK;
  end;
end;
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 07h22   #7
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Je n'ai rien compris
Et bien même uibsecurity ne créer pas des utilisateur si on se connecte par un utilisateur de role rdb$admin.
C-a-d uibsecurity liste bien les utilisateurs mais ne créer pas de nouvel utilisateur tout simplement car il n'y a aucun moyen pour spécifier la base de donnée relative.
Ainsi, on peut lister les utilisateurs par uibsecurity et pour ajouter il faut formuler une requête 'create user '
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 10h24   #8
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
Et votre problème.... es-ce qu'il est réglé ?
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 11h35   #9
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Citation:
Envoyé par freud Voir le message
Et votre problème.... es-ce qu'il est réglé ?
Il est réglé avec ce bricolage.
La note est que IBSecurityService ne fait pas l'affaire; et un utilisateur de rôle rdb$admin ne peut pas ajouter les utilisateur avec UIBSecurity, il ne peut que lister les utilisateurs existants.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 11h47   #10
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
Essayez avec ça :
Code sql :
1
2
 
SELECT DISTINCT RDB$USER FROM RDB$user_privileges;
Ca donne la liste des users et en faisant un :
Code sql :
1
2
 
WHERE RDB$USER='le_user' ;
Récupère le user si il existe.
Aprés création du user il ne doit pas avoir forcément le role rdb$admin.
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 12h12   #11
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Le problème est de tester l’existence de l'utilisateur indépendamment de la base de données c-a-d sans ce référer à une DB ou une autres.
On veut savoir si l'utilisateur existe sur le serveur.
Dans tout les cas, c'est bon... le composant UIBSecurity fait l'affaire et donne la liste des utilisateurs sur le serveur.
Merci freud.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 12h28   #12
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
Ah oui, c'est vrai j'ai pas vu ça :
Citation:
(.... sans se préoccuper ni des bases de données ni des privilèges).
Désolé.

Au pire, si je ne trouve pas du comment faire pour toute les BDD's je les inscrirais dans aliases.conf ou un fichier .INI et lirais une par une les BDD's en restant avec le sql.
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 12h42   #13
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Citation:
Envoyé par freud Voir le message
Au pire, si je ne trouve pas du comment faire pour toute les BDD's je les inscrirais dans aliases.conf ou un fichier .INI et lirais une par une les BDD's en restant avec le sql.
même pas ça...
même ce truck et il ne fera pas l'affaire, parce qu'il ce peut que l'utilisateur existe mais il n'est autorisé à aucune base (c-a-d il n'existe nulle part dans les rdb$user_privilèges des bases).
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 14h05   #14
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Terminer les amis; j'ai trouver la solution magnifique :
Il suffit de lancer gsec avec l'option >out.txt qui sauvegarde le résultat de gsec dans le fichier out.txt.
Code :
1
2
 
C:\Progra~1\Firebird\Firebird_2_5\bin\gsec -user sysdba -password masterkey -display >out.txt
et vous aurez le fichier out.txt qui contient :

Code :
1
2
3
4
5
6
7
8
9
10
     user name                    uid   gid admin     full name
------------------------------------------------------------------------------------------------
SYSDBA                              0     0           Sql Server Administrator
A                                   0     0 admin       
B                                   0     0             
C                                   0     0 admin       
TAHAR                               0     0             
BRAHIM                              0     0             
MOUSSA                              0     0             
MEK                                 0     0
Magnifique non???????
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 17h56   #15
Membre éprouvé
 
Homme
Analyste-développeur
Inscription : mai 2002
Messages : 989
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Analyste-développeur

Informations forums :
Inscription : mai 2002
Messages : 989
Points : 426
Points : 426
à la bonne heure
__________________
Seul le Savoir est le Pouvoir
freud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 18h17   #16
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
La réponse au problème initial est alors :
Code :
1
2
 
C:\Progra~1\Firebird\Firebird_2_5\bin\gsec -user B -password PassB -role rdb$admin -display >out.txt
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h46.


 
 
 
 
Partenaires

Hébergement Web