Salut DelphiCode.
Pas nécesairement. Prenons le cas suivant :Envoyé par DelphiCode
Ce rôle "dbuser" existe et a les droits d'accès à la table test. Mais le compte "albert' n'existe pas. De ce fait, il n'a aucun accès !
Code : Sélectionner tout - Visualiser dans une fenêtre à part isql -charset win1252 -echo -input %FIC% -quiet -password 'albert' -role 'dbuser' -user 'albert' '..\Data\Base.fdb'
Donc par mon NON, je tiens à souligner que le compte (les utilisateurs) et le rôle (les privilèges) doivent être en concordance.
Si l'un des deux vient à manquer, tu ne peux pas accéder à la table.
Sauf que les privilèges (role + grant) sont dans ta base de données et que les comptes sont dans la base "security3.fdb".
Je ne sais pas faire cela. Pourrais-tu mettre le lien qui explique comment faire ?Envoyé par DelphiCode
Je n'avais pas compris cela de cette façon.Envoyé par DelphiCode
D'après ce que j'ai compris, ce sont les privilèges (role + grant) qui vont dans ta base de travail. Et les comptes vont dans "security3.fdb".
Il y a bien dissociation entre privilèges et comptes.
Hormis le cas du compte "sysdba" qui est un compte particulier, un compte administrateur "grant admin role" n'a pas accès.Envoyé par DelphiCode
Sauf que la différence est dans le rôle que tu vas lui associer.
Si tu le mets dans "RDB$ADMIN", il aura tous les accès à ta base de données, mais aussi à toutes les autres bases de données.
Si tu mets un autre role, il aura les privilèges de ce rôle. Si tu ne précises pas le rôle, il n'a aucun accès.
Sur la création d'un compte, je ne sais pas à quoi cela sert de mettre "grant admin role".
Tu prends le problème à l'envers. Imagine que le mot de passe de "sysdba" ne soit plus "masterkey" mais autre chose et est connu que du seul et unique administreur du SGBDR FireBird.Envoyé par DelphiCode
Tu as beau mettre ceci :
tu ne pourras pas accéder à ta base de données !
Code : Sélectionner tout - Visualiser dans une fenêtre à part isql -charset win1252 -echo -input %FIC% -quiet -password 'masterkey' -role 'rdb$admin' -user 'sysdba' '..\Data\Base.fdb'
Inversement, comme c'est un compte très particulier, tu ne peux pas lui interdire l'accès à ta base de données.
Oui, j'avais bien compris.Envoyé par DelphiCode
Si tu as des erreurs, comme "-violation of PRIMARY or UNIQUE KEY constraint "INTEG_5" on table "PLG$SRP"", cela signifie que tu veux créer le compte "toto" alors que celui-ci existe déjà. En fait, c'est un doublon.
Ce ne sont pas des erreurs aléatoires, mais juste une impossibilité de créer ce compte, puisqu'il existe déjà.
Prends l'habitude de faire un "drop user toto" avant de le recréer.
Pour créer un compte admin de nom "titi", il faut faire cela :Envoyé par DelphiCode
J'ai compris ce que signifie le "with admin option" sur un rôle pour à un compte utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 drop user titi; create user titi; grant rdb$admin to titi:
Par exemple, tu te connectes avec le compte "Artemus", qui je le rappelle est le créateur/propriétaire de la base de données. Puis tu fais :
Tu remarques, que "Artemus" est celui qui a donner les privilèges à "Patron" (granted by).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 grant dbsupervisor to patron with admin option granted by artemus; grant dbreader to patron with admin option granted by artemus; grant dbuser to patron with admin option granted by artemus;
Que je le précise ou pas, cela n'a aucune importance, car dans ce cas là, ce sera forcément "Artemus" le grantor, pardon le concédant, car je me connecte avec ce compte.
Mais ce que je peux faire, c'est attribuer ce concédant à quelqu'un d'autre.
Cela peut avoir une signification en ce qui concerne l'arborescence des privilèges.
Si je supprime un compte qui est admin sur le rôle, tous les privilèges donnés par ce compte disparaissent.
"Artemus" a le rôle de super administrateur de sa base de données, puisqu'il est le créateur/propriétaire de celle-ci.
Lorsque "Patron" se connecte avec le rôle de "dbsupervisor" :
il peux attribuer les rôles à qui il veut, puiqu'il administrateur de ce rôle, comme dans l'exemple suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part isql -charset win1252 -echo -input %FIC% -quiet -password 'patron' -role 'dbsupervisor' -user 'patron' '..\Data\Base.fdb'
"Patron" est le chef pour les rôles où il est administrateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 grant dbreader to lecteur; grant dbuser to gordon;
Il peut attribuer ces rôles, ou les retirer à n'importe quel utilisateur.
Et ici, le concédant (grantor) est "patron".
Tu n'as pas besoin d'être administrateur pour créer un rôle. Tu peux le faire avec le compte créateur/propriétaire de ta base de données.Envoyé par DelphiCode
Si tu supprimes ta base de données de travail et que tu fasses ceci pour te connecter avec "isql" :Envoyé par DelphiCode
et que tu fasses le vidage des deux tables, tu verras les comptes que tu as créés précédemment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part isql -charset win1252 -echo -input %FIC% -quiet -password 'masterkey' -role 'rdb$admin' -user 'sysdba' 'F:\Wamp\bin\FireBird\Courant\Security3.fdb'
et tu remarques la présence de mes quatre comptes, bien que la base de données n'existe pas !
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 show database; Database: localhost:F:\Wamp\bin\firebird\courant\security3.fdb Owner: ADMINISTRATOR 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 = 233 Transaction - oldest active = 234 Transaction - oldest snapshot = 234 Transaction - Next = 237 ODS = 12.0 Database not encrypted Default Character set: NONE Linger: 60 seconds show tables; PLG$SRP PLG$USERS select * from plg$users; PLG$USER_NAME PLG$GROUP_NAME PLG$UID PLG$GID PLG$PASSWD PLG$COMMENT PLG$FIRST_NAME PLG$MIDDLE_NAME PLG$LAST_NAME =============================== =============================== ============ ============ =============================================================================== ================= ================================ ================================ ================================ SYSDBA <null> <null> <null> 4E4C74776373394C72784C4D4F5968473075474D3969364B53376D663351414B764656706D52673D <null> Sql Server Administrator select * from plg$srp; PLG$USER_NAME PLG$VERIFIER PLG$SALT PLG$COMMENT PLG$FIRST PLG$MIDDLE PLG$LAST PLG$ATTRIBUTES PLG$ACTIVE =============================== =============================================================================== ================================================================ ================= ================================ ================================ ================================ ================= ========== SYSDBA 56BEF2B0EED20749B33BDDFC575FA9EB268D77B2032B30F0566A1A809D75B2B69E49400398725C484BD05CD5C47CD5D6F68908F3B6D359B06A20835CFC601DE696098A8EC79F51707D61D0602EAE19D5E0009B71C4844AEC269E83BBDF334B4E00DA4FE5DDC36FB9E61E429989FE238171B17CD96348E3BCDC4DF07BEB6C65B9 794B0A89A473B4C1206722D3C23DA312E4B7C25EA85F1408D81CCB3442BD3856 <null> <null> <null> <null> <null> <true> PATRON BBDB19C723B7FF249E75D37ADFAE882737356F4B086A87E50F7DEE52AA4AA9D836DA6F9251D877C6D42953ECFA1C95815B2EE68BDABFC68B85621EEFAFA5BE1930E0251AAFE5C81A8E892C265C2B7422D5698BEA560C6766E2B823BDD9365545CC3D6AFB1FFE6FC9B8602F868CC5FD15934F696A9E71461EAA97EC1A98ABF550 363F1060BD14EC9E0C84714402BA8E30D124124AA10F308EB39491E539F16CAF <null> <null> <null> <null> <null> <true> GORDON 35586FF72AC253F15560BE498F18D81EB26A56A10DD2BF1771906A481A63DD186C466FDA3D28B214477CFC56CA0D78A937A18EB5BA22097FDE05346F1E36673C9C449B9FE52732B459630A0005FC95BDD403699F40BD338A3BB10C76ED4786F5E72F6F364CBB6C528789D67C6B14C7621D84550DC40133D60E80ED2DF4DF3E4C 71BB81831E67DC8AFA2BB362D2CFEB1DF2B8B5280582E9221BF05ABCCA8D812F <null> <null> <null> <null> <null> <true> LECTEUR 15DBC2AE4FD9D32EEDD5668694C5A3CCF67866BEFA0B1A6BF2D5E2328D4FA5455A706BF0F050F2DF3A04D513EE33444248024AF38C9CD1FCBA8AAC8A26FC970CDED1642E6A75504AFA8AE24FE504EC1A4B61FBA46522E1634DC38ECF39A3ACE8D60C35092DBB03BCA74C39AEE361D2BE338A4940D79252AED3F87C08F5EB82C4 163682E5A9CA50475F60BEED3BC1FE1DFE45798C710242ED90BA38586DBDBE9D <null> <null> <null> <null> <null> <true> show users; Users in the database 0 GORDON 0 LECTEUR 0 PATRON 2 #SYSDBA exit; Appuyez sur une touche pour continuer...
Au passage, le propriétaire est "Administrator".
C'est bien ce que je t'ai dit précédemment, les comptes sont dans la base "security3.fdb" tandis que les privilèges sont dans ta base de travail.
Ce n'est pas la peine que je le fasse car je sais que cela va fonctionner. Pourquoi ?Envoyé par DelphiCode
Car les comptes "toto", "tata", "titi", tutu" ... n'existent pas chez moi.
Il y a aussi une notion que je ne maîtrise pas du tout, celle de l'authentification sous windows.Envoyé par DelphiCode
--> http://firebirdsql.org/file/document...ntication.html
Je n'ai pas modifié le fichier "firebird.conf". Par défaut, c'est "srp".
Ce qui signifie que je dois m'identifier avec un compte FireBird pour me connecter. Et non par rapport au nom de ma session windows.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select SEC$USER_NAME, SEC$PLUGIN from sec$users; SEC$USER_NAME SEC$PLUGIN =============================== =============================== SYSDBA Srp PATRON Srp GORDON Srp LECTEUR Srp exit; Appuyez sur une touche pour continuer...
Je pense que je maîtrise assez bien les privilèges et les comptes sous FireBird (enfin je crois).
Il me reste juste à trouver le moyen de changer le nom du compte "sysdba".
@+
Partager