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

Outils Firebird Discussion :

Firebird 3.0 : problème avec un compte administrateur (Flamerobin)


Sujet :

Outils Firebird

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut Firebird 3.0 : problème avec un compte administrateur (Flamerobin)
    Bonsoir le forum,

    En suivant quelques conseils sur ce même forum, sous Firebird 2.5.4, j'avais créé un compte admin avec les droits d'admin puis créée un rôle SYSDBA, enlever le compte SYSDBA, etc. Comme cela je pouvais protéger un peu plus la BDD car je ne pouvais pas protéger l'accès au fichier et donc il était facilement copiable et modifiable.
    Je rencontre un problème avec la version 3.0, j'ai essayé de réaliser la même chose en créant une nouvelle base de données vierge puis en créant un nouvel utilisateur "Administrateur" avec les droits d'admin. Une fois la chose faite je me reconnecte à cette même base de données avec le nouveau compte "Administrateur" et j'essaye de créer le rôle "SYSDBA" mais j'échoue avec un message d'erreur me stipulant que mes droits ne sont pas suffisants. J'ai essayé de créer un rôle avec un nom différent mais pareil. J'essaie alors de créer un utilisateur mais là aussi problème mais créer une table cela marche.

    J'ai donc lu la documentation sur le site de firebird qui explique qu'ils ont changé le mode de fonctionnement de la sécurité mais je n'arrive pas à comprendre ce que je fait de mal pour ne pas obtenir le même résultat qu'avant.
    Quelqu'un aurait-il gratté en profondeur la version 3.0 et pourrait-il me venir an aide ?
    J'ai vraiment cherché sur le web et la documentation (mais il n'y a pas grand chose concernant la version 3.0) et j'ai fait tout un tas de tests mais je n'y arrive vraiment pas.

    J'apprécierais vraiment un coup de main.
    Bonne soirée à tous et merci par avance pour vos contributions.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Citation Envoyé par DelphiCode Voir le message
    mais il n'y a pas grand chose concernant la version 3.0)
    Il y a ça : http://www.firebirdsql.org/file/docu...g3-config.html
    et évidemment ça : http://www.firebirdsql.org/file/docu...-security.html
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous et merci à toi makowski,

    C'est exactement les pages de documentation que j'ai trouvé et je te remercie de les avoir explicitement écrite. Je sens au ton de ta réponse que je t'ai offensé au vu de ta citation et j'en suis désolé. Je n'ai pas dis qu'il n'y avait pas de documentation mais qu'il n'y avait pas grand chose concernant la version 3.0 (ce qui est normal puisque récente) mais j'aurais du préciser que je voulais parler au sens large (documentation, tutoriel, faq, post résolus, etc.).

    C'est pour cela que je demandais si quelqu'un avait déjà bien gratté la version 3.0.

    Tu vas me dire que je suis peu-être demeuré mais j'ai beau relire la documentation et essayer les lignes de codes avec RDB$ADMIN etc mais je n'y arrive pas ! Je ne pense pas que cela soit seulement lié à flamerobin car j'ai essayé avec un autre outil tiers et je n'y arrive pas mieux.

    Du coup pourrais-tu me venir en aide (je suis prêt à tout essayer en console, etc.). Si je devais reformuler ma question je dirais ceci : est-il possible de créer un utilisateur ayant les mêmes pouvoirs que le SYSDBA de se reconnecter avec celui-ci et de pouvoir créer des rôles ou d'autres utilisateurs (quelque soit leur niveau administrateur ou non) ?

    J'ai bien compris que l'équipe de Firebird avait renforcé la sécurité sur cette version 3.0, alors peut-être que je prends le problème à l'envers ? En fait, comme expliqué avant, comme dans mon cas je ne peux pas empêcher l'accès à la base données (je parle de l'accès physique au fichier .fdb lui-même) je voudrais éviter que quelqu'un qui copie colle la bdd chez lui puisse avec son propre serveur et son compte SYSDBA modifier ou voler les données. Je comprends bien que ce n'est pas possible à 100% pour quelqu'un qui connaît bien et qui possède un éditeur hexadécimal mais bon les astuces que j'avais trouvé sur ce forum (créer un rôle SYSDBA avec une exception grâce à trigger sur ouverture base de données + suppression de SYSDBA remplacé par un autre utilisateur ADMIN) permettait de limiter la casse.

    Mais peut-être que je fais erreur et que le nouveau SYSDBA de la version 3.0 est géré différemment et que je n'ai plus besoin de faire comme je fais ?

    Si quelqu'un pouvait éclairer une lumière éteinte que je suis ce serait sympa mais en attendant je te remercie pour ta contribution.

    Bonne après-midi à tous,

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonsoir le forum,

    J'ai essayé de continuer à avancer sur ce problème mais je n'y arrive toujours pas.
    J'ai tenté d'utiliser ISQL en utilisant les commandes suivantes :
    • Connexion à la base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> connect "c:\test.fdb" user 'ADMINISTRATEUR' password '********' role 'RDB$ADMIN';
    Database: "c:\test.fdb", User: ADMINISTRATEUR

    • Une fois connecté, comme je n'arrive pas à faire un "CREATE ROLE", j'ai lu, relu et relu la documentation et j'ai essayé de refaire une commande sous ISQL que j'avais essayé sans succès sous Flamerobin et qui est accessible à cette adresse : http://www.firebirdsql.org/file/docu...-metadataprivs. Voilà ce que j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> grant create role TO ADMINISTRATEUR;
    Statement failed, SQLSTATE = 42000
    unsuccessful metadata update
    -GRANT failed
    -no C privilege with grant option on table/view SQL$ROLES
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> grant create role TO ADMINISTRATEUR WITH GRANT OPTION;
    Statement failed, SQLSTATE = 42000
    unsuccessful metadata update
    -GRANT failed
    -no C privilege with grant option on table/view SQL$ROLES
    SQL>
    Je ne sais pas si cette erreur parle à quelqu'un (de plus familier que moi avec ISQL) ? Pour ma part je n'ai jamais rencontré le "no C privilege".


    • Du coup j'ai voulu créer un autre utilisateur comme "ADMINISTRATEUR" et voilà ce que j'ai utilisé en ISQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> create user toto password 'test' grant admin role;
    Statement failed, SQLSTATE = 28000
    add record error
    -no permission for INSERT access to TABLE PLG$SRP_VIEW
    SQL>
    Voilà où j'en suis pour le moment, peut-être quelqu'un sera plus inspiré avec le ISQL ?

    Merci pour vos contributions futures.
    Bonne soirée à tous,

  5. #5
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    ce qui est important en premier lieu, c'est la configuration
    lire "Choose your authentication method(s)" dans "http://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/qsg3-config.html"

    Sous Windows, le setup propose les réglages

    tes outils ne sont peut être capables que de gérer le mode "Legacy_Auth"

    quand à :
    Je rencontre un problème avec la version 3.0, j'ai essayé de réaliser la même chose en créant une nouvelle base de données vierge puis en créant un nouvel utilisateur "Administrateur" avec les droits d'admin. Une fois la chose faite je me reconnecte à cette même base de données avec le nouveau compte "Administrateur" et j'essaye de créer le rôle "SYSDBA" mais j'échoue avec un message d'erreur me stipulant que mes droits ne sont pas suffisants.
    cela n'a pas de sens avec Firebird 3, puisque que tu peux maintenant créer les utilisateurs dans la base.
    créer une role SYSDBA a toujours été un mauvais hack inutile et inefficace et avec Firebird 3. complétement inutile.
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut à tous.

    Citation Envoyé par DelphiCode
    J'ai tenté d'utiliser ISQL ...
    J'ai fait les tests dans mon environnement et je te communique les résultats en ligne de commande, à savoir sous "isql".

    1) création de la base de données.
    Pour ce faire, je lance mon script batch windows avec un utilisateur qui n'existe pas encore et le rôle 'rdb$admin'.
    En ce qui concerne le rôle 'rdb$admin', que tu ne mettes rien ou autre chose, cela aura le même effet.
    Ce que je cherche à faire, c'est attribuer l'utilisateur 'artemus' comme propriétaire de la base de données.

    Le script batch windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
     
    chcp 1252 > nul
     
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
     
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'artemus'  -role 'rdb$admin'  -user 'artemus'
     
    @echo.
    pause
    exit
    L'important dans ce script batch windows est la ligne "isql".

    Et voici l'exécution du script ".sql" :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    CREATE DATABASE '..\Data\Base.fdb' page_size 4096 DEFAULT CHARACTER SET ISO8859_1;
     
    create table test (
    id  int      not null primary key,
    lib char(20) not null collate fr_fr
    );
     
    insert into test (id,lib) values (1, 'un');
    insert into test (id,lib) values (2, 'deux');
    insert into test (id,lib) values (3, 'trois');
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
    commit;
     
    show database;
    Database: ..\Data\Base.fdb
            Owner: ARTEMUS
    PAGE_SIZE 4096
    Number of DB pages allocated = 240
    Number of DB pages used = 224
    Number of DB pages free = 16
    Sweep interval = 20000
    Forced Writes are ON
    Transaction - oldest = 4
    Transaction - oldest active = 5
    Transaction - oldest snapshot = 5
    Transaction - Next = 6
    ODS = 12.0
    Database not encrypted
    Default Character set: ISO8859_1
     
    grant rdb$admin to artemus;
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO ARTEMUS
     
    SHOW USERS;
    Users in the database
      1 #ARTEMUS
     
    select * from rdb$roles;
     
    RDB$ROLE_NAME                   RDB$OWNER_NAME                    RDB$DESCRIPTION RDB$SYSTEM_FLAG RDB$SECURITY_CLASS
    =============================== =============================== ================= =============== ===============================
    RDB$ADMIN                       ARTEMUS                                    <null>               1 <null>
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Que faisons-nous dans ce script ?

    a) on crée la base de données.
    b) on crée la table 'test'.
    c) on insère quelques lignes dans la table 'test'.
    d) on fait le vidage de la table 'test'.
    e) on visualise les caractéristique de la base de données. On remarque que l'utilisateur 'artemus' est le propriétaire (Owner) de cette base.
    f) on met le compte 'artemus', propriétaire de la base de données, comme administrateur.
    g) on visualise les autorisations (grant).
    h) et l'unique utilisateur (user) qui est 'artemus'.

    2) attribution des privilèges.
    On accède à nouveau avec le compte 'artemus' et le rôle 'rdb$admin'. Sans cela, on ne peut rien faire.
    En fait, maintenant le compte 'artemus' est administrateur, ce qui n'était pas le cas précédemment.

    Le script batch windows reste identique à celui précédant.

    Et voici l'exécution du script ".sql" contenant la création des privilèges :
    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
    51
    52
    53
    54
    55
    SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') from rdb$database;
     
    RDB$GET_CONTEXT
    ===============================================================================
    3.0.0
     
     
    SHOW VERSION;
    ISQL Version: WI-V3.0.0.32483 Firebird 3.0
    Server version:
    Firebird/Windows/AMD/Intel/x64 (access method), version "WI-V3.0.0.32483 Firebird 3.0"
    on disk structure version 12.0
     
    -- ====================================================================
     
    create                role dbsupervisor;
    grant  all on test to role dbsupervisor;
     
    create                   role dbuser;
    grant  select on test to role dbuser;
     
    create user patron  password 'patron';
     
    grant dbsupervisor to patron WITH ADMIN OPTION;
     
    create user gordon  password 'gordon';
     
    grant dbuser to gordon;
     
    commit;
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON TEST TO ROLE DBSUPERVISOR
    GRANT SELECT ON TEST TO ROLE DBUSER
    GRANT DBSUPERVISOR TO PATRON WITH ADMIN OPTION
    GRANT DBUSER TO GORDON
    GRANT RDB$ADMIN TO ARTEMUS
    SHOW USERS;
    Users in the database
      1 #ARTEMUS                             0  GORDON
      0  PATRON
     
    select * from rdb$roles;
     
    RDB$ROLE_NAME                   RDB$OWNER_NAME                    RDB$DESCRIPTION RDB$SYSTEM_FLAG RDB$SECURITY_CLASS
    =============================== =============================== ================= =============== ===============================
    RDB$ADMIN                       ARTEMUS                                    <null>               1 <null>
    DBSUPERVISOR                    ARTEMUS                                    <null>               0 <null>
    DBUSER                          ARTEMUS                                    <null>               0 <null>
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Que faisons-nous dans ce script ?

    a) on visualise la version de firebird : 3.0.0.
    b) on visualise la release de firebird : 32483. Nous sommes en version64 bits.
    c) nous créons le rôle 'dbsupervisor' et le rôle 'dbuser'.
    d) nous créons les utilisateurs 'gordon' et 'patron'.
    e) nous attribuons le rôle 'dbsupervisor' à 'patron' et 'dbuser' à gordon'.
    f) nous avons trois utilisateurs : le propriétaire 'artemus', l'utilisateur 'gordon' en lecture seule et l'utilisateur 'patron' avec tous les privilèges sauf celui d'administrateur.

    Nous allons maintenant tester nos trois utilisateurs !

    3) accès avec l'utilisateur 'gordon'.
    Nous testons l'accès en lecture seulement.

    Le script batch windows contient les modifications suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'gordon'  -role 'dbuser'  -user 'gordon'  '..\Data\Base.fdb'
    Et voici l'exécution du script '.sql' :
    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
    SHOW USERS;
    Users in the database
      1 #GORDON
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
    insert into test (id,lib) values (4, 'quatre');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 3 in file 4.Test.sql
    insert into test (id,lib) values (5, 'cinq');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 5 in file 4.Test.sql
    insert into test (id,lib) values (6, 'six');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 6 in file 4.Test.sql
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
    drop database;
    Statement failed, SQLSTATE = 28000
    no permission for drop access to database E:\23.FIREBIRD\32.PRIVILÈGES\DATA\BASE.FDB
    After line 9 in file 4.Test.sql
     
    quit;
     
    Appuyez sur une touche pour continuer...
    L'utilisateur 'gordon' peut lire le contenu de la table 'test', mais pas y insérer des lignes et encore moins détruire la base de données.

    4) accès avec l'utilisateur 'patron'.
    Nous testons l'accès avec tous les privilèges sur la base de données sauf celle d'administration.

    Le script batch windows contient les modifications suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'patron'  -role 'dbsupervisor'  -user 'patron'  '..\Data\Base.fdb'
    Et voici l'exécution du script '.sql' :
    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
    SHOW USERS;
    Users in the database
      1 #PATRON
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
    insert into test (id,lib) values (4, 'quatre');
    insert into test (id,lib) values (5, 'cinq');
    insert into test (id,lib) values (6, 'six');
     
    delete from test where id=3;
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               4 quatre
               5 cinq
               6 six
     
    drop database;
    Statement failed, SQLSTATE = 28000
    no permission for drop access to database E:\23.FIREBIRD\32.PRIVILÈGES\DATA\BASE.FDB
    After line 11 in file 5.Test.sql
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Comme prévue, l'utilisateur 'gordon' peut lire, insérer et supprimer des lignes dans la table. Par contre, il ne peut pas détruire la base de données.
    Cela va de soi car il n'est ni administrateur, ni propriétaire de la base de données.

    5) accès avec l'utilisateur 'artemus'.
    L'utilisateur 'artemus' peut tout faire, même détruire la base de données.

    Le script batch windows contient les modifications suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'artemus'  -role 'rdb$admin'  -user 'artemus'  '..\Data\Base.fdb'
    Et voici l'exécution du script '.sql' :
    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
    SHOW USERS;
    Users in the database
      1 #ARTEMUS
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
    insert into test (id,lib) values (4, 'quatre');
    insert into test (id,lib) values (5, 'cinq');
    insert into test (id,lib) values (6, 'six');
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
               4 quatre
               5 cinq
               6 six
     
    drop database;
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Rien de surprenant, il est le propriétaire de la base de données.

    Dans ce test, on remarque que je n'ai à aucun instant utiliser le compte 'sysdba' pour faire les manipulations.
    Mais pour attribuer des privilèges, j'ai dû mettre le compte 'artemus' en tant qu'administrateur de ma base de données.
    Le fait qu'il soit déjà propriétaire ne m'a pas permis d'être autorisé d'ajouter de nouvelles permissions.

    J'espère que cet exemple va vous aider à mettre les privilèges que vous désirez dans votre base de données.

    Il se peut qu'il y ait une autre approche que la mienne, à savoir mettre le compte propriétaire en tant qu'administrateur.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonsoir à tous,

    Merci makowski de ne rien lacher.

    Sous Windows, le setup propose les réglages
    J'ai installé Firebird 3.0 avec le fichier exe en 64 bits par défaut c'est-à-dire en super server mode (j'ai regardé le lien que tu donnes et par défaut les options "AuthServer" et "AuthClient" dont tu parles ne sont pas activées dans le "Firebird.conf").

    tes outils ne sont peut être capables que de gérer le mode "Legacy_Auth"
    Effectivement, c'est pour cela que j'ai fait des essais avec le ISQL fourni dans le répertoire d'installation de Firebird dans ma réponse précédente.

    cela n'a pas de sens avec Firebird 3, puisque que tu peux maintenant créer les utilisateurs dans la base.
    créer une role SYSDBA a toujours été un mauvais hack inutile et inefficace et avec Firebird 3. complétement inutile.
    Cela veut dire que tu confirmes mon hypothèse qu'avec la version 3.0 c'est différent et que même si on prend le test.fdb sur un autre serveur firebird fraichement installé il ne pourra pas être ouvert avec le classique sysdba / masterkey ?

    Merci encore pour ton aide et en attendant je vais essayer de créer une nouvelle base de données depuis zéro directement en ISQL pour voir si ça change quelque chose.

    A plus tard le forum et n'hésitez pas à témoigner si vous avez essayez la même chose en version 3 afin de vérifier que ce n'est pas que ma configuration.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup Artemus24 pour ta contribution.

    Je vais passer du temps à bien analyser ta réponse et faire de multiples tests et je reviendrais vers le forum pour dire ce qu'il est en est.
    J'étais en train de répondre et je n'ai pas vu ta réponse avant de publier.

    Encore merci pour ta contribution et bonne nuit.

  9. #9
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut à tous.

    Je viens de corriger quelques erreurs de retranscription dans mon dernier message.

    D'après votre post #, DelphiCode, je ne sais pas ce que représente votre compte "administrateur".
    Ce n'est pas parce qu'il se nomme ainsi qu'il est obligatoirement administrateur.

    De plus, le fait de mettre "role rdb$admin" à un compte, ne le rend pas pour autant administrateur.
    Pour ce faire, il vous faut être administrateur, en utilisant par exemple le compte "sysdba".
    Et ensuite, attribuer le nouveau compte "administrateur" au role "rdb$admin", comme je l'ai fait lors de la création de la base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant rdb$admin to artemus;
    Mais il y a une grande différence entre ce que je viens de dire et ce que je fais dans le premier script sql.
    "artemus" est un compte qui n'existe pas, mais devient automatiquement propriétaire de la base de données.
    Et vu que je suis propriétaire de cette base de données, je peux me permettre de devenir administrateur de cette base de données.
    Autrement dit, ces droits ne viennent pas par attribution d'un autre compte administrateur, mais par le simple fait d'être propriétaire de cette base de données.

    Si le compte "artemus" était administrateur, je devrais le créer ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create user artemus password 'artemus' grant admin role
    et pour pouvoir exécuter cette ligne, je devrais être au préalable sous le compte sysdba.
    Or ce n'est pas le cas, d'où mon interrogation sur ce que représente effectivement le rôle d'administrateur du compte "artemus".

    Je ne l'ai pas testé, mais je me demande si le compte "artemus" propriétaire et administrateur de cette base de données, peut éventuellement modifier une autre base de données, s'il n'est ni le propriétaire ni référencé en tant qu'accès ?

    C'est la définition d'administrateur au sein de FireBird qui me pose quelques problèmes de compréhension.
    Est-ce une notion qui est globale à tout le SGBD Firebird ou est-ce une notion toute relative à la base de données auquel il est rattaché ?
    Il semble que le cas du compte sysdba ait un fonctionnement différent.

    Une autre question, est comment renommer le compte sysdba. On peut facilement modifier son mot de passe, mais je n'ai rien trouvé sur le changement de son nom.
    Mes interrogations se portent plus sur le compte "sysdba" et la façon dont il gère le SGBD Firebird !

    A vrai dire, je profite de ce sujet pour tenter de résoudre les problèmes de sécurités de Firebird, en améliorant ma compréhension de ce compte principal administrateur.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous,

    Merci Artemus24 pour ton intérêt, pas là ce weekend et début de semaine chargé. Du coup je prends connaissance du dernier post juste maintenant et je réponds en vitesse mais je n'ai pas eu le temps d'étudier ta solution mais je vais le faire dans la semaine.

    D'après votre post #, DelphiCode, je ne sais pas ce que représente votre compte "administrateur".
    Ce n'est pas parce qu'il se nomme ainsi qu'il est obligatoirement administrateur.

    De plus, le fait de mettre "role rdb$admin" à un compte, ne le rend pas pour autant administrateur.
    Pour ce faire, il vous faut être administrateur, en utilisant par exemple le compte "sysdba".
    Et ensuite, attribuer le nouveau compte "administrateur" au role "rdb$admin", comme je l'ai fait lors de la création de la base de données.
    grant rdb$admin to artemus;
    C'est bien ce que j'ai fait (si tu relis mon premier post je crois bien en avoir parlé mais c'est peut-être mal expliqué ). Depuis une base de données vierge avec le compte sysdba, j'ai créé un compte "ADMINISTRATEUR" avec les droits d'admin et puis seulement après je me suis reconnecté à cette même base avec mon nouveau compte "ADMINISTRATEUR" et avec le role "RD$ADMIN" pour faire tous mes tests.

    C'est la définition d'administrateur au sein de FireBird qui me pose quelques problèmes de compréhension.
    Est-ce une notion qui est globale à tout le SGBD Firebird ou est-ce une notion toute relative à la base de données auquel il est rattaché ?
    Il semble que le cas du compte sysdba ait un fonctionnement différent.

    Une autre question, est comment renommer le compte sysdba. On peut facilement modifier son mot de passe, mais je n'ai rien trouvé sur le changement de son nom.
    Mes interrogations se portent plus sur le compte "sysdba" et la façon dont il gère le SGBD Firebird !

    A vrai dire, je profite de ce sujet pour tenter de résoudre les problèmes de sécurités de Firebird, en améliorant ma compréhension de ce compte principal administrateur.
    Je crois que l'esprit des forums est fait pour cela et ça tombe bien puisque moi aussi je cherche à mieux comprendre l'aspect sécurité de cette version 3.0 et le nouveau comportement de sysdba.

    Bonne après-midi et à plus.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonsoir le forum,

    Je viens de commencer de tester ton script Artemus24 et je rencontre un problème à l'étape 2 (attribution des privillèges) comme tu peux le voir dans le résultat d'exécution du script ci-dessous:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') from rdb$database;
     
    RDB$GET_CONTEXT
     
     
     
    ===============================================================================
     
    3.0.0
     
     
     
     
     
    SHOW VERSION;
    ISQL Version: WI-V3.0.0.32483 Firebird 3.0
    Server version:
    Firebird/Windows/AMD/Intel/x64 (access method), version "WI-V3.0.0.32483 Firebir
    d 3.0"
    on disk structure version 12.0
     
    create                role dbsupervisor;
    grant  all on test to role dbsupervisor;
     
    create                   role dbuser;
    grant  select on test to role dbuser;
     
    create user patron  password 'patron';
    Statement failed, SQLSTATE = 28000
    add record error
    -no permission for INSERT access to TABLE PLG$SRP_VIEW
    After line 35 in file Creation.sql
     
    grant dbsupervisor to patron WITH ADMIN OPTION;
     
    create user gordon  password 'gordon';
    Statement failed, SQLSTATE = 28000
    add record error
    -no permission for INSERT access to TABLE PLG$SRP_VIEW
    After line 39 in file Creation.sql
     
    grant dbuser to gordon;
     
    commit;
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON TEST TO ROLE DBSUPERVISOR
    GRANT SELECT ON TEST TO ROLE DBUSER
    GRANT DBSUPERVISOR TO PATRON WITH ADMIN OPTION
    GRANT DBUSER TO GORDON
    GRANT RDB$ADMIN TO ARTEMUS
     
    SHOW USERS;
    Users in the database
      1 #ARTEMUS
     
    select * from rdb$roles;
     
    RDB$ROLE_NAME                   RDB$OWNER_NAME                    RDB$DESCRIPTIO
    N RDB$SYSTEM_FLAG RDB$SECURITY_CLASS
    =============================== =============================== ================
    = =============== ===============================
    RDB$ADMIN                       ARTEMUS                                    <null
    >               1 <null>
    DBSUPERVISOR                    ARTEMUS                                    <null
    >               0 <null>
    DBUSER                          ARTEMUS                                    <null
    >               0 <null>
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    En fait la création des utilisateurs pose problème comme tu peux le voir mais en revanche je n'ai pas de problème avec les rôles apparemment ...
    Je crois (d'après le résultat de ton script) que tu possèdes la même version que moi et en 64 bits alors je trouve bizarre que le script fonctionne chez toi et pas chez moi ? Pourrais-tu me dire si tu as quelque chose de spécifique par rapport à ma configuration d'après les éléments que j'ai fourni dans une de mes précédentes réponses ?

    Je vais maintenant essayer de gratter un peu plus la partie "méthode d'authentification" pour voir si j'arrive à résoudre ce problème d'erreur.

    A plus

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonjour le forum,

    Je continu d'avancer sur mon problème, je viens de faire une série de tests qui s'avèrent les mêmes que ce soit en 32 ou en 64 bits (j'ai essayé les 2).
    J'ai supprimé toutes les bases de données que j'avais et j'en ai créé une directement en ISQL et voici les différents tests que j'ai réalisé :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'C:\test.fdb' page_size 4096 user sysdba password 'masterkey';
    SQL> create user tata password 'tata' grant admin role;
    SQL> create user toto password 'toto' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'TOTO')
    SQL> create user titi password 'titi' grant admin role;
    SQL> create user tutu password 'tutu' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'TUTU')
    SQL> create user administrateur password 'administrateur' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'ADMINISTRATEUR')
    SQL> show users;
    Users in the database
      0  A                                   0  AD
      0  ADM                                 0  ADMI
      0  ADMINI                              0  ADMINIS
      0  ADMINIST                            0  ADMINISTR
      0  ADMINISTRA                          0  ADMINISTRAT
      0  ADMINISTRATE                        0  ADMINISTRATEU
      0  ADMINISTRATEUR                      0  ADMINISTRATEURS
      0  ADMINISTRATOR                       0  ADMINISTRATORS
      1 #SYSDBA                              0  TATA
      0  TITI                                0  TOTO
      0  TUTU                                0  VIVI
    SQL> show grant;
    There is no privilege granted in this database
    SQL> grant rdb$admin to titi;
    SQL> show grant;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO TITI
    SQL> connect 'C:\test.fdb' user titi password 'titi' role rdb$admin;
    Commit current transaction (y/n)?y
    Committing.
    Database: 'C:\test.fdb', User: TITI, Role: RDB$ADMIN
    SQL> create role test;
    SQL> create user vivi password 'vivi' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'VIVI')
    SQL> create user vuvu password 'vuvu' grant admin role;
    SQL> show users;
    Users in the database
      0  A                                   0  AD
      0  ADM                                 0  ADMI
      0  ADMINI                              0  ADMINIS
      0  ADMINIST                            0  ADMINISTR
      0  ADMINISTRA                          0  ADMINISTRAT
      0  ADMINISTRATE                        0  ADMINISTRATEU
      0  ADMINISTRATEUR                      0  ADMINISTRATEURS
      0  ADMINISTRATOR                       0  ADMINISTRATORS
      0  SYSDBA                              0  TATA
      1 #TITI                                0  TOTO
      0  TUTU                                0  VIVI
      0  VUVU
    SQL> show grant;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO TITI
    SQL>
    Quelques explications :
    • Je crée d'abord la base de données avec le compte sysdba classiquement


    • Ensuite j'essaye de créer toute une série d'utilisateurs avec les droits d'administrateur. On constate une série d'erreur pour certains et pas pour d'autres ! J'ai essayé cette même série en 32 et 64 bits et plusieurs fois sur chacun et je m'aperçois que les erreurs sont aléatoires pas forcément sur les mêmes à chaque fois ! Mais malgré le message d'erreur ils sont apparemment créés puis que la commande "show users;" me les affichent.


    • Surprise suivante : il apparaît aussi des utilisateurs des tests de hier soir (alors que j'ai supprimé toutes les bases de données) -> @makowski : il me semblait avoir compris de ta part que les utilisateurs étaient maintenant stockés dans la base de données ? j'ai surement mal compris ?


    • Autre surprise : le "show grant " ne m'affiche rien pourtant j'ai utilisé "create user titi password 'titi' grant admin role" ? En revanche comme on peut le voir si je fais "grant rdb$admin to titi;" ça à l'air de fonctionner ? ? ?


    • Comme on peut le voir dans la deuxième partie, après avoir réussi à créer un utilisateur et lui avoir donné les droits admin je peux me connecter avec celui-ci et faire ce que je veux à savoir "create role" et créer de nouveaux utilisateurs admin mais là encore la création des utilisateurs est chaotique et aléatoire ....


    Dernier point : makowski m'avait dit de regarder la méthode d'authentification mais mis à part dans le fichier "firebird.conf" ou "databases.conf" je ne vois pas trop ou cela peut-être employé ? Voici mes 2 fichiers de conf :

    firebird.conf
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    816
    817
    818
    819
    820
    821
    822
    823
    824
    825
    826
    827
    828
    829
    830
    831
    832
    833
    834
    835
    836
    837
    838
    839
    840
    841
    842
    843
    844
    845
    846
    847
    848
    849
    850
    851
    852
    853
    854
    855
    856
    857
    858
    859
    860
    861
    862
    863
    864
    865
    866
    867
    868
    869
    870
    871
    872
    873
    874
    875
    876
    877
    878
    879
    880
    881
    882
    883
    884
    885
    886
    887
    888
    889
    890
    891
    #########################################
    #
    # Firebird version 3.0 configuration file
    #
    # Comments
    # --------
    # The # character is used for comments and can be placed anywhere on a
    # line.  Anything following the # character on a line is considered a
    # comment.
    #
    # Examples:
    #
    #    # This is a comment
    #    DefaultDbCachePages = 2048   # This is an end-of-line comment
    #
    # Entries
    # -------
    # The default value for each entry is listed to the right of the "=".
    # To activate an entry, remove the leading "#"s and supply the desired
    # value.
    #
    # Please note, by default a number of the values are specified in **Bytes** (Not KB).
    # You may add obvious abbreviations k, m and g in the end of a number to specify
    # kilobytes, megabytes and gigabytes.
    #
    # There are three types of configuration values: integer, boolean and string.
    #
    # Integer
    # -------
    # Integers is what they sound like, an integral value. Examples:
    #   1
    #   42
    #   4711
    #   24M        # 24 * 1024 * 1024
    #
    # Boolean
    # -------
    # Boolean is expressed as integer values with 0 (zero) being "false" and
    # non-zero is taken to mean "true". For consistency we recommend you
    # only use 0/1. Also strings 'y', 'yes' and 'true' stand for "true".
    #
    # String
    # ------
    # Strings are also what they sound like, strings. Examples:
    #   RemoteServiceName = gds_db
    #   RemotePipeName = pipe47
    #
    # Scopes
    # ------
    # Some parameters are marked as per-database / per-connection configurable.
    # Per-database configuration is done in file databases.conf (former aliases.conf).
    # Per-connection configuration is primarily client tool and done using
    # isc_dpb_config parameter in DPB (isc_spb_config for services).
    # Notice that per-database entries also may be tuned using DPB in case of
    # embedded engine when attaching to database first time.
    #
    # Macro substitution
    # ------------------
    # There is a number of predefined macro commands, that can be used in config
    # files where directory name is needed. They are available using $(name) syntax.
    # The complete list of them as follows:
    #    root - root directory of firebird instance
    #    install - directory where firebird is installed
    #    this - directory where current configuration file is located
    #    dir_conf - directory where firebird.conf and databases.conf are located
    #    dir_secDb - directory where default security database is located
    #    dir_plugins - directory where plugins are located
    #    dir_udf - directory where UDFs are located by default
    #    dir_sample - directory where samples are located
    #    dir_sampleDb - directory where sample DB (employee.fdb) is located
    #    dir_intl - directory where international modules are located
    #    dir_msg - directory where messages file (firebird.msg) is located
    # Like the rest of config internals macros are case-insensitive.
    # Capital letters here are used only for better human readability.
    #
    #
    # Includes
    # --------
    # One can include one config file into another one.
    # When relative path is used, it's treated relative to current config file.
    # I.e. when
    #    include some_file.conf
    # is used in /opt/config/master.conf, we include /opt/config/some_file.conf.
    # Traditional wildcards * and ? may be used in include operator. In this case
    # all matching files will be included in undefined order. Example:
    #    include $(dir_plugins)/config/*.conf
    #
    # Portions of this file have been reproduced/made available with the
    # permission of Ann Harrison @ IBPhoenix.
    #
    #########################################
     
     
    # ----------------------------
    # Database Paths/Directories
    #
    # DatabaseAccess may be None, Full or Restrict. If you choose Restrict,
    # provide ';'-separated trees list, where database files are stored.
    # Relative paths are treated relative to the root directory of firebird.
    # Default value 'Full' gives full access to all files on your site.
    # To specify access to specific trees, enum all required paths 
    # (for Win32 this may be something like 'C:\DataBase;D:\Mirror',
    # for unix - '/db;/mnt/mirrordb'). If you choose 'None', then only
    # databases listed in databases.conf can be attached.
    #
    # Note: simple quotation marks shown above should *NOT* be used when
    # specifying values and directory path names. Examples:
    #
    # DatabaseAccess = None
    # DatabaseAccess = Restrict C:\DataBase
    # DatabaseAccess = Restrict C:\DataBase;D:\Mirror
    # DatabaseAccess = Restrict /db
    # DatabaseAccess = Restrict /db;/mnt/mirrordb
    # DatabaseAccess = Full
    #
    # UNCONTROLLED DATABASE ACCESS MAY COMPROMISE YOUR SYSTEM!
    # IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
    # DATABASE LOCATIONS!
    #
    # Type: string (special format)
    #
    #DatabaseAccess = Full
     
     
    # ----------------------------
    # Ability to access databases remotely
    #
    # RemoteAccess may be true or false (1/0, Yes/No) - it's boolean value.
    # By default RemoteAccess to all databases except security DB is enabled.
    # If you plan to use more than one dedicated security database it's
    # recommended to disable remote access to them in databases.conf.
    # However (as an additional method to have secure enhanced firebird
    # installation) one can disable remote access globally and re-enable
    # in databases.conf only for specific databases.
    #
    # Per-database configurable.
    #
    # Type: boolean
    #
    #RemoteAccess = true
     
     
    # ----------------------------
    # External File Paths/Directories
    #
    # ExternalFileAccess may be None, Full or Restrict. If you choose
    # Restrict, provide ';'-separated trees list, where external files
    # are stored. Relative paths are treated relative to the root directory 
    # of firebird. Default value 'None' disables any use of external files
    # on your site. To specify access to specific trees, enum all required
    # paths (for Win32 this may be something like 'C:\ExternalTables',
    # for unix - '/db/extern;/mnt/extern').
    #
    # Per-database configurable.
    #
    # NOTE: THE EXTERNAL TABLE ENGINE FEATURE COULD BE USED TO COMPROMISE
    # THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
    #
    # IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
    # EXTERNAL TABLE LOCATIONS!
    #
    # Type: string (special format)
    #
    #ExternalFileAccess = None
     
     
    # ----------------------------
    # External Function (UDF) Paths/Directories
    #
    # UdfAccess may be None, Full or Restrict. If you choose
    # Restrict, provide ';'-separated trees list, where UDF libraries
    # are stored. Relative paths are treated relative to the root directory 
    # of firebird.
    #
    # Default value 'Restrict UDF' provides the same restrictions
    # as in FB 1.0. To specify access to specific trees, enum all required
    # paths (for Win32 this may be something like 'C:\ExternalFunctions',
    # for unix - '/db/extern;/mnt/extern').
    #
    # NOTE: THE EXTERNAL FUNCTION ENGINE FEATURE COULD BE USED TO COMPROMISE
    # THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
    #
    # IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
    # EXTERNAL FUNCTION LOCATIONS!
    #
    # Type: string (special format)
    #
    #UdfAccess = Restrict UDF
     
     
    # ----------------------------
    # Temporary directories
    #
    # Provide ';'-separated trees list, where temporary files are stored.
    # Relative paths are treated relative to the root directory of firebird.
    # Default value is determined using FIREBIRD_TMP, TEMP or TMP 
    # environment options. Once the first specified directory has no 
    # available space, the engine will switch to the next one, and so on.
    #
    # E.g.:
    # TempDirectories = c:\temp
    # or
    # TempDirectories = c:\temp;d:\temp
    #
    # Type: string (special format)
    #
    #TempDirectories =
     
     
    # ----------------------------
    # Trace configuration file for system audit
    #
    # Empty value means that system audit is turned off.
    #
    # Type: string
    #
    #AuditTraceConfigFile =
     
    # ----------------------------
    # Maximum summary size of each user trace session's log files in MB.
    # When log files size reach this limit, trace session automatically 
    # suspends until interactive user service read and delete some log files.
    #
    # Type: integer
    #
    #MaxUserTraceLogSize = 10
     
     
    # ----------------------------
    # Number of cached database pages
    #
    # This sets the number of pages from any one database that can be held
    # in cache at once. If you increase this value, the engine will
    # allocate more pages to the cache for every database. By default, the
    # SuperServer allocates 2048 pages for each database and the classic
    # allocates 256 pages per client connection per database.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #DefaultDbCachePages = 2048
     
    # ----------------------------
    # Disk space preallocation
    #
    # Sets the amount of preallocated disk space in bytes. Disk space
    # preallocation allows to reduce physical file fragmentation and to make 
    # database work in out of disk space condition. With preallocation enabled,
    # engine allocates 1/16nth of already allocated disk space at a time but 
    # not less than 128KB and no more than DatabaseGrowthIncrement (128MB by 
    # default). To disable preallocation set DatabaseGrowthIncrement to zero.
    # Shadow database files are not preallocated.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #DatabaseGrowthIncrement = 128M
     
    # ----------------------------
    # File system cache threshold
    #
    # The threshold value that determines whether Firebird will use file system
    # cache or not. File system caching is used if database cache size in pages 
    # (configured explicitly in database header or via DefaultDbCachePages setting)
    # is less than FileSystemCacheThreshold value.
    #
    # To use file system cache always set FileSystemCacheThreshold to a large value.
    # To bypass file system cache for all databases set FileSystemCacheThreshold to 
    # zero.
    # 
    # Type: integer, measured in database pages
    #
    # Per-database configurable.
    #
    #FileSystemCacheThreshold = 64K
     
    # ----------------------------
    # File system cache size
    #
    # This setting controls the maximum amount of RAM used by Windows file system
    # cache on 64-bit Windows XP, Windows Server 2003 SP1 or later host. It has no
    # effect for Unix hosts in this release yet.
    #
    # Note that the lowest number presently supported is 10%, and the highest number
    # is 95%; numbers outside these limits will be set to the default of 30%.
    #
    # If the cache size has already been selected when the engine starts the host
    # setting will not be changed. Thus you may need to reboot the host for the
    # change of this setting to have effect.
    #
    # To leave host caching settings unchanged set this parameter to 0. This is
    # the default parameter value.
    #
    # Security note
    # To adjust the setting engine needs SeIncreaseQuotaPrivilege right. Built-in
    # service accounts and administrators have it by default. Installer grants this
    # right to Firebird service account. If the engine fails to adjust the cache 
    # size setting it will log warning message to the firebird.log and continue.
    #
    # Type: integer, measured in % of total physical RAM
    #
    #FileSystemCacheSize = 0
     
    # ----------------------------
    # Remove protection against opening databases on NFS mounted volumes on
    # Linux/Unix and SMB/CIFS volumes on Windows.
    #
    # This also permits creating database shadows on mounted network volumes.
    #
    #     ***WARNING*** ***WARNING*** ***WARNING*** ***WARNING***
    #
    # This option removes an important safety feature of Firebird and can
    # cause irrecoverable database corruption. Do not use this option unless
    # you understand the risks and are prepared to accept the loss of the
    # contents of your database.
    # Unless this configuration option is changed from 0 to 1, Firebird can
    # open a database only if the database is stored on a drive physically
    # attached to the local computer - the computer running that copy of
    # Firebird. Requests for connections to databases stored on NFS mounted
    # drives are redirected to a Firebird server running on the computer that
    # "owns" the disk.
    # This restriction prevents two different copies of Firebird from opening
    # the same database without coordinating their activities. Uncoordinated
    # access by multiple copies of Firebird will corrupt a database. On a local
    # system, the system-level file locking prevents uncoordinated access to
    # the database file.
    #
    # NFS does not provide a reliable way to detect multiple users of a file on
    # an NFS mounted disk. If a second copy of Firebird connects to a database on
    # an NFS mounted disk, it will corrupt the database.
    # Under some circumstances, running a Firebird server on the computer that
    # owns NFS mounted volumes is inconvenient or impossible. Applications that
    # use the "embedded" variant of Firebird and never share access to a database
    # can use this option to permit direct access to databases on NFS mounted
    # volumes.
    #
    # The situation for SMB/CIFS is quite similar to NFS with not all configurations
    # providing file locking mechanisms needed for safe operation. Using SuperServer
    # engine with the database on NT file server may be considered relatively safe 
    # as file locking protects the database from being used by the several engines.
    # Network stack can still change order of writes so you may get a corrupted
    # database in case of network errors or power outage.
    #
    # The useful and safe case is working with a shared database marked read-only.
    #
    # DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING.
    #
    # Type: boolean
    #
    #RemoteFileOpenAbility = 0
     
    # ----------------------------
    # Temporary space management
    #
    # Temporary storage is used by the sorting module, it's also
    # intended to store temporary datasets etc.
    #
    # The parameters below handle the allocation and caching policy
    # for the temporary space manager. In previous Firebird versions,
    # they were prefixed with "SortMem" instead of current "Temp".
    #
    # The smallest block size being allocated in the temporary storage.
    # This value reflects the allocation granularity.
    #
    # Type: integer
    #
    #TempBlockSize = 1M
     
    #
    # The maximum amount of the temporary space that can be cached
    # in memory.
    #
    # For Classic servers, this setting is defaulted to 8 MB.
    # Although it can be increased, the value applies to each client
    # connection/server instance and thus consumes a lot of memory.
    #
    # Type: integer
    #
    #TempCacheLimit = 64M
     
     
    # ----------------------------
    #
    # This group of parameters determines what plugins will be used by firebird.
    # Format of string is the list of plugins, separated by space, ',' or ';'.
    # Plugins will be tried in an order, specified here.
    # In many cases correct order is important!
    #
    # Type: string
     
    # AuthServer and AuthClient determine what authentication methods will be used
    # by network server and client redirector. Secure remote passwords plugin
    # is default one. Except configured by default SRP plugin firebird also has
    # Legacy_Auth plugin which is used to emulate pre-FB3 login protocol making it
    # possible for client to talk to old servers and for server to listen to requests
    # from old clients. Legacy_Auth is VERY unsecure. On windows Win_Sspi plugin may
    # be also used - it implements windows trusted authentication and backward
    # compatible with 2.1 and 2.5 clients and servers running on windows.
    #
    # Per-database configurable.
    #
    #AuthServer = Srp
    #
    # Per-connection and per-database configurable.
    #
    #AuthClient = Srp, Win_Sspi, Legacy_Auth
    #
    # If you need to use server plugins that do not provide encryption key (both Legacy_Auth
    # & Win_Sspi) you should also turn off required encryption on the wire with WireCrypt
    # configuration parameter except when working with the XNET protocol which is never encrypted.
    #
     
    # UserManager sets plugin used to work with security database. If more than
    # one plugin is given, first plugin from the list is used by default. If you 
    # need to manage legacy logins using legacy tools set it to Legacy_UserManager.
    # Other managers may be chosen in create/alter/drop user commands.
    #
    # Per-database configurable.
    #
    #UserManager = Srp
     
    # TracePlugin is used by firebird trace facility to send trace data to the user
    # or log file in audit case.
    #
    #TracePlugin = fbtrace
     
    # Wire crypt plugins are used to crypt data transferred over the wire.
    # In default case wire is encrypted using Alleged RC4
    # (key must be generated by auth plugin).
    #
    # Per-connection configurable.
    #
    #WireCryptPlugin = Arc4
     
    # Key holder is a kind of temp storage for DB crypt keys.
    # There is no default for this kind of plugins.
    #
    #KeyHolderPlugin =
     
     
    # ----------------------------
    #
    # This parameter determines what providers will be used by firebird.
    # Format is the same as for the list of plugins (see a few lines before).
    # This is not strange because internally provider is just a kind of plugin.
    #
    # Type: string
    #
    # Per-database & per-connection configurable.
    #
    #Providers = Remote,Engine12,Loopback
     
     
    # ----------------------------
    #
    # Determines the number of seconds that the lock manager will wait after a
    # conflict has been encountered before purging locks from dead processes
    # and doing extra deadlock scan cycle. Engine detects deadlocks instantly
    # in all normal cases, so this value affects things only if something goes
    # wrong. Setting it too low may degrade system performance.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #DeadlockTimeout = 10
     
     
    # ----------------------------
    #
    # How often the pages are flushed on disk
    # (for databases with ForcedWrites=Off only)
    #
    # Number of unflushed writes which will accumulate before they are
    # flushed, at the next transaction commit.  For non-Win32 ports,
    # the default value is -1 (Disabled)
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #MaxUnflushedWrites = 100
     
    #
    # Number of seconds during which unflushed writes will accumulate
    # before they are flushed, at the next transaction commit. For non-Win32
    # ports, the default value is -1 (Disabled)
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #MaxUnflushedWriteTime = 5
     
     
    # ----------------------------
    #
    # This option controls whether to call abort() when internal error or BUGCHECK
    # is encountered thus invoke post-mortem debugger which can dump core suitable
    # for off-line analysis. When disabled engine tries to minimize damage and
    # continue execution.
    #
    # Note that setting this option to 1 makes engine produce traceable coredumps
    # when something nasty like SIGSEGV happens inside UDF. On Windows enabling
    # this option makes engine invoke JIT debugger facilities when errors happen.
    #
    # For debugging builds (DEV_BUILD), default value is 1 (Enabled)
    #
    # Type: boolean
    #
    #BugcheckAbort = 0
     
     
    # ----------------------------
    # Relaxing relation alias checking rules in SQL
    #
    # Since Firebird 2.0, strict alias checking rules were implemented in the SQL
    # parser to accord with the SQL standard requirements. This setting allows
    # these rules to be relaxed in order to allow legacy applications to run on 
    # Firebird 2.0.
    # A setting of 1 (true) allows the parser to resolve a qualified column reference 
    # using the relation name, where an alias has been specified for that relation.
    #
    # For example, it allows a query such as:
    #       SELECT TABLE.X FROM TABLE A
    #
    # It is not recommended to enable this setting. It should be regarded as an 
    # interim workaround for porting untidy legacy code, until it is practicable to 
    # revise such code. 
    # 
    # CAUTION!
    # There is no guarantee that this setting will be available in future Firebird 
    # versions.
    #
    # Type: boolean
    #
    #RelaxedAliasChecking = 0
     
     
    # ----------------------------
    # Client Connection Settings (Basic)
    #
    # Seconds to wait before concluding an attempt to connect has failed.
    #
    # Per-connection configurable.
    #
    # Type: integer
    #
    #ConnectionTimeout = 180
     
    #
    # Should connection over the wire be encrypted?
    # Has 3 different values: Required, Enabled or Disabled. Enabled behavior
    # depends on the other side's requirements. If both sides are set to Enabled,
    # the connection is encrypted when possible. Note that Wirecrypt should be set 
    # to Enabled when running a Firebird server with legacy authentication.
    #
    # Attention: default depends upon connection type: incoming (server)
    #            or outgoing (client).
    #
    # Per-connection configurable.
    #
    # Type: string (predefined values)
    #
    #WireCrypt = Enabled (for client) / Required (for server)
     
    #
    # Should connection over the wire be compressed?
    # Client only value - server should follow client setting if connect using
    # correct protocol (>=13).
    #
    # Per-connection configurable.
    #
    # Type: boolean
    #
    #WireCompression = false
     
    #
    # Seconds to wait on a silent client connection before the server sends
    # dummy packets to request acknowledgment.
    #
    # NOTE. This option may hang or crash Windows NT4 or Windows 2000 pre SP3 
    # on the client side as explained here: 
    # http://support.microsoft.com/default.aspx?kbid=296265.
    # or may not prevent eventual inactive client disconnection for other OS.
    #
    # Normally, Firebird uses SO_KEEPALIVE socket option to keep track of
    # active connections. If you do not like default 2-hour keepalive timeout
    # then adjust your server OS settings appropriately. On UNIX-like OS's,
    # modify contents of /proc/sys/net/ipv4/tcp_keepalive_*. On Windows,
    # follow instrutions of this article:
    # http://support.microsoft.com/default.aspx?kbid=140325
    #
    # Per-connection configurable.
    #
    # Type: integer
    #
    #DummyPacketInterval = 0
     
     
    # ----------------------------
    # TCP Protocol Settings
    #
    # The TCP Service name/Port number to be used for client database
    # connections.
    #
    # It is only necessary to change one of the entries, not both.  The
    # order of precendence is the 'RemoteServiceName' (if an entry is
    # found in the 'services.' file) then the 'RemoteServicePort'.
    #
    # Per-connection configurable.
    #
    # Type: string, integer
    #
    #RemoteServiceName = gds_db
    #RemoteServicePort = 3050
     
    #
    # The TCP Port Number to be used for server Event Notification
    # messages.  The value of 0 (Zero) means that the server will choose
    # a port number randomly.
    #
    # Per-connection configurable.
    #
    # Type: integer
    #
    #RemoteAuxPort = 0
     
    #
    # TCP/IP buffer size for send and receive buffers of both the client
    # and server. The engine reads ahead of the client and can send
    # several rows of data in a single packet. The larger the packet size,
    # the more data is sent per transfer. Range is 1448 to 32767 (MAX_SSHORT).
    #
    # Type: integer
    #
    #TcpRemoteBufferSize = 8192
     
    #
    # Either enables or disables Nagle algorithm (TCP_NODELAY option of
    # socket) of the socket connection.
    #
    # Note: Currently is a default for classic and super servers.
    #
    # Per-connection configurable.
    #
    # Type: boolean
    #
    #TcpNoNagle = 1
     
    #
    # Allows setting of IPV6_V6ONLY socket option. If enabled, IPv6 sockets
    # allow only IPv6 communication and separate sockets must be used for
    # IPv4 and IPv6. Default is false.
    #
    # Note: on Windows, the socket option can only be set since Windows Vista,
    # older versions have it always enabled.
    #
    # Type: boolean
    #
    #IPv6V6Only = 0
     
    #
    # Allows incoming connections to be bound to the IP address of a
    # specific network card. It enables rejection of incoming connections
    # through any other network interface except this one. By default,
    # connections from any available network interface are allowed.
    # If you are using Classic Server, this setting is for Windows only.
    # Under Linux, BSD or Mac OS X, with Classic server use xinetd or launchd
    # configuration file (bind parameter).
    #
    # Type: string
    #
    #RemoteBindAddress =
     
     
    # ----------------------------
    # Locking and shared memory parameters
    #
    # Bytes of shared memory allocated for lock manager.
    # In Classic mode, the size given is used for the initial allocation. The
    # table expands dynamically up to the limit of memory.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #LockMemSize = 1M
     
    #
    # In Classic, only one client process may access the lock table at any
    # time. Access to the lock table is governed by a mutex. The mutex can
    # be requested conditionally - a wait is a failure and the request must
    # be retried - or unconditionally - the request will wait until it is
    # satisfied. This parameter establishes the number of attempts that
    # will be made conditionally. Zero value means unconditional mode.
    # Relevant only on SMP machines.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #LockAcquireSpins = 0
     
    #
    # Tune lock hash list; more hash slots mean shorter hash chains. Only
    # necessary under very high load. Prime number values are recommended.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #LockHashSlots = 8191
     
    # ----------------------------
    #
    # Bytes of shared memory allocated for event manager.
    #
    # Per-database configurable.
    #
    # Type: integer
    #
    #EventMemSize = 64K
     
     
    # ===========================
    # Engine Settings
    # ===========================
    #
    # ----------------------------
    # Which CPUs should be used (Windows Only)
    #
    # In an SMP system, sets which processors can be used by the server.
    # The value is taken from a bit map in which each bit represents a CPU.
    # Thus, to use only the first processor, the value is 1. To use both
    # CPU 1 and CPU 2, the value is 3. To use CPU 2 and CPU 3, the value
    # is 6. The default value is 0 - no affinity will be set.
    #
    # Type: integer
    #
    #CpuAffinityMask = 0
     
     
    # ----------------------------
    # Garbage collection policy
    #
    # Defines how engine does garbage collection. Valid values are :
    #    cooperative
    #    background
    #    combined
    #
    # Superserver has by default "combined" policy
    # Classic has by default "cooperative" policy.
    #    Other values are ignored by classic server build
    #
    # Per-database configurable.
    #
    # Type: string (special format)
    #
    #GCPolicy = combined
     
     
    # ----------------------------
    # Security database
    #
    # Defines locations of security database (one that stores logins and passwords),
    # used by server to validate remote connections.
    #
    # Per-database configurable.
    #
    # Type: string (pathname)
    #
    #SecurityDatabase = $(dir_secDb)/security3.fdb
     
     
    # ==============================
    # Settings for Windows platforms
    # ==============================
    #
    # ----------------------------
    # Does the guardian restart the server every time it crashes?
    #    0 - only start the engine/service once
    #    1 - always restart the engine/service if it terminates
    #
    # Type: integer/boolean
    #
    #GuardianOption = 1
     
     
    #
    # ----------------------------
    # Priority level/class for the server process.
    #
    # The values are:
    #     0 (Zero) - normal priority,
    #     positive value - high priority (same as -B command line option)
    #     negative value - low priority.
    #
    # Note: All changes to this value should be carefully tested to ensure
    # that engine is more responsive to requests.
    #
    # Type: integer
    #
    #ProcessPriorityLevel = 0
     
     
    # ----------------------------
    # Local Connection Settings
    #
    # The name of the shared memory area used as a transport channel in local protocol.
    # Note that the local protocol in v2.0 is not compatible with any previous version
    # if Firebird or InterBase.
    #
    # Please note that the server can register objects in Global\ kernel namespace
    # only if it runs under the account with SE_CREATE_GLOBAL_NAME privilege.
    # This means that if you run the server under a restricted account under
    # Windows Vista/XP SP2/2000 SP4 it will not be accessible using the
    # local protocol from other sessions.
    #
    # Per-connection configurable.
    #
    # Type: string
    #
    #IpcName = FIREBIRD
     
    #
    # The name of the pipe used as a transport channel in NetBEUI protocol.
    # Has the same meaning as a port number for TCP/IP. The default value is
    # compatible with IB/FB1.
    #
    # Per-connection configurable.
    #
    # Type: string
    #
    #RemotePipeName = interbas
     
     
    # ============================
    # Settings for Unix/Linux platforms
    # ============================
     
    # ----------------------------
    # Remove protection against redirecting requests to other servers
    #
    #     ***WARNING*** ***WARNING*** ***WARNING*** ***WARNING***
    #
    # Ability to redirect requests to other servers was initially present
    # in Interbase, but was broken by Borland in Interbase 6.0, when
    # they added SQL dialects. Request redirection was fixed in firebird 2.0,
    # but today such behaviour (proxy) seems to be dangerous from security
    # point of view. Imagine, you have one carefully protected firebird server,
    # access to which is possible from global net. But in case when this server
    # has access to your internal LAN (may and should be restricted,
    # but often possible), it will work as a gateway for incoming requests like:
    # firebird.your.domain.com:internal_server:/private/database.fdb
    # It's enough to know name/IP of some internal server on your LAN, and for
    # this connection one even need not know login/password on external server.
    # Such gateway easily overrides firewall, installed to protect your LAN
    # from outside attack.
    #
    # DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING.
    #
    # Type: boolean
    #
    #Redirection = 0
     
     
    # ============================
    # Settings for Architecture Configuration
    # ============================
     
    #
    # Controls the method Firebird engine uses to work with databases and
    # related Firebird server startup parameters.
    #
    # The values are:
    # Super / ThreadedDedicated - databases are opened exclusive by single server process,
    #    attachments share single DB pages cache inside process
    # SuperClassic / ThreadedShared - databases are opened by single server process,
    #    but it does not prevent opening them in other processes (embedded access),
    #    each attachment has its own DB pages cache
    # Classic / MultiProcess - for each attachment to server a separate process is started,
    #    each database may be opened by multiple processes (including local ones for
    #    embedded access), each attachment (process) has its own DB pages cache
    #
    # Type: string
    #
    #ServerMode = Super
    ServerMode = Super
    databases.conf
    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
    # ------------------------------
    # List of known databases
    # ------------------------------
     
    #
    # Makes it possible to specify per-database configuration parameters.
    # See the list of them and description on file firebird.conf.
    # To place that parameters in this file add them in curly braces
    # after "alias = /path/to/database.fdb" line. Example:
    #    big = /databases/bigdb.fdb
    #    {
    #        LockMemSize = 32M        # We know that bigdb needs a lot of locks
    #        LockHashSlots = 19927    #    and big enough hash table for them
    #    }
    #
     
    #
    # Example Database:
    #
    employee.fdb = $(dir_sampleDb)/employee.fdb
    employee = $(dir_sampleDb)/employee.fdb
     
    #
    # Master security database specific setup.
    # Do not remove it until you understand well what are you doing!
    #
    security.db = $(dir_secDb)/security3.fdb
    {
        RemoteAccess = false
        DefaultDbCachePages = 50
    }
     
    #
    # Live Databases:
    #
    Quelqu'un pourrait-il me venir en aide car je commence à sécher sérieusement et je ne vois pas comment m'en sortir ?
    Merci pour votre aide et vos contributions et bonne journée.

  13. #13
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut DelphiCode.

    Citation Envoyé par DelphiCode
    Je crois (d'après le résultat de ton script) que tu possèdes la même version que moi et en 64 bits alors je trouve bizarre que le script fonctionne chez toi et pas chez moi ?
    Déjà, ce qui est bien, nous avons la même version FireBird : 3.0.0.32483 x64.

    Citation Envoyé par DelphiCode
    Pourrais-tu me dire si tu as quelque chose de spécifique par rapport à ma configuration d'après les éléments que j'ai fourni dans une de mes précédentes réponses ?
    Non, rien de spécifique, sauf que je suis sous Windows 10 pro version 64 bits.

    Je pense que tu as oublié une étape importance, celle qui se trouve dans mon premier script, celui de la création de la base de données.
    Je vais détailler ce que tu dois vérifier chez toi :

    1) j'ai créé ma base de données avec un utilisateur qui n'existe pas --> artemus.
    Donc cet utilisateur est le propriétaire de la base de données et de surcroît de la table.

    2) quand je fais la deuxième étape, à savoir celle de la déclaration des provilèges, je me connecte ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'artemus'  -role 'rdb$admin'  -user 'artemus'
    Autrement dit, je me connecte avec l'utilisateur qui est le propriétaire de ma base de données.

    3) oui, mais est-ce suffisant ?
    Non car tu rencontres exactement le même problème que j'ai eu, le rejet de l'accès à la table "PLG$SRP_VIEW".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -no permission for INSERT access to TABLE PLG$SRP_VIEW
    Comment résoudre ce problème ?

    4) et bien, tu dois faire en sorte de mettre cet utilisateur en tant qu'administrateur !!! Et comment fait-on cela ? En deux étape :

    4-a) il faut que tu te connectes avec cet utilisateur, à l'identique de ce que j'ai fait, ci-dessus, avec la commande en ligne "isql".
    Je mets en rouge ce qui est important, selon moi, dans cette ligne de commande.
    Et que constates-tu ? Et bien, j'ai précisé le rôle qui est : "rdb$admin".

    4-b) le plus important est de mettre cet utilisateur en tant qu'administrateur, d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant rdb$admin to artemus;
    Et comment on vérifie que cela s'est bien passé ? En vérifiant la présence de l'utilisateur dans la table "rdb$roles" !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from rdb$roles;
    Si tu voies ton utilisateur à toi (si je ne me trompe pas, c'est "administrateur"), et bien sur la même ligne, tu verras "rdb$admin".

    C'est cela le point important de la manipulation.
    Il faut que l'utilisateur soit à la fois propriétaire et administrateur sur la base de données en question.
    Et bien entendu, cela ne doit pas être "sysdba" puisque c'est le but de la manipulation.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  14. #14
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut DelphiCode.

    Je pense que j'ai dû mal m'exprimer au sujet de ce compte 'artemus'.

    Si le compte 'artemus' n'existe pas quand je crée la base de données, cela n'est pas bien grave.
    Mais si je veux mettre des privilèges à d'autres utilisateurs, il faut que ce compte "artemus" soit autorisé.
    Donc ce compte doit être administrateur.
    Comme je ne peux pas m'auto-attribuer ces droits, je dois passer par un compte qui en a le pouvoir.
    Si c'était le cas, il y aura un grave problème de sécurité.

    Et bien sûr, ce compte est "sysdba".

    Je fais cela en ligne de commande "isql". Voici le script batch windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
     
    chcp 1252 > nul
     
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
     
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'masterkey'  -role 'RDB$ADMIN'  -user 'sysdba'  '..\Data\Base.fdb'
     
    @echo.
    pause
    exit
    Et voici le script sql où je mets 'artemus' administreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- ================
    -- Compte 'artemus'
    -- ================
     
    drop   user artemus;
    create user artemus password 'artemus' grant admin role;
     
    grant  rdb$admin to artemus;
     
    select * from rdb$roles;
     
    exit;
    En résumé, ce compte est différent de "sysdba".
    Il est propriétaire de la base de données.
    Et il est administrateur du SGBD FireBird.

    En fait, tu as deux solutions pour résoudre ton problème :
    --> soit tu crées tes utilisateurs sous "sysdba".
    --> soit tu crées un compte administrateur, autre que "sysdba" et tu associes tes nouveaux comptes à ce nouveau compte administrateur. C'est la solution que je t'ai exposée.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Salut Artemus24 et merci pour ta contribution,

    Je suis sous Windows 7 Professionnel.

    Je pense que tu as oublié une étape importance, celle qui se trouve dans mon premier script, celui de la création de la base de données.
    Comme je le mentionnais dans ma précédente réponse, je suis bloqué à l'étape 2 (que tu as nommé "2) attribution des privilèges") cela sous-entend bien évidemment que j'ai réalisé la première (création de la base de données).

    Pour ce qui est de la gestion des utilisateurs si tu relis bien ma dernière réponse avec mes tests c'est ce que j'ai fait (du moins je le crois !) : création de la base de données avec sysdba, puis création d'autres utilisateurs "admin" puis je me reconnecte à cette base avec un des utilisateurs "admin" que j'ai créé et je crée des roles ou d'autres nouveaux utilisateurs "admin".

    Il y a 2 points qui me gênent :
    • Le premier c'est que lorsque je crée des utilisateurs avec la commande "create user toto password 'toto' grant admin role" je reçois de façon aléatoire l'erreur suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Statement failed, SQLSTATE = 23000
    add record error 
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'TOTO')

    • Le second c'est que d'après ce qu'a dit makowski les utilisateurs sont maintenant stockés dans la base de données et comme je l'ai expliqué j'ai supprimés toutes les base de données que j'avais créées avant de créer la dernière dont j'ai posté les résultats. Cependant des utilisateurs de tests précédents étaient là quand j'ai fait le "show users;" ce qui me fait pensé qu'ils ne sont pas présent dans la base de données elle-même mais ailleurs.


    Un autre élément est étrange pour moi mais je n'ai peut-être pas bien appréhender les commandes pour la création d'un utilisateur ? Je suis obligé de rajouter "grant rdb$admin to toto" pour que l'utilisateur soit réellement admin alors que dans mon esprit le "grant admin role" que nous mettons à la fin de la commande "create user toto password 'toto' grant admin role" permettait de le faire ?

    Une âme charitable peut-elle intervenir pour nous éclairer un peu ?
    Merci à tous,

  16. #16
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Citation Envoyé par DelphiCode Voir le message
    [*]Le second c'est que d'après ce qu'a dit makowski les utilisateurs sont maintenant stockés dans la base de données
    peuvent être, ce n'est pas obligatoire.
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  17. #17
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut DelphiCode.

    Citation Envoyé par DelphiCode
    Pour ce qui est de la gestion des utilisateurs si tu relis bien ma dernière réponse avec mes tests c'est ce que j'ai fait (du moins je le crois !) ...
    Non, pas exactement, et c'est là qu'il y a un problème de droits.

    Citation Envoyé par DelphiCode
    ... création de la base de données avec sysdba, ...
    Ce point ne va pas. Dans mon exemple, de la partie N°1, j'ai créé ma base avec un utilisateur qui n'existe pas.
    Cet utilisateur, qui n'est pas sysdba, va devenir le propriétaire de cette base de données.
    J'ai pourtant insisté sur ce point, en te donnant le "show database" afin de te montrer que le "owner" est "artemus" et non "sysdba".

    Citation Envoyé par DelphiCode
    ... puis création d'autres utilisateurs "admin" puis création d'autres utilisateurs "admin" puis je me reconnecte à cette base avec un des utilisateurs "admin" que j'ai créé et je crée des rôles ou d'autres nouveaux utilisateurs "admin".
    Pour pouvoir créer des utilisateurs, le compte à utiliser doit être "administrateur". J'ai donné les explications dans le post #14.

    A partir du moment où ce compte est d'une part le propriétaire (ou si tu préfères le créateur) de la base de données et d'autre part "administrateur", tu veux faire des attributions de privilèges.
    Oui, mais ce sont des privilèges sur la base de données que tu peux attribuer, et non la création des comptes utilisateurs.
    Si le compte existe déjà, le propriétaire n'a pas besoin d'être administrateur, car il peut attribuer des privilèges mais que sur sa base de données.
    En fait, c'est l'administrateur qui peut créer des comptes utilisateurs.
    Donc, tu peux créer tes comptes avec "sysdba" puis ensuite, avec le compte propriétaire, attribuer les privilèges que tu veux.

    Citation Envoyé par DelphiCode
    lorsque je crée des utilisateurs avec la commande "create user toto password 'toto' grant admin role" je reçois de façon aléatoire l'erreur suivante
    Mais par rapport à quel utilisateur ? Le "grant admin role" ne peut se donner que si le compte possède déjà ce privilège.
    De plus, un seul compte "administrateur" est largement suffisant.

    Il y a une chose que je ne comprends pas bien dans FireBird, il n'y a pas toujours un message d'erreur associé à une commande que tu passes.
    Cela semble aléatoire, mais de toute façon, ton compte n'est pas "administrateur" et tu ne peux pas attribuer ce privilège à d'autres comptes.

    Citation Envoyé par DelphiCode
    Le second c'est que d'après ce qu'a dit Makowski les utilisateurs sont maintenant stockés dans la base de données et comme je l'ai expliqué j'ai supprimés toutes les base de données que j'avais créées avant de créer la dernière dont j'ai posté les résultats. Cependant des utilisateurs de tests précédents étaient là quand j'ai fait le "show users;" ce qui me fait pensé qu'ils ne sont pas présent dans la base de données elle-même mais ailleurs.
    Les utilisateurs ne sont pas stockés dans la base de données courante, mais dans une base de données spéciale qui se nomme "security3.fdb".
    Cette base de données se trouve dans le répertoire courant de "FireBird". En la consultant ("show database"), tu constates que le "owner" est "administrator" (comme pour la base "employee), et elle contient deux tables ("show tables") qui sont "PLG$USERS" pour le compte "sysdba" et "PLG$SRP" qui contient les autres comptes créés.
    De ce fait, pour accéder à cette base de données, il te faut des privilèges, entre autre celui d'être "administrateur".

    Si on peut créer des comptes dans une base de données spécifiques, je ne sais pas le faire, et je n'ai rien vu de tel actuellement dans la version FireBird 3.0.0.

    Citation Envoyé par DelphiCode
    Un autre élément est étrange pour moi mais je n'ai peut-être pas bien appréhender les commandes pour la création d'un utilisateur ? Je suis obligé de rajouter "grant rdb$admin to toto" pour que l'utilisateur soit réellement admin alors que dans mon esprit le "grant admin role" que nous mettons à la fin de la commande "create user toto password 'toto' grant admin role" permettait de le faire ?
    Sur ce point, je ne suis pas sûr de moi, mais voilà ce que j'en pense : le "grant admin role" est le pouvoir d'attribuer à d'autres comptes des privilèges. Cela ne signifie pas qu'il est pour autant "administrateur".
    Ce qui fait qu'il ne peut attribuer des privilèges que s'il les possède déjà ! C'est en quelque sorte une forme d'héritage.
    D'ailleurs quand on donne un privilège, on peut dire aussi "granted by nom_compte".
    Si ce "nom_compte" est supprimé, tous les privilèges qui ont été attribués, viennent à disparaître !

    Pour être "administrateur", je ne connais qu'une seule forme d'écriture, à savoir, faire "grant rdb$admin to nom_compte".

    En résumé, je crois que tu confonds :
    --> être administrateur
    --> attribuer des privilèges à d'autres utilisateurs.

    Le seul point où il faut être administrateur est de pouvoir créer des utilisateurs. Le compte "sysdba" permet de le faire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous,

    Merci à vous deux pour votre patience et de continuer de m'aider, je crois à mon tour que je n'ai pas été trop clair dans mes propos alors je vais essayer ce coup-ci !

    @makowski : la question derrière cette gestion des utilisateurs est de savoir si avec cette version 3.0 de Firebird si je prend mon fichier fdb et que je le met sur un autre pc avec une installation toute fraîche de Firebird (qui possède donc un sysdba / masterkey par défaut) est ce que la personne peut se connecter et faire ce quelle veut des données ?

    C'est pour cela que je cherche à enlever sysdba (apparemment ce n'est pas possible) et de protéger l'accès. Je sais qu'il serait plus intelligent et judicieux de protéger le système de fichier pour empêcher la personne d'accéder à ce fichier fdb mais dans mon cas je ne peut pas donc j'essaye de faire autrement.


    @Artemus24 : je n'ai pas été clair dans mes explications alors je vais essayer de l'être. J'ai fais plusieurs choses à la fois (la fougue de la jeunesse surement ! ) et du coup j'ai mixé les explications.

    Ce que je voulais dire c'est que j'avais une base de données avec le fameux compte "Administrateur" du début de mon premier post et celle là je l'ai mise de côté quand j'ai vu vos réponses pour me concentrer sur vos idées et codes à tous les deux.

    J'ai donc essayé ta solution et scrupuleusement suivi tes instructions (ni plus ni moins : pas d'autres comptes ou quoi que ce soit !) et j'ai donc réussi la première étape de création de la base et j'ai été bloqué à la deuxième (uniquement sur la création des users "patron" et "gordon" car le reste du script a bien fonctionné "création des roles, etc." -> voir post #10 où j'ai publié le résultat de mon exécution de ton second script).

    Du coup je me suis mis en tête à ce moment que je devais avoir un problème de création des users et c'est là que j'ai voulu faire des essais en isql dans une nouvelle base de données pour valider ce point (qui n'a rien à voir avec la tienne proposé dans tes scripts ou la première !).


    Je sais que les exemples de cette nouvelle base de données sont débiles (créer plusieurs comptes admin en série) mais c'était pour faire des tests. Mon idée comme on peut le voir dans le post #12 était de créer une base de données avec sysdba et à partir de là de créer au moins un nouveau compte utilisateur admin (je sais j'en ai mis plusieurs mais quand j'ai créé le premier compte "Administrateur" j'avais la fameuse erreur du coup j'ai voulu essayé avec d'autres) avec les mêmes droits que sysdba pour se connecter plus tard avec ce nouveau compte "titi" et tester la création de roles et de nouveaux utilisateurs admin pour tester la faisabilité.

    Le résultat c'est que ça fonctionne mais que quand je crée des utilisateurs j'ai des erreurs aléatoires. Voici les commandes exécutées résumées de façon épuré pour la compréhension :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'C:\test.fdb' page_size 4096 user sysdba password 'masterkey';
     
    SQL> create user administrateur password 'administrateur' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'ADMINISTRATEUR')
     
    SQL> create user titi password 'titi' grant admin role;
    SQL> show users;
    Users in the database
      0  A                                   0  AD
      0  ADM                                 0  ADMI
      0  ADMINI                              0  ADMINIS
      0  ADMINIST                            0  ADMINISTR
      0  ADMINISTRA                          0  ADMINISTRAT
      0  ADMINISTRATE                        0  ADMINISTRATEU
      0  ADMINISTRATEUR                      0  ADMINISTRATEURS
      0  ADMINISTRATOR                       0  ADMINISTRATORS
      1 #SYSDBA                              0  TATA
      0  TITI                                0  TOTO
      0  TUTU                                0  VIVI
     
     
    SQL> show grant;
    There is no privilege granted in this database
     
     
    SQL> grant rdb$admin to titi;
    SQL> show grant;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO TITI
     
     
    SQL> connect 'C:\test.fdb' user titi password 'titi' role rdb$admin;
    Commit current transaction (y/n)?y
    Committing.
    Database: 'C:\test.fdb', User: TITI, Role: RDB$ADMIN
     
     
    SQL> create role test;
    SQL> create user vivi password 'vivi' grant admin role;
    SQL> create user vuvu password 'vuvu' grant admin role;
    SQL> show users;
    Users in the database
      0  A                                   0  AD
      0  ADM                                 0  ADMI
      0  ADMINI                              0  ADMINIS
      0  ADMINIST                            0  ADMINISTR
      0  ADMINISTRA                          0  ADMINISTRAT
      0  ADMINISTRATE                        0  ADMINISTRATEU
      0  ADMINISTRATEUR                      0  ADMINISTRATEURS
      0  ADMINISTRATOR                       0  ADMINISTRATORS
      0  SYSDBA                              0  TATA
      1 #TITI                                0  TOTO
      0  TUTU                                0  VIVI
      0  VUVU

    D'après tes derniers commentaires et comme je le supposais j'ai mal compris comment fonctionne clairement la commande "create user" dans son ensemble. Du coup j'ai cherché un peu plus dans la documantation (voir http://www.firebirdsql.org/refdocs/langrefupd25-security-rdbadmin.html) et y figure ceci :

    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
    In the security database
    Granting the RDB$ADMIN role in the security database
     
    Since nobody can connect to the security database, the GRANT and REVOKE statements cannot be used here. Instead, the RDB$ADMIN role is granted and revoked with the new SQL user management commands:
     
        CREATE USER newuser PASSWORD 'password' GRANT ADMIN ROLE
        ALTER USER existinguser GRANT ADMIN ROLE
        ALTER USER existinguser REVOKE ADMIN ROLE
     
    Please notice that GRANT ADMIN ROLE and REVOKE ADMIN ROLE are not GRANT and REVOKE statements. They are three-word parameters to CREATE and ALTER USER.
     
    Alternatively, gsec can be used with the -admin parameter:
     
        gsec -add newuser -pw password -admin yes
        gsec -mo existinguser -admin yes
        gsec -mo existinguser -admin no
     
    Depending on the situation, more parameters may be needed when invoking gsec, e.g. -user and -pass, or -trusted.
    Ce que j'en conclue c'est que "grant admin role" s'applique que pour la base "security.fdb" (car le grant n'est pas utilisable) pour gérer rdb$admin et du coup le "grant rdb$admin to user" serait pour la base dont on se sert. Vous me direz si j'ai bien compris ?



    Pourriez-vous me rendre un service et essayer ce bout de code (en lançant isql.exe et en saisissant les commandes) chez vous pour voir si les messages d'erreur aléatoires de création des utilisateurs vous arrivent aussi à vous avec vos configurations et sous Windows 10 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'C:\test.fdb' page_size 4096 user sysdba password 'masterkey';
     
    SQL> create user Administrateur password 'Administrateur' grant admin role;
    SQL> grant rdb$admin to Administrateur;
     
    SQL> connect 'C:\test.fdb' user Administrateur password 'Administrateur' role rdb$admin;
     
    SQL> create role test;
    SQL> create user toto password 'toto' grant admin role;
    SQL> grant rdb$admin to toto;
    Je sais que le mail est un peu long mais j'espère qu'avec les couleurs ce sera plus clair.
    Je vous remercie encore pour votre aide et votre patience mais j'aime bien Firebird et j'essaye de comprendre.

    Bonne soirée et à plus,

  19. #19
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut DelphiCode.

    Citation Envoyé par DelphiCode
    @makowski : la question derrière cette gestion des utilisateurs est de savoir si avec cette version 3.0 de Firebird si je prend mon fichier fdb et que je le mets sur un autre pc avec une installation toute fraîche de Firebird (qui possède donc un sysdba / masterkey par défaut) est ce que la personne peut se connecter et faire ce quelle veut des données ?
    Bien que cela soit adressé à Makowski, je vais répondre à cette question.
    C'est NON car les utilisateurs sont stockés dans la base de données de nom "security3.fdb".

    Citation Envoyé par DelphiCode
    C'est pour cela que je cherche à enlever sysdba (apparemment ce n'est pas possible) et de protéger l'accès. Je sais qu'il serait plus intelligent et judicieux de protéger le système de fichier pour empêcher la personne d'accéder à ce fichier fdb mais dans mon cas je ne peux pas donc j'essaye de faire autrement.
    Tu n'as jamais parlé de supprimer ou de renommer le compte "sysdba".
    D'après ce que je sais, tout ce que tu peux faire, c'est renommer le mot de passe associé au compte "sysdba". Makowski peut nous confirmer cela.

    Créer une base de données avec un autre compte que "sysdba", c'est possible et c'est même ce qu'il faut faire.
    D'ailleurs, la base "employee" est créé avec le compte "administrator" (qui est propriétaire).

    Citation Envoyé par DelphiCode
    @Artemus24 : je n'ai pas été clair dans mes explications alors je vais essayer de l'être. J'ai fais plusieurs choses à la fois (la fougue de la jeunesse surement ! ) et du coup j'ai mixé les explications.
    Je reconnais aussi que même si je sais faire ce genre de manipulation, le plus difficile est de reproduire la bonne démarche, dans un contexte que je ne connais pas (je parle de ton environnement).
    Et le principal problème des forums, c'est arriver à se comprendre sur ce que l'on cherche à faire.

    Citation Envoyé par DelphiCode
    Ce que je voulais dire c'est que j'avais une base de données avec le fameux compte "Administrateur" du début de mon premier post et celle là je l'ai mise de côté quand j'ai vu vos réponses pour me concentrer sur vos idées et codes à tous les deux.
    Ce que je ne sais pas, c'est si ta base a été déplacée vers un autre SGBD de même version, ou si tu as créés une nouvelle base dans un nouveau SGBD FireBird.
    Autrement dit, est-ce que tu travailles sur un existant ou est-ce le démarrage d'un nouveau projet ?

    Citation Envoyé par DelphiCode
    J'ai donc essayé ta solution et scrupuleusement suivi tes instructions (ni plus ni moins : pas d'autres comptes ou quoi que ce soit !) et j'ai donc réussi la première étape de création de la base et j'ai été bloqué à la deuxième (uniquement sur la création des users "patron" et "gordon" car le reste du script a bien fonctionné "création des roles, etc." -> voir post #10 où j'ai publié le résultat de mon exécution de ton second script).
    A force de faire des manipulations, je ne sais plus très bien ce que j'ai fait au préalable.
    Du coup, j'ai installé à nouveau FireBird avec la dernière version 3.0.0, et j'ai recommencé les mêmes manipulations.
    La solution pour créer des comptes est ce que j'ai donné dans mon post #14.

    Citation Envoyé par DelphiCode
    Le résultat c'est que ça fonctionne mais que quand je crée des utilisateurs j'ai des erreurs aléatoires.
    Non, cela ne fonctionne pas !
    La première question que tu dois te poser, c'est sous quel compte, tu vas faire tes manipulations.
    Or, je voie que tu fais cela sous la console FireBird. Mais j'ignore le compte que tu utilises pour faire cette démarche. Et tu supposes que c'est le compte "sysdba".

    Je viens de créer une base de données avec comme compte "loveless" qui n'existe pas dans FireBird et la base a bien été créé.
    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
    51
    52
    53
    54
    CREATE DATABASE '..\Data\Base.fdb' page_size 4096 DEFAULT CHARACTER SET ISO8859_1;
     
    create table test (
    id  int      not null primary key,
    lib char(20) not null collate fr_fr
    );
     
    insert into test (id,lib) values (1, 'un');
    insert into test (id,lib) values (2, 'deux');
    insert into test (id,lib) values (3, 'trois');
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
     
    commit;
     
    show database;
    Database: ..\Data\Base.fdb
            Owner: LOVELESS
    PAGE_SIZE 4096
    Number of DB pages allocated = 240
    Number of DB pages used = 224
    Number of DB pages free = 16
    Sweep interval = 20000
    Forced Writes are ON
    Transaction - oldest = 5
    Transaction - oldest active = 6
    Transaction - oldest snapshot = 6
    Transaction - Next = 7
    ODS = 12.0
    Database not encrypted
    Default Character set: ISO8859_1
     
    commit;
     
    show users;
    Users in the database
      1 #LOVELESS
     
    create user miguelito password 'miguelito';
    Statement failed, SQLSTATE = 28000
    add record error
    -no permission for INSERT access to TABLE PLG$SRP_VIEW
    After line 20 in file 1.Base.sql
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Tandis que la création du compte "miguelito" ne peut pas se faire car mon compte "loveless" n'existant pas, je ne suis pas autorisé à faire des opérations d'administrations.

    Conclusion : si tu ne peux pas créer des comptes utilisateurs, c'est que tu n'es pas administrateur. Tu n'es pas connecté avec le compte "sysdba" ou celui-ci n'est pas "grant admin role".
    Essayes de faire un "show users", pour voir ton compte de connexion. Si tu es "sysdba" alors je ne comprends plus rien !

    Citation Envoyé par DelphiCode
    Ce que j'en conclue c'est que "grant admin role" s'applique que pour la base "security.fdb" (car le grant n'est pas utilisable) pour gérer rdb$admin et du coup le "grant rdb$admin to user" serait pour la base dont on se sert. Vous me direz si j'ai bien compris ?
    Le plus souvent, je travaille avec le compte "sysdba" qui est administrateur. Je sais qu'il est administrateur car en faisant un display avec la commande "gsec", je voie s'afficher le mot "admin".

    Le "grant admin role", je ne l'utilise jamais. Tout ce que je peux dire, c'est que cela fait la même chose que le mot "admin" dans la commande "gsec", qui est devenue obsolète depuis la version 3.0.0.

    Citation Envoyé par DelphiCode
    Pourriez-vous me rendre un service et essayer ce bout de code
    Aucun problème, je vous fais ce test.

    1) je lance la console windows, en tapant "isql".

    2) je tape les mêmes commandes que vous et d'autres :
    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
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'C:\test.fdb' page_size 4096 user sysdba password 'masterkey';
    SQL> create user Administrateur password 'Administrateur' grant admin role;
    SQL> grant rdb$admin to Administrateur;
    SQL> connect 'C:\test.fdb' user Administrateur password 'Administrateur' role rdb$admin;
    Commit current transaction (y/n)?y
    Committing.
    Database: 'C:\test.fdb', User: ADMINISTRATEUR, Role: RDB$ADMIN
    SQL> create role test;
    SQL> create user toto password 'toto' grant admin role;
    SQL> grant rdb$admin to toto;
    SQL>
    SQL> show users;
    Users in the database
      1 #ADMINISTRATEUR                      0  ARTEMUS
      0  GORDON                              0  LECTEUR
      0  PATRON                              0  SYSDBA
      0  TOTO
    SQL> show database;
    Database: C:\test.fdb
            Owner: SYSDBA
    PAGE_SIZE 4096
    Number of DB pages allocated = 240
    Number of DB pages used = 216
    Number of DB pages free = 24
    Sweep interval = 20000
    Forced Writes are ON
    Transaction - oldest = 5
    Transaction - oldest active = 6
    Transaction - oldest snapshot = 6
    Transaction - Next = 13
    ODS = 12.0
    Database not encrypted
    Default Character set: NONE
    SQL> show role;
           TEST
    SQL>
    Je suis "administrateur" et je suis connecté avec ce compte. Le propriétaire de la base de données est "sysdba". Et le rôle "test" a bien été créé.

    Non, aucun problème !

    Je pense que vous n'avez pas les droits administrateur avec la console FireBird (ISQL) pour faire vos manipulations.

    Citation Envoyé par DelphiCode
    Je sais que le mail est un peu long mais j'espère qu'avec les couleurs ce sera plus clair.
    C'est pas un mail, mais un message. Votre post (le dernier message #18) n'est pas très long.
    Il vaut mieux éviter de mettre de la couleur car cela devient illisible.

    Citation Envoyé par DelphiCode
    Je vous remercie encore pour votre aide et votre patience mais j'aime bien Firebird et j'essaye de comprendre.
    J'apprends à connaitre plusieurs SGBDR, dont MySql, FireBird et Microsoft SQL Server.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Bonsoir à tous,

    Merci Artemus24 pour ta réponse.

    C'est NON car les utilisateurs sont stockés dans la base de données de nom "security3.fdb".
    Ce que tu dis c'est lorsqu'on vient de réaliser une installation toute fraîche de Firebird. Mais d'après la documentation, depuis la version 3.0, il est possible d'utiliser plusieurs base de données de sécurité et la base de données de travail peut aussi être à la fois base de données de sécurité. Du coup, dans ce cas de figure je me pose la question de savoir si la sécurité interne prévaut sur la "security3.fdb".

    Sinon, comme seconde hypothèse, comme tu le suggères si on crée une base de données avec un utilisateur virtuel qui n'existe pas au départ et qui devient propriétaire de la base de données cela signifie t-il quelle sera protégée de l'ouverture avec un sysdba ?

    Ce que je ne sais pas, c'est si ta base a été déplacée vers un autre SGBD de même version, ou si tu as créés une nouvelle base dans un nouveau SGBD FireBird.
    Autrement dit, est-ce que tu travailles sur un existant ou est-ce le démarrage d'un nouveau projet ?
    La première base de données dont je parlais était une migration depuis un 2.5.4 vers la 3.0 mais ce n'est pas important car en fonction des solutions que nous trouverons j'en recréerais une nouvelle et je migrerais les tables et tout le reste (elle n'est pas en production). En revanche la base de données que tu me suggères avec tes scripts est nouvelle bien entendu ainsi que la nouvelle que j'ai créée en parallèle et que je t'ai demandé entre autre d'essayer de ton côté.

    Non, cela ne fonctionne pas !
    La première question que tu dois te poser, c'est sous quel compte, tu vas faire tes manipulations.
    Or, je voie que tu fais cela sous la console FireBird. Mais j'ignore le compte que tu utilises pour faire cette démarche. Et tu supposes que c'est le compte "sysdba".
    Quand je parle que le résultat fonctionne, je parle du bout de code que j'ai fait et que je t'ai demandé de reproduire mais de façon plus épuré. Voici celui que j'ai fait :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'C:\test.fdb' page_size 4096 user sysdba password 'masterkey';
    SQL> create user tata password 'tata' grant admin role;
    SQL> create user toto password 'toto' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'TOTO')
    SQL> create user titi password 'titi' grant admin role;
    SQL> create user tutu password 'tutu' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'TUTU')
    SQL> create user administrateur password 'administrateur' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'ADMINISTRATEUR')
    SQL> show users;
    Users in the database
      0  A                                   0  AD
      0  ADM                                 0  ADMI
      0  ADMINI                              0  ADMINIS
      0  ADMINIST                            0  ADMINISTR
      0  ADMINISTRA                          0  ADMINISTRAT
      0  ADMINISTRATE                        0  ADMINISTRATEU
      0  ADMINISTRATEUR                      0  ADMINISTRATEURS
      0  ADMINISTRATOR                       0  ADMINISTRATORS
      1 #SYSDBA                              0  TATA
      0  TITI                                0  TOTO
      0  TUTU                                0  VIVI
    SQL> show grant;
    There is no privilege granted in this database
    SQL> grant rdb$admin to titi;
    SQL> show grant;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO TITI
    SQL> connect 'C:\test.fdb' user titi password 'titi' role rdb$admin;
    Commit current transaction (y/n)?y
    Committing.
    Database: 'C:\test.fdb', User: TITI, Role: RDB$ADMIN
    SQL> create role test;
    SQL> create user vivi password 'vivi' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'VIVI')
    SQL> create user vuvu password 'vuvu' grant admin role;
    SQL> show users;
    Users in the database
      0  A                                   0  AD
      0  ADM                                 0  ADMI
      0  ADMINI                              0  ADMINIS
      0  ADMINIST                            0  ADMINISTR
      0  ADMINISTRA                          0  ADMINISTRAT
      0  ADMINISTRATE                        0  ADMINISTRATEU
      0  ADMINISTRATEUR                      0  ADMINISTRATEURS
      0  ADMINISTRATOR                       0  ADMINISTRATORS
      0  SYSDBA                              0  TATA
      1 #TITI                                0  TOTO
      0  TUTU                                0  VIVI
      0  VUVU
    SQL> show grant;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO TITI
    SQL>
    On voit bien que j'ai réussi à créer un compte "titi" administrateur puis que je me connecte avec et qu'après j'arrive bien à créer le role "test" ainsi qu'un autre utilisateur vuvu.

    Ce que je rajoute comme commentaire c'est que malgré que les utilisateurs soient bien créées (on les voit bien avec le show users) certains affichent un message d'erreur (encore une fois bien qu'ils soient effectivement créées) lors de leur création. Par exemple sur le code précédent c'est le cas de "toto", "tutu", "administrateur" et "vivi". Et c'est aléatoire car si je supprime la base de données et que je recommence avec une nouvelle les erreurs n'apparaissent pas pour les mêmes noms.

    Je vois que dans ton test tu as bien réussi à créer "Administrateur" et "toto" sans erreur. Pourrais-tu essayer d'en créer plusieurs en série pour voir si c'est pareil.
    Moi je vais à l'emplacement du fichier isql.exe et je fais un clic droit "Excuter en tant qu'administrateur" avant de réaliser mes commandes. Voici le dernier test que j'ai fais et j'ai eu ce coup-ci qu'une seule erreur :

    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
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'C:\test.fdb' page_size 4096 user sysdba password 'masterke
    y';
    SQL> create user lala password 'lala' grant admin role;
    SQL> create user lulu password 'lulu' grant admin role;
    SQL> create user lili password 'lili' grant admin role;
    SQL> create user lulu password 'lulu' grant admin role;
    Statement failed, SQLSTATE = 23000
    add record error
    -violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"
    -Problematic key value is ("PLG$USER_NAME" = 'LULU')
    SQL> create user lolo password 'lolo' grant admin role;
    SQL> create user lyly password 'lyly' grant admin role;
    SQL> create user rara password 'rara' grant admin role;
    SQL> create user rere password 'rere' grant admin role;
    SQL> create user riri password 'riri' grant admin role;
    SQL> create user roro password 'roro' grant admin role;
    SQL> create user ruru password 'ruru' grant admin role;
    SQL> create user ryry password 'ryry' grant admin role;
    SQL>
    C'est pas un mail, mais un message.
    Oui je suis effectivement au courant qu'on dit "message" ou "post" mais dans la précipitation j'ai écris mail et je n'ai pas bien relu avant de publier.

    Je viens d'essayer de refaire une série de test en lançant isql depuis une invite de commande DOS lancée en administrateur et c'est pareil je viens d'avoir 2 erreurs.

    Merci encore et à plus tard.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. problème d'accès avec le compte administrateur local
    Par ferhat.adel dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 02/02/2014, 18h55
  2. problème avec la session administrateur
    Par fofmata dans le forum Windows XP
    Réponses: 1
    Dernier message: 24/05/2007, 00h19
  3. Problème avec mon compte d'administrateur
    Par Ganak dans le forum Windows XP
    Réponses: 4
    Dernier message: 13/01/2007, 15h58
  4. Réponses: 2
    Dernier message: 21/07/2005, 13h05

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