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

Administration Firebird Discussion :

La gestion des comptes utilisateurs sous FireBird 3


Sujet :

Administration Firebird

  1. #1
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut La gestion des comptes utilisateurs sous FireBird 3
    Salut à tous.

    J'ai quelques problèmes de compréhension sur ce qu'il faut faire. Je suis sous Windows 10 pro avec FireBird version 3.0.0 en 64 bits.
    Je voudrais créer des utilisateurs ayant des rôles particuliers.

    1) d'après ce que j'ai compris, il y a trois types de bases :
    a) la base de données.
    b) la base de sécurités.
    c) la base système.

    2) j'ai trois types d'utilisateurs :
    a) le créateur/propriétaire de la base.
    b) l'administrateur autre que le créateur/propriétaire.
    c) l'utilisateur lambda.

    A priori, je n'ai pas de problème de compréhension en ce qui concerne le cas c).

    Mais je n'arrive pas à comprendre la distinction que l'on puisse faire entre le cas a) et le cas b).

    3) soit un utilisateur qui n'existe pas dans FireBird. On lance "isql" avec un utilisateur de nom "artemus".
    Je fais une tentative de création d'une base (de données ou de sécurités), et je constate que je suis bien le propriétaire (owner).

    Tant que je travaille directement sur la base avec ce compte (créateur/propriétaire), je n'ai pas de problème !
    Les accès sont du genre "select", "insert", "delete", "update".

    4) j'ajoute une sécurité sur cette base de données.
    Il faut modifier le fichier "database.conf", comme dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    first = E:/23.FireBird/32.Privilèges/Data/Base.fdb
    {
        SecurityDatabase = E:/23.FireBird/32.Privilèges/Data/Security.fdb
        {
            RemoteAccess = true
            DefaultDbCachePages = 50
        }
    }
    En procédant ainsi, je me retrouve avec deux bases de sécurités

    a) celle associée à la base de données que j'ai créé au §1).
    b) et celle de la master database security qui se nomme "security3.fdb".

    Jusque là, tout va bien, ça fonctionne.

    5) j'ajoute de nouveaux comptes, en me connectant avec le compte créateur/propriétaire "artemus".
    Je n'ai pas de problèmes, ses comptes existent bien et je peux leur donner des permissions.
    Je n'ai pas de problème avec les permissions (grant).

    6) mais si je veux supprimer ses mêmes comptes, cela ne fonctionne plus.
    Je suis bien connecté avec mon compte créateur/propriétaire "artemus" et pourtant tout se passe comme si je n'avais pas l'autorisation de le faire.

    7) je conserve le même compte, mais je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant rdb$admin to artemus;
    et là, oh miracle, ça fonctionne !

    Je ne comprends pas pourquoi je suis obligé d'être administrateur en plus d'être le créateur/propriétaire pour supprimer des comptes.
    Je rappelle que j'ai déclaré l'association de la base de données et de la base de sécurité dans "database.conf"..
    Puis séparément, j'ai d'abord créé la base des données et ensuite la base de sécurités avec le compte "artemus".

    Qu'est-ce que j'ai fait de travers ?

    8) maintenant j'aborde le compte spécial "sysdba". Ce compte est déclaré dans la master database security (§4-b). Il a normalement accès à tout !
    Comment faire pour lui interdire l'accès à une base de données en particulier.

    Si on change le mot de passe de ce compte, cela répond partiellement à la question.
    Mais si on copie la base de données dans un autre serveur FireBird, on peut avec le compte 'sysdba' faire un accès.
    Il y a, selon moi, un gros problème de sécurité avec FireBird.

    Pouvez-vous l'indiquer les solutions que vous avez trouvé pour remédier à cela.

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

  2. #2
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut à tous

    J'ai un peu avancé dans mes recherches.

    Je me suis inspiré de ce lien : http://www.developpez.net/forums/d55...compte-sysdba/
    pour approfondir la question. Créer un rôle ayant comme nom 'sysdba' ("create role sysdba") permet, en effet, d'empêcher l'accès de ce compte.
    Oui, sauf que si le compte administrateur ne porte pas ce nom, cela ne résoud rien du tout.
    La faille existe dans le fait que n'importe quel compte administrateur a accès à n'importe quelle base de données.

    N'aurait-il pas été plus judicieux, lors de la création de la base de données, de mettre que les utilisateurs autoriés et seulement eux.
    Il y a en fait, moult fichiers de sécurités, qui au lieu de s'exclure, ne font que s'aditionner.
    D'où la prédominance des comptes administrateurs extérieurs qui viennent prendre le pas sur ceux de la base de données.

    Si on se contente que des comptes présents dans la base de données, et si un jour on oublie le password du compte administrateur, on n'a plus aucun accès à la base.
    Ce compte 'sysdba' est fort utile pour remédier à cela, mais c'est aussi une faille dans la sécurité.

    Mettre la sécurité dans la base elle-même, c'est bien et j'ai testé en modifiant le fichier "database.conf". Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    first = E:/23.FireBird/32.Privilèges/Data/Base.fdb
    {
        SecurityDatabase = first
        {
            RemoteAccess = true
            DefaultDbCachePages = 50
        }
    }
    La base de sécurité est incluse dans la base des données !
    Mais rien ne doit court-circuiter cette sécurité par une autre base de sécurité qui viendrait se substituer à l'existant.
    En tout cas, c'est la question que je me posais à ce moment là de mes recherches.

    Ensuite, j'ai trouvé ce sujet : http://www.developpez.net/forums/d15...rd-protection/
    Merci à SergioMaster pour ce déclencheur basé sur une exception que je ne connaissais pas !

    J'ai fait le test, et ça fonctionne parfaitement.
    Seul les comptes qui sont présents dans le table "PLG$SRP" peuvent être autorisé à accéder à la base.
    Maintenant, je n'ai pas cherché à contrer cette solution qui me convient. Voici le script de mon test :
    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
    -- ================
    -- Compte 'artemus'
    -- ================
     
    create user artemus   password 'artemus'  middlename 'Database'   lastname 'Administrator'  grant admin role;
     
    grant rdb$admin to artemus;
     
    -- ================
    -- Compte 'ulysses'
    -- ================
     
    create user ulysses   password 'ulysses'  middlename 'Database'   lastname 'Supervisor';
     
    -- ==============
    -- Compte 'james'
    -- ==============
     
    create user james     password 'james';
     
    -- ================
    -- Compte 'lecteur'
    -- ================
     
    create user lecteur   password 'lecteur';
     
    -- =================
    -- Compte 'loveless'
    -- =================
     
    create user loveless  password 'loveless' firstname 'Miguelito'   lastname 'Loveless';
     
    commit;
     
    -- ======================
    -- Autorisation des accès
    -- ======================
     
    create exception interdit 'Accès interdit à la base !!!';
     
    SET TERM #;
     
    create trigger autorisation
    on connect as
      declare variable flag smallint default null;
    begin
      select 1 from PLG$SRP where PLG$USER_NAME = current_user into flag;
     
      if (flag is null) then exception interdit;
    end#
     
    SET TERM ;#
     
    commit;
     
    -- =====
    -- Users
    -- =====
     
    show users;
    Users in the database
      2 #ARTEMUS
     
    select distinct plg$user_name from plg$srp;
     
    PLG$USER_NAME
    ===============================
    ARTEMUS
    JAMES
    LECTEUR
    LOVELESS
    ULYSSES
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Vu que je n'ai pas indiqué ni le compte "Sysdba" ni l'autre compte "Administrator" dans cette base de sécurité interne à la base de données, j'ai fait le test que voici :
    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
    Statement failed, SQLSTATE = 42000
    exception 1
    -INTERDIT
    -Accès interdit à la base !!!
    -At trigger 'AUTORISATION' line: 7, col: 26
    After line 0 in file 7.Test.sql
    SHOW USERS;
    Command error: SHOW USERS
     
    select * from test;
     
    insert into test (id,lib) values (4, 'quatre');
    insert into test (id,lib) values (5, 'cinq');
    insert into test (id,lib) values (6, 'six');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
     
    select * from test;
     
    drop database;
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Je n'ai aucun accès à la base avec le compte administrateur "sysdba". J'ai fait aussi le test avec "Administrator", même résultat !

    Tant que l'on ne perd pas le nom du compte administrateur qui est aussi le compte créateur/propriétaire de la base et son mot de passe, tout va bien.
    Mais que se passe-t-il si on a un trou de mémoire ?

    En l'état de mes recherches, je suis assez satisfait de cette solution.
    Si vous avez d'autres idées, je suis preneur !

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

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Bien que, sur le principe, cette solution soit valable je reste sceptique.
    -Tout d'abord parce qu'il m'étonne que rien n'ai déjà été prévu en ce sens (c'était quand même un des gros points noir)
    -Ensuite sur l'utilisation de la table PLG$SRP (chercher plutôt vers SEC$USERS)

    Je pense que que cette solution est encore basée sur les connaissances et mécanismes de Firebird 2.5 (et subséquemment d'une sécurité "serveur" et non d'une sécurité "base" voir la réponse que j'ai donné ici

    comme dit dans le post cité, je n'ai pas le temps de m'impliquer plus en avant dans cette partie.
    Je suggérerai quelques essais :
    - Créer une base de données utilisateur pour une base de données (et non pour le serveur) lier cette dernière dans le databases.conf
    puis ne transférer que la Base (ou tout autre manip i.e. backup/restore sur un autre serveur) et voir ce qui se passe

    - Déclarer l'utilisateur SYSDBA comme inactif (est-ce possible ?) ALTER USER SYSDBA PASSWORD 'lemotdepasse' INACTIVE
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut SergioMaster.

    Citation Envoyé par SergioMaster
    Je suggérerai quelques essais :
    J'ai fait tout un tas de tests afin de résoudre quelques problèmes de compréhension sur la question de la sécurité.
    J'ai surtout travaillé avec le fichier security qui est inclus dans la base de données.
    Je n'ai pas retrouvé la table "PLG$USERS" tandis que j'ai bien la table "PLG$SRP" incluse dans ma base de données.

    Dans la base security3.fdb, la table "PLG$USERS" contient que le compte "SYSDBA".
    J'ai pas compris ce que représente cette table et le rôle qu'elle joue au niveau de la sécurité.
    J'ai essayé de changer le nom du compte "SYSDBA", mais je ne suis pas arrivé à me connecter avec ce nouveau compte.
    Je pense que le compte "SYSDBA" n'est pas un compte administrateur ordinaire, mais doit-être codé en dure dans le noyau de FireBird.

    Citation Envoyé par SergioMaster
    - Créer une base de données utilisateur pour une base de données (et non pour le serveur) lier cette dernière dans le databases.conf
    Je ne comprends pas ce que tu entends par "non pour le serveur" ?
    J'ai créé une base de données où la base de security est incluse dans la base de données.
    Donc sur ce point, les utilisateurs sont liés à la base de données et non externe dans la base security3.fdb.

    Mais avec seulement cette approche, le compte administrateur "sysdba" peut encore accéder à la base.
    D'où ton astuce que j'ai mis en place et qui fonctionne parfaitement.
    Sur ce point, j'aurai aimé ne pas avoir comme réponse un beau message d'erreur, mais juste le libellé de l'exception.

    Citation Envoyé par SergioMaster
    puis ne transférer que la Base (ou tout autre manip i.e. backup/restore sur un autre serveur) et voir ce qui se passe
    Je n'ai pas transféré la base, mais j'ai fait le test, en conservant le compte administrateur "sysdba".
    Celui-ci ou tout autre compte administrateur est interdit d'accès à la base de données.

    Et j'ai aussi fait le test, en détruisant la version FireBird installé sur mon ordinateur.
    J'ai dû mettre les déclaratives dans le fichier "database.conf" afin d'avoir l'alias "first". Et j'ai redémarré les services "Guardian" et "FireBird".
    J'ai fait un accès avec le compte administrateur "sysdba" et il a bien été rejeté comme il se doit.
    J'en conclu que toutes les déclaratives sont bien stockées dans la base de données et non ailleurs.

    Citation Envoyé par SergioMaster
    - Déclarer l'utilisateur SYSDBA comme inactif (est-ce possible ?) ALTER USER SYSDBA PASSWORD 'lemotdepasse' INACTIVE
    J'ai fait le test et il me semble que cela a modifié le compte "sysdba".
    Et au second essai, voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Statement failed, SQLSTATE = 28000
    Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
    After line 0 in file 2.Sysdba.sql
    alter user sysdba password 'masterkey' inactive;
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Donc oui, on peut le rendre inactif, mais dans ce cas là, si je n'ai pas un autre compte administrateur, comment le rendre actif ?

    En fait, je n'ai jamais voulu détruire le compte administrateur "sysdba" ou le rendre inactif. Ce que je voulais faire, c'est le renommer, sans y parvenir !

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

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Artemus24 Voir le message
    J'ai surtout travaillé avec le fichier security qui est inclus dans la base de données.
    Je n'ai pas retrouvé la table "PLG$USERS" tandis que j'ai bien la table "PLG$SRP" incluse dans ma base de données.
    tu as mal lu, j'ai écrit la "table" SEC$USERS qui j'en ai l'impression est une sorte d'union des tables PLG$SRP de security.fb3 et de la base de sécurité de l'alias, à moins qu'il ne s'agisse d'une vue , je n'ai pas investigué

    J'ai créé une base de données où la base de security est incluse dans la base de données.
    Donc sur ce point, les utilisateurs sont liés à la base de données et non externe dans la base security3.fdb.
    sans oublier le databases.conf et c'est là que pour moi le bas blesse un peu


    Sur ce point, j'aurai aimé ne pas avoir comme réponse un beau message d'erreur, mais juste le libellé de l'exception.
    rien ne t'empêche de gérer l'exception et de mettre ton message


    Citation Envoyé par SYSDBA Inactif
    J'ai fait le test et il me semble que cela a modifié le compte "sysdba".
    ....
    Donc oui, on peut le rendre inactif, mais dans ce cas là, si je n'ai pas un autre compte administrateur, comment le rendre actif ?
    le propriétaire de la base est administrateur
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut à tous.

    Je vais terminer ce sujet avec les exemples sur lesquels j'ai travaillé.

    1) paramétrage du fichier "database.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
    # ------------------------------
    # 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 = true
    	DefaultDbCachePages = 50
    }
     
    #
    # Live Databases:
    #
     
    first = E:/23.FireBird/32.Privileges/Data/Base.fdb
    {
        SecurityDatabase = first
        {
            RemoteAccess = true
            DefaultDbCachePages = 50
        }
    }
    "First" est le nom de ma base de données qui a été défini dans le répertoire "E:/23.FireBird/32.Privileges/Data/".
    On remarque que coté sécurité, on utilise la base de données et non le fichier "Security3.fdb".

    A titre indicatif, mes scripts sont tous dans le répertoire "E:\23.FireBird\32.Privileges\Ex_01".

    2) Création de la base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
     
    chcp 1252 > nul
     
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
     
    IF EXIST ..\Data\Base.FDB  del /F ..\Data\Base.FDB
     
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'artemus'  -user 'artemus'
     
    @echo.
    pause
    exit
    Le compte artemus n'existe pas dans le SGBDR FireBird. Seul le compte 'sysdba' est présent (c'est le but de ses tests).
    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
    CREATE DATABASE '..\Data\Base.fdb' page_size 4096 DEFAULT CHARACTER SET WIN1252;
     
    -- ============================
    -- Création de la table de test
    -- ============================
     
    create table test (
    id  integer  generated by default as identity not null primary key,
    lib char(20)                                  not null
    );
     
    insert into test (lib) values ('un');
    insert into test (lib) values ('deux');
    insert into test (lib) values ('trois');
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
     
    commit;
     
    -- ===================================
    -- Visualisation de la base de données
    -- ===================================
     
    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 = 5
    Transaction - oldest active = 6
    Transaction - oldest snapshot = 6
    Transaction - Next = 7
    ODS = 12.0
    Database not encrypted
    Default Character set: WIN1252
     
    show tables;
           TEST
     
    exit;
     
    Appuyez sur une touche pour continuer...
    On remarque que je suis le créateur de la base de données.

    3) modification de la sécurité :
    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'  -user 'artemus'  first
     
    @echo.
    pause
    exit
    J'accède avec le compte 'artemus'.
    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
    -- ================
    -- Compte 'artemus'
    -- ================
     
    create user artemus        password 'artemus'      firstname 'Artemus'        lastname 'Gordon'  grant admin role;
     
    -- grant rdb$admin to artemus;
     
    -- ==============
    -- Compte 'james'
    -- ==============
     
    create user james          password 'james'        firstname 'James'          lastname 'West';
     
    -- ===============
    -- Compte 'jeremy'
    -- ===============
     
    create user jeremy         password 'jeremy'       firstname 'Jeremy'         lastname 'Pike';
     
    -- ==================
    -- Compte 'miguelito'
    -- ==================
     
    create user miguelito      password 'miguelito'    firstname 'Miguelito'      lastname 'Loveless';
     
    -- ================
    -- Compte 'ulysses'
    -- ================
     
    create user ulysses        password 'ulysses'      firstname 'Ulysses'        lastname 'Grant';
     
    commit;
     
    -- ====================
    -- Exception 'interdit'
    -- ====================
     
    create exception interdit 'You have no rights to view and modify the database !';
     
    -- ======================
    -- Autorisation des accès
    -- ======================
     
    SET TERM #;
     
    create trigger autorisation
    on connect as
      declare variable flag smallint default null;
    begin
      if (current_user = 'ARTEMUS') then exit;
     
      select 1 from PLG$SRP where PLG$USER_NAME = current_user into flag;
      if (flag is null) then exception interdit;
    end#
     
    SET TERM ;#
     
    commit;
     
    -- =====
    -- Users
    -- =====
     
    show users;
    Users in the database
      2 #ARTEMUS
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Le compte "artemus" n'est pas administrateur et cela ne pose aucun problème pour gérer la base de données.
    Création d'une exception que l'on verra un peu plus tard afin de bloquer les utilisateurs indésirables.

    Les autres comptes ont des rôles particuliers afin de tester justement la sécurité.

    4) les contrôles.
    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'  -user 'artemus'  first
     
    @echo.
    pause
    exit
    Toujours avec le même compte "artemus", qui je le rappelle est le créateur de la base de données 'First".
    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
    show users;
    Users in the database
      2 #ARTEMUS
     
    show database;
    Database: first
            Owner: ARTEMUS
    PAGE_SIZE 4096
    Number of DB pages allocated = 240
    Number of DB pages used = 232
    Number of DB pages free = 8
    Sweep interval = 20000
    Forced Writes are ON
    Transaction - oldest = 31
    Transaction - oldest active = 32
    Transaction - oldest snapshot = 32
    Transaction - Next = 38
    ODS = 12.0
    Database not encrypted
    Default Character set: WIN1252
     
    show tables;
           PLG$SRP                                TEST
     
    select distinct PLG$USER_NAME from PLG$SRP;
     
    PLG$USER_NAME
    ===============================
    ARTEMUS
    JAMES
    JEREMY
    MIGUELITO
    ULYSSES
     
    commit;
     
    connect "localhost:F:\Wamp\bin\firebird\courant\Security3.fdb"  user 'sysdba'  password 'masterkey';
     
    show database;
    Database: localhost:F:\Wamp\bin\firebird\courant\Security3.fdb
            Owner: SYSDBA
    PAGE_SIZE 8192
    Number of DB pages allocated = 224
    Number of DB pages used = 202
    Number of DB pages free = 22
    Sweep interval = 20000
    Forced Writes are ON
    Transaction - oldest = 32
    Transaction - oldest active = 33
    Transaction - oldest snapshot = 33
    Transaction - Next = 36
    ODS = 12.0
    Database not encrypted
    Default Character set: NONE
    Linger: 60 seconds
     
    show tables;
           PLG$SRP                                PLG$USERS
     
     
    select distinct PLG$USER_NAME from PLG$USERS;
     
    PLG$USER_NAME
    ===============================
    SYSDBA
     
    select distinct PLG$USER_NAME from PLG$SRP;
     
    PLG$USER_NAME
    ===============================
    SYSDBA
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Que constatetons ?

    Les utilisateurs créés précédemment ne sont pas stockées dans "security3.fdb" !
    C'est justement le but de la configuration du fichier "database.conf" qui prend effet ici.

    5) Visualisation 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
    @echo off
     
    chcp 1252 > nul
     
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
     
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'artemus'  -user 'artemus'  first
     
    @echo.
    pause
    exit
    Toujours avec le compte "artemus". C'est normal, car nous faisons des opérations d'administration sur la base dont nous sommes propriétaire !
    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
    -- =======
    -- Version
    -- =======
     
    SHOW VERSION;
    ISQL Version: WI-V3.0.1.32609 Firebird 3.0
    Server version:
    Firebird/Windows/AMD/Intel/x64 (access method), version "WI-V3.0.1.32609 Firebird 3.0"
    on disk structure version 12.0
     
    -- ============
    -- Utilisateurs
    -- ============
     
    SHOW USERS;
    Users in the database
      2 #ARTEMUS
     
    -- =====
    -- Rôles
    -- =====
     
    SHOW ROLES;
    There are no roles in this database
     
    -- ==========
    -- Privilèges
    -- ==========
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON PLG$SRP TO VIEW PLG$SRP_VIEW
    GRANT SELECT, UPDATE (PLG$ATTRIBUTES) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$COMMENT) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$FIRST) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$LAST) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$MIDDLE) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$SALT) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$VERIFIER) ON PLG$SRP_VIEW TO PUBLIC
    GRANT RDB$ADMIN TO ARTEMUS
     
    -- ===================
    -- Rôle 'dbsupervisor'
    -- ===================
     
    create                 role dbsupervisor;
    grant  all on test  to role dbsupervisor;
     
    -- ================
    -- Rôle 'dbreaders'
    -- ================
     
    create                    role dbreader;
    grant  select on test  to role dbreader;
     
    -- =============
    -- Rôle 'dbuser'
    -- =============
     
    create                                   role dbuser;
    grant  select, insert, update on test to role dbuser;
     
    -- ==================
    -- Rôle 'dbforbidden'
    -- ==================
     
    create role dbforbidden;
     
    -- ===================================
    -- Privilèges pour le Compte 'Ulysses'
    -- ===================================
     
    grant  create    procedure  to user ulysses                    granted by artemus;
    grant  alter any procedure  to user ulysses                    granted by artemus;
    grant  drop  any procedure  to user ulysses                    granted by artemus;
     
    grant  create    function   to user ulysses                    granted by artemus;
    grant  alter any function   to user ulysses                    granted by artemus;
    grant  drop  any function   to user ulysses                    granted by artemus;
     
    grant  create    table      to user ulysses                    granted by artemus;
    grant  alter any table      to user ulysses                    granted by artemus;
    grant  drop  any table      to user ulysses                    granted by artemus;
     
    grant  create    view       to user ulysses                    granted by artemus;
    grant  alter any view       to user ulysses                    granted by artemus;
    grant  drop  any view       to user ulysses                    granted by artemus;
     
    -- grant  create database      to user ulysses                    granted by artemus;
    grant  alter  database      to user ulysses                    granted by artemus;
    grant  drop   database      to user ulysses                    granted by artemus;
     
    grant  dbsupervisor         to user ulysses  with admin option granted by artemus;
    grant  dbreader             to user ulysses  with admin option granted by artemus;
    grant  dbuser               to user ulysses  with admin option granted by artemus;
    grant  dbforbidden          to user ulysses  with admin option granted by artemus;
     
    -- ===========================
    -- Cas particulier de 'sysdba'
    -- ===========================
     
    create role sysdba;
     
    commit;
     
    -- =====
    -- Rôles
    -- =====
     
    SHOW ROLES;
           DBFORBIDDEN                            DBREADER
           DBSUPERVISOR                           DBUSER
           SYSDBA
     
    -- ==========
    -- Privilèges
    -- ==========
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON PLG$SRP TO VIEW PLG$SRP_VIEW
    GRANT SELECT, UPDATE (PLG$ATTRIBUTES) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$COMMENT) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$FIRST) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$LAST) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$MIDDLE) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$SALT) ON PLG$SRP_VIEW TO PUBLIC
    GRANT UPDATE (PLG$VERIFIER) ON PLG$SRP_VIEW TO PUBLIC
    GRANT SELECT ON TEST TO ROLE DBREADER
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON TEST TO ROLE DBSUPERVISOR
    GRANT INSERT, SELECT, UPDATE ON TEST TO ROLE DBUSER
    GRANT DBFORBIDDEN TO ULYSSES WITH ADMIN OPTION
    GRANT DBREADER TO ULYSSES WITH ADMIN OPTION
    GRANT DBSUPERVISOR TO ULYSSES WITH ADMIN OPTION
    GRANT DBUSER TO ULYSSES WITH ADMIN OPTION
    GRANT RDB$ADMIN TO ARTEMUS
    GRANT ALTER DATABASE TO USER ULYSSES
    GRANT DROP DATABASE TO USER ULYSSES
    Statement failed, SQLSTATE = 28000
    Your login SYSDBA is same as one of the SQL role name. Ask your database administrator to set up a valid Firebird login.
    -IProvider::attachDatabase failed when working with CREATE DATABASE grants
    After line 93 in file 4.Privilege_Owner.sql
    GRANT CREATE TABLE TO USER ULYSSES
    GRANT ALTER ANY TABLE TO USER ULYSSES
    GRANT DROP ANY TABLE TO USER ULYSSES
    GRANT CREATE VIEW TO USER ULYSSES
    GRANT ALTER ANY VIEW TO USER ULYSSES
    GRANT DROP ANY VIEW TO USER ULYSSES
    GRANT CREATE PROCEDURE TO USER ULYSSES
    GRANT ALTER ANY PROCEDURE TO USER ULYSSES
    GRANT DROP ANY PROCEDURE TO USER ULYSSES
    GRANT CREATE FUNCTION TO USER ULYSSES
    GRANT ALTER ANY FUNCTION TO USER ULYSSES
    GRANT DROP ANY FUNCTION TO USER ULYSSES
     
    -- ============================
    -- Aucun Privilèges pour Public
    -- ============================
     
    revoke all     on all                 from view PLG$SRP_VIEW;
    revoke all     on all                 from user public;
    grant  select  on table PLG$SRP_VIEW  to   user james, jeremy, ulysses;
     
    commit;
     
    -- ==========
    -- Privilèges
    -- ==========
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT SELECT ON PLG$SRP_VIEW TO USER JAMES
    GRANT SELECT ON PLG$SRP_VIEW TO USER JEREMY
    GRANT SELECT ON PLG$SRP_VIEW TO USER ULYSSES
    GRANT SELECT ON TEST TO ROLE DBREADER
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON TEST TO ROLE DBSUPERVISOR
    GRANT INSERT, SELECT, UPDATE ON TEST TO ROLE DBUSER
    GRANT DBFORBIDDEN TO ULYSSES WITH ADMIN OPTION
    GRANT DBREADER TO ULYSSES WITH ADMIN OPTION
    GRANT DBSUPERVISOR TO ULYSSES WITH ADMIN OPTION
    GRANT DBUSER TO ULYSSES WITH ADMIN OPTION
    GRANT RDB$ADMIN TO ARTEMUS
    GRANT ALTER DATABASE TO USER ULYSSES
    GRANT DROP DATABASE TO USER ULYSSES
    Statement failed, SQLSTATE = 28000
    Your login SYSDBA is same as one of the SQL role name. Ask your database administrator to set up a valid Firebird login.
    -IProvider::attachDatabase failed when working with CREATE DATABASE grants
    After line 109 in file 4.Privilege_Owner.sql
    GRANT CREATE TABLE TO USER ULYSSES
    GRANT ALTER ANY TABLE TO USER ULYSSES
    GRANT DROP ANY TABLE TO USER ULYSSES
    GRANT CREATE VIEW TO USER ULYSSES
    GRANT ALTER ANY VIEW TO USER ULYSSES
    GRANT DROP ANY VIEW TO USER ULYSSES
    GRANT CREATE PROCEDURE TO USER ULYSSES
    GRANT ALTER ANY PROCEDURE TO USER ULYSSES
    GRANT DROP ANY PROCEDURE TO USER ULYSSES
    GRANT CREATE FUNCTION TO USER ULYSSES
    GRANT ALTER ANY FUNCTION TO USER ULYSSES
    GRANT DROP ANY FUNCTION TO USER ULYSSES
     
    -- ========================
    -- Visualisation des droits
    -- ========================
     
      select  *
        from  rdb$user_privileges
       where  rdb$grantor is not null
    order by  rdb$relation_name;
     
    RDB$USER                        RDB$GRANTOR                     RDB$PRIVILEGE RDB$GRANT_OPTION RDB$RELATION_NAME               RDB$FIELD_NAME                  RDB$USER_TYPE RDB$OBJECT_TYPE
    =============================== =============================== ============= ================ =============================== =============================== ============= ===============
    ULYSSES                         ARTEMUS                         M                            2 DBFORBIDDEN                     <null>                                      8              13
    ULYSSES                         ARTEMUS                         M                            2 DBREADER                        <null>                                      8              13
    ULYSSES                         ARTEMUS                         M                            2 DBSUPERVISOR                    <null>                                      8              13
    ULYSSES                         ARTEMUS                         M                            2 DBUSER                          <null>                                      8              13
    ARTEMUS                         ARTEMUS                         G                            1 INTERDIT                        <null>                                      8               7
    ARTEMUS                         ARTEMUS                         S                            1 PLG$SRP                         <null>                                      8               0
    ARTEMUS                         ARTEMUS                         I                            1 PLG$SRP                         <null>                                      8               0
    ARTEMUS                         ARTEMUS                         U                            1 PLG$SRP                         <null>                                      8               0
    ARTEMUS                         ARTEMUS                         D                            1 PLG$SRP                         <null>                                      8               0
    ARTEMUS                         ARTEMUS                         R                            1 PLG$SRP                         <null>                                      8               0
    ARTEMUS                         ARTEMUS                         S                            1 PLG$SRP_VIEW                    <null>                                      8               0
    ARTEMUS                         ARTEMUS                         I                            1 PLG$SRP_VIEW                    <null>                                      8               0
    ARTEMUS                         ARTEMUS                         U                            1 PLG$SRP_VIEW                    <null>                                      8               0
    ARTEMUS                         ARTEMUS                         D                            1 PLG$SRP_VIEW                    <null>                                      8               0
    ARTEMUS                         ARTEMUS                         R                            1 PLG$SRP_VIEW                    <null>                                      8               0
    JAMES                           ARTEMUS                         S                            0 PLG$SRP_VIEW                    <null>                                      8               0
    JEREMY                          ARTEMUS                         S                            0 PLG$SRP_VIEW                    <null>                                      8               0
    ULYSSES                         ARTEMUS                         S                            0 PLG$SRP_VIEW                    <null>                                      8               0
    ARTEMUS                         ARTEMUS                         G                            1 RDB$1                           <null>                                      8               9
    ARTEMUS                         ARTEMUS                         G                            1 RDB$1                           <null>                                      8              14
     
    RDB$USER                        RDB$GRANTOR                     RDB$PRIVILEGE RDB$GRANT_OPTION RDB$RELATION_NAME               RDB$FIELD_NAME                  RDB$USER_TYPE RDB$OBJECT_TYPE
    =============================== =============================== ============= ================ =============================== =============================== ============= ===============
    ARTEMUS                         ARTEMUS                         G                            1 RDB$2                           <null>                                      8               9
    ARTEMUS                         ARTEMUS                         G                            1 RDB$3                           <null>                                      8               9
    ARTEMUS                         ARTEMUS                         G                            1 RDB$4                           <null>                                      8               9
    ARTEMUS                         ARTEMUS                         G                            1 RDB$5                           <null>                                      8               9
    ARTEMUS                         ARTEMUS                         M                            0 RDB$ADMIN                       <null>                                      8              13
    ULYSSES                         ARTEMUS                         L                            0 SQL$DATABASE                    <null>                                      8              20
    ULYSSES                         ARTEMUS                         O                            0 SQL$DATABASE                    <null>                                      8              20
    ULYSSES                         ARTEMUS                         C                            0 SQL$FUNCTIONS                   <null>                                      8              24
    ULYSSES                         ARTEMUS                         L                            0 SQL$FUNCTIONS                   <null>                                      8              24
    ULYSSES                         ARTEMUS                         O                            0 SQL$FUNCTIONS                   <null>                                      8              24
    ULYSSES                         ARTEMUS                         C                            0 SQL$PROCEDURES                  <null>                                      8              23
    ULYSSES                         ARTEMUS                         L                            0 SQL$PROCEDURES                  <null>                                      8              23
    ULYSSES                         ARTEMUS                         O                            0 SQL$PROCEDURES                  <null>                                      8              23
    ULYSSES                         ARTEMUS                         C                            0 SQL$TABLES                      <null>                                      8              21
    ULYSSES                         ARTEMUS                         L                            0 SQL$TABLES                      <null>                                      8              21
    ULYSSES                         ARTEMUS                         O                            0 SQL$TABLES                      <null>                                      8              21
    ULYSSES                         ARTEMUS                         C                            0 SQL$VIEWS                       <null>                                      8              22
    ULYSSES                         ARTEMUS                         L                            0 SQL$VIEWS                       <null>                                      8              22
    ULYSSES                         ARTEMUS                         O                            0 SQL$VIEWS                       <null>                                      8              22
    ARTEMUS                         ARTEMUS                         S                            1 TEST                            <null>                                      8               0
     
    RDB$USER                        RDB$GRANTOR                     RDB$PRIVILEGE RDB$GRANT_OPTION RDB$RELATION_NAME               RDB$FIELD_NAME                  RDB$USER_TYPE RDB$OBJECT_TYPE
    =============================== =============================== ============= ================ =============================== =============================== ============= ===============
    ARTEMUS                         ARTEMUS                         I                            1 TEST                            <null>                                      8               0
    ARTEMUS                         ARTEMUS                         U                            1 TEST                            <null>                                      8               0
    ARTEMUS                         ARTEMUS                         D                            1 TEST                            <null>                                      8               0
    ARTEMUS                         ARTEMUS                         R                            1 TEST                            <null>                                      8               0
    DBSUPERVISOR                    ARTEMUS                         S                            0 TEST                            <null>                                     13               0
    DBSUPERVISOR                    ARTEMUS                         I                            0 TEST                            <null>                                     13               0
    DBSUPERVISOR                    ARTEMUS                         U                            0 TEST                            <null>                                     13               0
    DBSUPERVISOR                    ARTEMUS                         D                            0 TEST                            <null>                                     13               0
    DBSUPERVISOR                    ARTEMUS                         R                            0 TEST                            <null>                                     13               0
    DBREADER                        ARTEMUS                         S                            0 TEST                            <null>                                     13               0
    DBUSER                          ARTEMUS                         S                            0 TEST                            <null>                                     13               0
    DBUSER                          ARTEMUS                         I                            0 TEST                            <null>                                     13               0
    DBUSER                          ARTEMUS                         U                            0 TEST                            <null>                                     13               0
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Nous sommes bien dans la dernière version de FireBird "V3.0.1.32609 Firebird 3.0" en date où ce message a été écrit.

    Tous les privilèges ont été créés pour faire les tests de sécurités.

    6) Privilège accordé par l'utilisateur "ulysses".
    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 'ulysses'  -role 'dbsupervisor' -user 'ulysses'  first
     
    @echo.
    pause
    exit
    Nous changeons de compte et nous nous mettons ("Ulysses Grant") celui qui sera délégué pour gérer les privilèges.
    La création du compte reste le privilège du compte "artemus".
    Tandis que le compte "ulysses" qui est "dbsupervisor" va attribuer les privilèges aux autres utilisateurs.
    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
    -- ============
    -- Utilisateurs
    -- ============
     
    SHOW USERS;
    Users in the database
      2 #ULYSSES
     
    -- ===========================
    -- Privilèges pour les Comptes
    -- ===========================
     
    grant  dbreader     to jeremy;
    grant  dbuser       to james;
    grant  dbforbidden  to miguelito;
     
    commit;
     
    -- ==========
    -- Privilèges
    -- ==========
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT SELECT ON PLG$SRP_VIEW TO USER JAMES
    GRANT SELECT ON PLG$SRP_VIEW TO USER JEREMY
    GRANT SELECT ON PLG$SRP_VIEW TO USER ULYSSES
    GRANT SELECT ON TEST TO ROLE DBREADER
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON TEST TO ROLE DBSUPERVISOR
    GRANT INSERT, SELECT, UPDATE ON TEST TO ROLE DBUSER
    GRANT DBFORBIDDEN TO MIGUELITO GRANTED BY ULYSSES
    GRANT DBFORBIDDEN TO ULYSSES WITH ADMIN OPTION
    GRANT DBREADER TO JEREMY GRANTED BY ULYSSES
    GRANT DBREADER TO ULYSSES WITH ADMIN OPTION
    GRANT DBSUPERVISOR TO ULYSSES WITH ADMIN OPTION
    GRANT DBUSER TO JAMES GRANTED BY ULYSSES
    GRANT DBUSER TO ULYSSES WITH ADMIN OPTION
    GRANT RDB$ADMIN TO ARTEMUS
    GRANT ALTER DATABASE TO USER ULYSSES
    GRANT DROP DATABASE TO USER ULYSSES
    Statement failed, SQLSTATE = 28000
    Your login SYSDBA is same as one of the SQL role name. Ask your database administrator to set up a valid Firebird login.
    -IProvider::attachDatabase failed when working with CREATE DATABASE grants
    After line 15 in file 5.Privilege_Supervisor.sql
    GRANT CREATE TABLE TO USER ULYSSES
    GRANT ALTER ANY TABLE TO USER ULYSSES
    GRANT DROP ANY TABLE TO USER ULYSSES
    GRANT CREATE VIEW TO USER ULYSSES
    GRANT ALTER ANY VIEW TO USER ULYSSES
    GRANT DROP ANY VIEW TO USER ULYSSES
    GRANT CREATE PROCEDURE TO USER ULYSSES
    GRANT ALTER ANY PROCEDURE TO USER ULYSSES
    GRANT DROP ANY PROCEDURE TO USER ULYSSES
    GRANT CREATE FUNCTION TO USER ULYSSES
    GRANT ALTER ANY FUNCTION TO USER ULYSSES
    GRANT DROP ANY FUNCTION TO USER ULYSSES
     
    -- ========================
    -- Visualisation des droits
    -- ========================
     
    select * from rdb$user_privileges where rdb$grantor = current_user;
     
    RDB$USER                        RDB$GRANTOR                     RDB$PRIVILEGE RDB$GRANT_OPTION RDB$RELATION_NAME               RDB$FIELD_NAME                  RDB$USER_TYPE RDB$OBJECT_TYPE
    =============================== =============================== ============= ================ =============================== =============================== ============= ===============
    JEREMY                          ULYSSES                         M                            0 DBREADER                        <null>                                      8              13
    JAMES                           ULYSSES                         M                            0 DBUSER                          <null>                                      8              13
    MIGUELITO                       ULYSSES                         M                            0 DBFORBIDDEN                     <null>                                      8              13
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    L'erreur que nous voyons dans ce résultat est voulue.
    C'est une astuce pour interdire au compte "sysdba" qui est administrateur, d'accéder à la base de données auquel il n'a aucun droit.

    Nous remarquons que "ulysses" a donné quelques privilèges aux compte :
    --> "jeremy" qui est juste un lecteur.
    --> "james" qui est un utilisateur (lecture, modification et suppression)
    --> miguelito n'a aucun privilège.

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

  7. #7
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Voici la suite :

    7) changement du propriétaire.
    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'  first
     
    @echo.
    pause
    exit
    Nous accédons avec le compte "artemus", propriétaire de la base de données "first".
    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
    -- =====================
    -- L'ancien propriétaire
    -- =====================
     
    select  distinct rdb$owner_name as database_owner
      from  rdb$relations
     where  rdb$system_flag = 1;
     
    DATABASE_OWNER
    ===============================
    ARTEMUS
     
     
    -- ==========================
    -- Changement de Propriétaire
    -- ==========================
     
    update  rdb$relations
       set  rdb$owner_name    = 'PATRON'
     where  rdb$owner_name    = 'ARTEMUS';
    Statement failed, SQLSTATE = 42000
    UPDATE operation is not allowed for system table RDB$RELATIONS
    After line 7 in file 6.Owner.sql
     
    -- =======================
    -- Le nouveau propriétaire
    -- =======================
     
    select  distinct rdb$owner_name as database_owner
      from  rdb$relations
     where  rdb$system_flag = 1;
     
    DATABASE_OWNER
    ===============================
    ARTEMUS
     
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Comme on le voit, le changement du propriétaire n'a pas fonctionné. Je n'ai pas approfondi la question.
    Si quelqu'un sait comment faire avec la version "3.0.1", je serai heureux de découvrir la solution.

    8) les tests !
    Nous nous trouvons dans le cœur de la problématique sécuritaire de FireBird.
    Voici le script qui va servir a tester cette sécurité :
    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
     
    SHOW USERS;
     
    select * from test;
     
    insert into test (id,lib) values (4, 'quatre');
    insert into test (id,lib) values (5, 'cinq');
    insert into test (id,lib) values (6, 'six');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
     
    select * from test;
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
     
    drop table sample;
     
    drop database;
     
    quit;
    9) test du lecteur "dbreader".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.test.sql  -quiet  -password 'jeremy'  -role 'dbreader'  -user 'jeremy'  first
     
    @echo.
    pause
    exit
    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
     
    SHOW USERS;
    Users in the database
      2 #JEREMY
     
    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 4 in file 7.test.sql
    insert into test (id,lib) values (5, 'cinq');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 6 in file 7.test.sql
    insert into test (id,lib) values (6, 'six');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 7 in file 7.test.sql
     
    update test set lib='one' where id=1;
    Statement failed, SQLSTATE = 28000
    no permission for UPDATE access to TABLE TEST
    After line 8 in file 7.test.sql
     
    delete from test where id=3;
    Statement failed, SQLSTATE = 28000
    no permission for DELETE access to TABLE TEST
    After line 10 in file 7.test.sql
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 un
               2 deux
               3 trois
     
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
    Statement failed, SQLSTATE = 42000
    unsuccessful metadata update
    -CREATE TABLE SAMPLE failed
    -There is no privilege for this operation
    After line 14 in file 7.test.sql
     
    drop table sample;
    Statement failed, SQLSTATE = 42S02
    unsuccessful metadata update
    -DROP TABLE SAMPLE failed
    -SQL error code = -607
    -Invalid command
    -Table SAMPLE does not exist
    After line 19 in file 7.test.sql
     
    drop database;
    Statement failed, SQLSTATE = 28000
    no permission for drop access to database first
    After line 21 in file 7.Test.sql
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Jeremy ne peut que lire la base et ne peut rien faire d'autre !

    10) test de l'utilisateur : "dbuser".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.Test.sql  -quiet  -password 'james'  -role 'dbuser'  -user 'james'  first
     
    @echo.
    pause
    exit
    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
     
    SHOW USERS;
    Users in the database
      2 #JAMES
     
    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');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
    Statement failed, SQLSTATE = 28000
    no permission for DELETE access to TABLE TEST
    After line 10 in file 7.Test.sql
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 one
               2 deux
               3 trois
               4 quatre
               5 cinq
               6 six
     
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
    Statement failed, SQLSTATE = 42000
    unsuccessful metadata update
    -CREATE TABLE SAMPLE failed
    -There is no privilege for this operation
    After line 14 in file 7.Test.sql
     
    drop table sample;
    Statement failed, SQLSTATE = 42S02
    unsuccessful metadata update
    -DROP TABLE SAMPLE failed
    -SQL error code = -607
    -Invalid command
    -Table SAMPLE does not exist
    After line 19 in file 7.Test.sql
     
    drop database;
    Statement failed, SQLSTATE = 28000
    no permission for drop access to database first
    After line 21 in file 7.Test.sql
     
    quit;
     
    Appuyez sur une touche pour continuer...
    le compte "james" peut procéder à quelques modifications dans la base de données.

    11) test d'interdiction : "dbforbidden".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.Test.sql  -quiet  -password 'migulito'  -role 'dbforbidden'  -user 'miguelito'  first
     
    @echo.
    pause
    exit
    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
     
    SHOW USERS;
    Statement failed, SQLSTATE = 28000
    find/display record error
    -no permission for SELECT access to TABLE PLG$SRP_VIEW
    After line 0 in file 7.Test.sql
    Command error: SHOW USERS
     
    select * from test;
    Statement failed, SQLSTATE = 28000
    no permission for SELECT access to TABLE TEST
    After line 2 in file 7.Test.sql
     
    insert into test (id,lib) values (4, 'quatre');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 4 in file 7.Test.sql
    insert into test (id,lib) values (5, 'cinq');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 6 in file 7.Test.sql
    insert into test (id,lib) values (6, 'six');
    Statement failed, SQLSTATE = 28000
    no permission for INSERT access to TABLE TEST
    After line 7 in file 7.Test.sql
     
    update test set lib='one' where id=1;
    Statement failed, SQLSTATE = 28000
    no permission for SELECT access to TABLE TEST
    After line 8 in file 7.Test.sql
     
    delete from test where id=3;
    Statement failed, SQLSTATE = 28000
    no permission for SELECT access to TABLE TEST
    After line 10 in file 7.Test.sql
     
    select * from test;
    Statement failed, SQLSTATE = 28000
    no permission for SELECT access to TABLE TEST
    After line 12 in file 7.Test.sql
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
    Statement failed, SQLSTATE = 42000
    unsuccessful metadata update
    -CREATE TABLE SAMPLE failed
    -There is no privilege for this operation
    After line 14 in file 7.Test.sql
     
    drop table sample;
    Statement failed, SQLSTATE = 42S02
    unsuccessful metadata update
    -DROP TABLE SAMPLE failed
    -SQL error code = -607
    -Invalid command
    -Table SAMPLE does not exist
    After line 19 in file 7.Test.sql
     
    drop database;
    Statement failed, SQLSTATE = 28000
    no permission for drop access to database first
    After line 21 in file 7.Test.sql
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Aucun accès à Miguelito !!!

    12) test de "Ulysses" : "dbsupervisor".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.Test.sql  -quiet  -password 'ulysses'  -role 'dbsupervisor'  -user 'ulysses'  first
     
    @echo.
    pause
    exit
    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
     
    SHOW USERS;
    Users in the database
      2 #ULYSSES
     
    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');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 one
               2 deux
               4 quatre
               5 cinq
               6 six
     
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
     
    drop table sample;
     
    drop database;
    Statement failed, SQLSTATE = 28000
    no permission for drop access to database first
    After line 21 in file 7.Test.sql
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Ulysses peut faire beaucoup de choses sauf détruire la base de données.

    13) test du compte "sysdba".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.Test.sql  -quiet  -password 'masterkey'  -role 'RDB$ADMIN'  -user 'sysdba'  first
     
    @echo.
    pause
    exit
    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
    Statement failed, SQLSTATE = 28000
    Your login SYSDBA is same as one of the SQL role name. Ask your database administrator to set up a valid Firebird login.
    After line 0 in file 7.Test.sql
     
    SHOW USERS;
    Command error: SHOW USERS
     
    select * from test;
     
    insert into test (id,lib) values (4, 'quatre');
    insert into test (id,lib) values (5, 'cinq');
    insert into test (id,lib) values (6, 'six');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
     
    select * from test;
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
     
    drop table sample;
     
    drop database;
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Bien que le compte "sysdba" soit administrateur, il n'a aucun accès sur la base de données "first".
    C'est justement le but recherché et ça fonctionne !

    14) le compte "administrator".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.Test.sql  -quiet  -password 'administrator'  -role 'RDB$ADMIN'  -user 'administrator'  first
     
    @echo.
    pause
    exit
    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
    Statement failed, SQLSTATE = HY000
    exception 1
    -INTERDIT
    -You have no rights to view and modify the database !
    -At trigger 'AUTORISATION' line: 8, col: 26
    After line 0 in file 7.Test.sql
     
    SHOW USERS;
    Command error: SHOW USERS
     
    select * from test;
     
    insert into test (id,lib) values (4, 'quatre');
    insert into test (id,lib) values (5, 'cinq');
    insert into test (id,lib) values (6, 'six');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
     
    select * from test;
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
     
    drop table sample;
     
    drop database;
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Ce compte n'a pas été prévu dans les privilège, afin de le rejeter.
    Il est administrateur et comme on le voie, l'interdiction a bien fonctionné.
    Seul les comptes créés par le propriétaire "artemus", dans la base de données "first" sont gérés.
    Tous les autres comptes seront interdits !

    14) Le propriétaire "artemus".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
     
    chcp 1252 > nul
     
    isql  -charset win1252  -echo  -input 7.Test.sql  -quiet  -password 'artemus'  -user 'artemus'  first
     
    @echo.
    pause
    exit
    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
     
    SHOW USERS;
    Users in the database
      2 #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');
     
    update test set lib='one' where id=1;
     
    delete from test where id=3;
     
    select * from test;
     
              ID LIB
    ============ ====================
               1 one
               2 deux
               4 quatre
               5 cinq
               6 six
     
     
    create table sample (
    id integer not null primary key,
    val decimal(15,2) not null
    );
     
    drop table sample;
     
    drop database;
     
    quit;
     
    Appuyez sur une touche pour continuer...
    Comme il est le propriétaire, il a pu même détruire la base de données.

    Ceci montre que selon le type d'utilisateur, on peut autoriser ou interdire les accès à la base de données "first".

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

  8. #8
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Et voici la fin :

    Nous avons recréé la base de données, puisque avec le test du propriétaire "artemus", elle a été détruite.
    Nous avons repris les §2, §3, §4, §5 et §6.

    15) on lance une attaque à partir du compte "sysdba", contre le trigger "autorisation" afin de le rendre inactif.
    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  -nodbtriggers  -password 'masterkey'  -role 'rdb$admin'  -user 'sysdba'  first
     
    @echo.
    pause
    exit
    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
    Statement failed, SQLSTATE = 28000
    Your login SYSDBA is same as one of the SQL role name. Ask your database administrator to set up a valid Firebird login.
    After line 0 in file 20.No_Trigger_Sysdba.sql
    show users;
    Command error: show users
     
    alter trigger autorisation inactive;
     
    commit;
     
    show trigger autorisation;
    Command error: show trigger autorisation
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Le test n'a pas fonctionné.
    C'est normal car le compte "sysdba" a été bloqué.

    16) on lance une attaque à partir du compte "administrator", contre le trigger "autorisation" afin de le rendre inactif.
    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  -nodbtriggers  -password 'administrator'  -role 'rdb$admin'  -user 'administrator'  first
     
    @echo.
    pause
    exit
    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
    Statement failed, SQLSTATE = 28000
    Unable to perform operation.  You must be either SYSDBA or owner of the database
    After line 0 in file 22.No_Trigger_Administrator.sql
    show users;
    Command error: show users
     
    alter trigger autorisation inactive;
     
    commit;
     
    show trigger autorisation;
    Command error: show trigger autorisation
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Cela ne fonctionne pas non plus avec le compte "administrator".

    17) nettoyage 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
    @echo off
     
    chcp 1252 > nul
     
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
     
    isql  -charset win1252  -echo  -input %FIC%  -quiet  -password 'artemus'  -user 'artemus'  first
     
    @echo.
    pause
    exit
    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
     
    -- ==========
    -- Privilèges
    -- ==========
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT SELECT ON PLG$SRP_VIEW TO USER JAMES
    GRANT SELECT ON PLG$SRP_VIEW TO USER JEREMY
    GRANT SELECT ON PLG$SRP_VIEW TO USER ULYSSES
    GRANT SELECT ON TEST TO ROLE DBREADER
    GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON TEST TO ROLE DBSUPERVISOR
    GRANT INSERT, SELECT, UPDATE ON TEST TO ROLE DBUSER
    GRANT DBFORBIDDEN TO MIGUELITO GRANTED BY ULYSSES
    GRANT DBFORBIDDEN TO ULYSSES WITH ADMIN OPTION
    GRANT DBREADER TO JEREMY GRANTED BY ULYSSES
    GRANT DBREADER TO ULYSSES WITH ADMIN OPTION
    GRANT DBSUPERVISOR TO ULYSSES WITH ADMIN OPTION
    GRANT DBUSER TO JAMES GRANTED BY ULYSSES
    GRANT DBUSER TO ULYSSES WITH ADMIN OPTION
    GRANT RDB$ADMIN TO ARTEMUS
    GRANT ALTER DATABASE TO USER ULYSSES
    GRANT DROP DATABASE TO USER ULYSSES
    Statement failed, SQLSTATE = 28000
    Your login SYSDBA is same as one of the SQL role name. Ask your database administrator to set up a valid Firebird login.
    -IProvider::attachDatabase failed when working with CREATE DATABASE grants
    After line 0 in file 30.Clear_Privileges.sql
    GRANT CREATE TABLE TO USER ULYSSES
    GRANT ALTER ANY TABLE TO USER ULYSSES
    GRANT DROP ANY TABLE TO USER ULYSSES
    GRANT CREATE VIEW TO USER ULYSSES
    GRANT ALTER ANY VIEW TO USER ULYSSES
    GRANT DROP ANY VIEW TO USER ULYSSES
    GRANT CREATE PROCEDURE TO USER ULYSSES
    GRANT ALTER ANY PROCEDURE TO USER ULYSSES
    GRANT DROP ANY PROCEDURE TO USER ULYSSES
    GRANT CREATE FUNCTION TO USER ULYSSES
    GRANT ALTER ANY FUNCTION TO USER ULYSSES
    GRANT DROP ANY FUNCTION TO USER ULYSSES
     
    -- =====
    -- Rôles
    -- =====
     
    SHOW ROLES;
           DBFORBIDDEN                            DBREADER
           DBSUPERVISOR                           DBUSER
           SYSDBA
     
    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 SQL$431
    DBREADER                        ARTEMUS                                    <null>               0 SQL$432
    DBUSER                          ARTEMUS                                    <null>               0 SQL$433
    DBFORBIDDEN                     ARTEMUS                                    <null>               0 SQL$434
    SYSDBA                          ARTEMUS                                    <null>               0 SQL$435
     
     
    -- =====================
    -- Suppression des rôles
    -- =====================
     
    drop role dbsupervisor;
    drop role dbreader;
    drop role dbuser;
    drop role dbforbidden;
    drop role sysdba;
     
    -- ==========================
    -- Suppression des privilèges
    -- ==========================
     
    revoke all on all from USER jeremy, james, miguelito, ulysses;
    After line 24 in file 30.Clear_Privileges.sql
    Warning: ALL on ALL is not granted to MIGUELITO.
     
    commit;
     
    -- ==========
    -- Privilèges
    -- ==========
     
    SHOW GRANT;
     
    /* Grant permissions for this database */
    GRANT RDB$ADMIN TO ARTEMUS
     
    -- =====
    -- Rôles
    -- =====
     
    SHOW ROLES;
    There are no roles in this database
     
    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...
    18) nettoyage de la sécurité.
    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'  first
     
    @echo.
    pause
    exit
    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
    show users;
    Users in the database
      2 #ARTEMUS                             0  JAMES
      0  JEREMY                              0  MIGUELITO
      0  ULYSSES
     
    drop user ulysses;
    drop user jeremy;
    drop user james;
    drop user miguelito;
    drop user artemus;
     
    commit;
     
    show users;
    Users in the database
      2 #ARTEMUS
     
    exit;
     
    Appuyez sur une touche pour continuer...
    19) suppression de la base de données.
    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'  -user 'artemus'  first
     
    @echo.
    pause
    exit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    show users;
    Users in the database
      2 #ARTEMUS
     
    drop database;
     
    exit;
     
    Appuyez sur une touche pour continuer...
    20) récapitulatif.

    20-a) il n'est pas nécessaire de créer un compte ayant le rôle administrateur pour créer une base de données.
    Le compte ayant aucun privilège sera le compte propriétaire de la base de données et de surcroît, sur cette base de données, il aura tous les droits comme on vient le de voir.

    20-b) il est conseillé de créer des rôles afin d'attribuer des privilèges particuliers aux utilisateurs comme nous l'avons fait.
    Ceci permet de déléguer à chaque utilisateur une fonction, ce qui permet de déléguer le travail à faire sur la base de données.

    20-c) pour interdire les accès aux comptes qui ne sont pas déclarés dans la base de données, il faut utiliser un trigger au moment de la connexion de l'utilisateur.

    20-d) que reste-t-il à faire ?
    Le premier niveau de sécurité est de mettre la base de données dans un répertoire, ou seulement les utilisateurs autorisés peuvent y accéder.
    C'est le niveau de sécurité qui est géré soit par Windows, soit par Linux, c'est-à-dire le système d'exploitation.
    C'est un point à ne pas négliger !!!

    20-e) est-ce que nous avons résolu tous les problèmes de sécurité ?
    Vu que la sécurité se trouve dans la base de données et non à l'extérieur, il se peut que cela résout toutes les tentatives de hacking.
    Mais vu que je ne suis pas un expert en ce domaine, la question reste ouverte.

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

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Tu devrais en faire un papier !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut SQLPRO.

    Non. Ce sont juste des tests pour vérifier le fonctionnement de la sécurité, nouvellement mis en place avec la version 3.0.0.

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

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Bonjour Artemus,
    Je n'ai malheureusement pas le temps de me pencher sur le sujet et notamment les changements qu'apporte firebird 3, mais j'ai cependant lu la fin de ton message "Récapitulatif" sur lequel je vais faire des remarques.

    Citation Envoyé par Artemus24 Voir le message
    20-c) pour interdire les accès aux comptes qui ne sont pas déclarés dans la base de données, il faut utiliser un trigger au moment de la connexion de l'utilisateur.
    Version <3.0
    La création d'un nouvel utilisateur permet de s'identifier sur le serveur Firebird . Effectivement on ne parles pas de droit sur les bases (a Priori en Version>3 vu qu'on peut avoir des utilisateur Spécifique par base c'est un changement).
    Par contre ce n'est pas parce-qu’on a créé un compte dans firebird que celui-ci pourra lire toutes les bases se trouvant sur le serveur. Si on à géré correctement les grants (en s'aidant des ROLES) la création d'un nouvel utilisateur ne suffit pas pour qu'il puisse travailler sur cette base.
    Le nouvel utilisateur pourra effectivement se connecter à la base mais ne pourra rien faire (pas de select/update/insert/delete). Il faut lui attribuer ces droits (grant LeRoleQuiALesDroits to NomUtilisateur;) Ce grant est spécifique à la base.

    Il n'est donc pas nécessaire de faire un trigger au moment de la connexion.


    Citation Envoyé par Artemus24 Voir le message
    20-d) que reste-t-il à faire ?
    Le premier niveau de sécurité est de mettre la base de données dans un répertoire, ou seulement les utilisateurs autorisés peuvent y accéder.
    C'est le niveau de sécurité qui est géré soit par Windows, soit par Linux, c'est-à-dire le système d'exploitation.
    C'est un point à ne pas négliger !!!
    Effectivement la sécurité "principale" n'est pas coté firebird mais coté du système d'exploitation. Pour protéger vos données, il ne faut pas que les utilisateurs aient accès au fichier de la base de données (AUCUN !)
    AUCUN (j'insiste) utilisateur ne doit avoir accès au répertoire contenant la base de données. Autrement dit les bases de données ne doivent pas être dans des répertoires partagés.

  12. #12
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut Barbibulle.

    Merci pour ton intervention et le fait de compléter mon manque de précision !

    1) La création d'un nouvel utilisateur se fait spécifiquement à une base de données.
    Autrement dit, les droits de cet utilisateur sont associés et propre à cette base de données.
    Pour une autre base de données, il faudra à nouveau spécifier les droits de cet utilisateur.

    Nous n'avons plus besoin de faire l'usage du fichier "security3.fdb" pour spécifier les droits des utilisateurs.
    En fait, tout dépend comment on gère la sécurité. Dans mon exemple, elle est incluse à la base de données.
    Ce qui rend infalsifiable les droits attribués à la base de données.

    Alors pourquoi utiliser ce déclencheur pour protéger les accès à la base de données ?
    C'est juste une sécurité supplémentaire pour afficher un message d'interdiction.

    2) Il est bien d'insister sur le niveau de sécurité, des accès au répertoire où se trouve la base de données.
    Tous les utilisateurs doivent obligatoirement passer par le serveur FireBird.
    Sauf que ces utilisateurs sont des comptes FireBird et non des comptes Windows ou Linux, c'est-à-dire du système d'exploitation.
    J'insiste sur le fait de faire cette distinction !

    Il découle de cela, qu'un compte administrateur (windows ou linux) aura les accès au répertoire contenant les bases des données.
    Que ce répertoire sera accessible qu'au travers du serveur FireBird.
    Pour les autres comptes utilisateurs (windows ou linux), on accédera à la base de données par un alias.
    Et que les droits d'accès à FireBird, seront définis spécifiquement pour chaque compte utilisateur.
    En aucune façon, le mot de passe sera en clair dans un script FireBird ou autre.

    3) le seul doute qui persiste dans ces tests, est de savoir s'il existe un moyen d'outrepasser la sécurité mise en place.
    Mon manque de connaissance de FireBird ne m'a pas permis de "pirater" ma propre base de données.
    C'est sur ce point que j'aimerai avoir plus de précision.

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

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Artemus24 Voir le message
    Nous n'avons plus besoin de faire l'usage du fichier "security3.fdb" pour spécifier les droits des utilisateurs.
    En fait, tout dépend comment on gère la sécurité. Dans mon exemple, elle est incluse à la base de données.
    Ce qui rend infalsifiable les droits attribués à la base de données.
    C'est là la clé de voûte de ton raisonnement : une seule base dont le fichier sécurité est inclus.
    maintenant s'il y a plusieurs bases on n'a peut être pas envie d'inclure un fichier sécurité dans chaque (ce qui risque de poser des problèmes autres)
    Dans ce cas ce fameux trigger peut retrouver de son utilité. Mais du coup, il n'est plus possible dans ce trigger d'utiliser PLG$SRP seul d'où ma remarque faite d'utiliser SEC$USERS à la place

    3) le seul doute qui persiste dans ces tests, est de savoir s'il existe un moyen d'outrepasser la sécurité mise en place.
    si un possible "pirate" n'a que le fichier fdb 2 possibilités
    1- le fichier sécurité est inclus : très difficile de retrouver un mot de passe crypté, au mieux retrouvera-t-il les noms d'utilisateurs, bon point de départ sauf si la base est cryptée !
    2- le fichier sécurité n'est pas inclus (le bon vieux security3.fdb) on se retrouve, en plus, face à la même problématique que pour les anciennes versions
    à part contrer le ROLE SYSDBA pas de moyen très "franc"

    je n'ai pas le temps de faire de test,mais à mon avis le point faible reste databases.conf

    Conclusion : pour une sécurité optimale les utilisateurs FIREBIRD ne sont pas fait pour ça, ils sont fait pour les accès à la base de données
    la sécurité optimale consiste à avoir les bases sur un serveur dans un local sécurisé, les seuls utilisateurs autorisés pour travailler sur ce poste seront les administrateurs du poste (et donc pas forcément ceux d'une base de données).
    On peut ensuite jouer sur la sécurité du répertoire de Firebird, de la localisation des fichiers cités dans databases.conf (sécurités et cryptages) de façon à ne "pas mettre tous les œufs dans le même panier" cependant firebird (sur un système Linux c'est un utilisateur créé à l'installation de Firebird, sous windows il n' y a , à ma connaissance, rien de semblable : on dira "le système" ) doit pouvoir y avoir accès .
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut à tous.

    Citation Envoyé par SergioMaster
    C'est là la clé de voûte de ton raisonnement : une seule base dont le fichier sécurité est inclus.
    Oui, tout à fait exacte !

    Citation Envoyé par SergioMaster
    maintenant s'il y a plusieurs bases on n'a peut être pas envie d'inclure un fichier sécurité dans chaque (ce qui risque de poser des problèmes autres)
    De quels problèmes parles-vous ?

    Citation Envoyé par SergioMaster
    1- le fichier sécurité est inclus : très difficile de retrouver un mot de passe crypté, au mieux retrouvera-t-il les noms d'utilisateurs, bon point de départ sauf si la base est cryptée !
    Mais avant de retrouver le mot de passe, fait-il encore connaitre le compte utilisateur.
    C'est pourquoi, vous m'avez conseillé de crypter la base afin de la rendre illisible !

    C'est bien une amélioration de FireBird, d'avoir mis la sécurité dans la base de données.

    Citation Envoyé par SergioMaster
    2- le fichier sécurité n'est pas inclus (le bon vieux security3.fdb) on se retrouve, en plus, face à la même problématique que pour les anciennes versions à part contrer le ROLE SYSDBA pas de moyen très "franc"
    Cette solution, je la rejete car on a la possibilité de remplacer le fichier "security3.fdb" par un autre, disons fait maison. Et du coup, le pirate peut accéder aux données, juste par substitution de la sécurité.

    Et c'est pourquoi, la base de données doit être accessible uniquement par le serveur FireBird.
    D'où les conseils de "Barbibulle", de mettre la base de données dans un répertoire qui n'est pas accessible directement par les utilisateurs (???).
    Et donc, impossibilité de copier la base de données afin de faire des tests de piratage sur un autre ordinateur.

    Citation Envoyé par SergioMaster
    je n'ai pas le temps de faire de test, mais à mon avis le point faible reste databases.conf
    Il faut faire la distinction entre les utilisateurs venant d'internet (ou intranet) et les utilisateurs locaux sur l'ordinateur où se trouve FireBird.
    Les utilisateurs locaux ont des autorisations qui leur permettent d'accéder aux répertoires, et plus particulièrement à celui où se trouve la base de données.

    Il faut dire que j'utilise FireBird au travers de scripts que j'exécute en ligne de commande sous Windows.
    De ce fait, je voie la base de données et j'accède au répertoire qui l'héberge.
    C'est sur ce point que la sécurité est faible.

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

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Artemus24 Voir le message
    De quels problèmes parles-vous ?
    Mon postulat de départ plusieurs bases à gérer avec les mêmes utilisateurs. Si la base de sécurité est incluse dans chaque base cela veut dire qu'il faut répercuter une modification sur chacune (risque d'erreurs), alors qu'avec une base de sécurité indépendante (pas forcément nommé security3.fdb) et pas forcément pour toutes les bases du serveur (toutes celles d'un même "groupe") ce problème n'a plus lieu d'être.

    Cette solution, je la rejette car on a la possibilité de remplacer le fichier "security3.fdb" par un autre, disons fait maison.
    c'est bien pourquoi j'ai signalé que le point faible pouvait être databases.conf

    Et du coup, le pirate peut accéder aux données, juste par substitution de la sécurité.
    justement c'est pourquoi, j'ai conseillé de crypter la base afin de la rendre illisible !

    la base de données doit être accessible uniquement par le serveur FireBird.
    cela a toujours fait partie des recommandations de l'équipe Firebird , AMHA Windows a toujours été léger au niveau sécurité
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    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 378
    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 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut SergioMaster.

    Citation Envoyé par SergioMaster
    Mon postulat de départ plusieurs bases à gérer avec les mêmes utilisateurs.
    Je comprends ton postulat, mais je pense que centraliser toute la sécurité dans le fichier externe "security3.fdb" est une erreur.

    Citation Envoyé par SergioMaster
    c'est bien pourquoi j'ai signalé que le point faible pouvait être databases.conf
    Une sécurité parfaite, ça n'existe pas.

    Citation Envoyé par SergioMaster
    justement c'est pourquoi, j'ai conseillé de crypter la base afin de la rendre illisible !
    Sur ce point, nous sommes d'accord !

    Citation Envoyé par SergioMaster
    cela a toujours fait partie des recommandations de l'équipe Firebird ...
    Dans ce cas là, je ne comprends pas pourquoi on peut créer un fichier externe (*.fdb) faisant office de base de données.
    Je sais que l'on peut faire exactement la même chose sous Microsoft SQL Server, mais je ne comprends pas trop l'intérêt de cette façon de faire.
    Et puis bon courage pour analyser la structure de la base physique afin d'extraire les informations utilises.

    Je pense que d'un coté, tu as les utilisateurs qui ont l'obligation d'accéder au serveur.
    Et de l'autre coté, les fichiers physiques sont répartis sur les disques dédiés à cela, et où les utilisateurs n'ont aucun accès.
    Et au milieu, le serveur FireBird qui doit gérer les permissions des utilisateurs.

    Tu as raison, je devrais faire des test un peu plus poussés pour trouver le bug s'il existe.

    Citation Envoyé par SergioMaster
    ... , AMHA Windows a toujours été léger au niveau sécurité
    Léger non, mais la sécurité est souvent mal gérée par les administrateurs sous Windows.
    Et puis, on n'installe pas un serveur SGBDR sur un ordinateur personnel, mais sur un ordinateur qui est dédié à cette tâche.
    Par exemple, sous Windows Server 2016.

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

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/04/2009, 13h51
  2. [Apache/WebDAV] Gestion des comptes utilisateurs SVN
    Par mrcrazy dans le forum Subversion
    Réponses: 1
    Dernier message: 17/12/2008, 14h11
  3. [W2000Pro] Gestion des comptes utilisateurs
    Par lolo971 dans le forum Windows 2000/Me/98/95
    Réponses: 1
    Dernier message: 08/08/2008, 20h17
  4. Gestion des comptes utilisateurs
    Par Yogy dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 20/05/2008, 15h57
  5. Gestion des comptes utilisateurs
    Par tibal dans le forum Administration
    Réponses: 6
    Dernier message: 10/11/2006, 11h10

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