Bonjour à tous,
Voilà un moment je ne n'étais pas venu ici, et je constate avec plaisir qu'il y a quelques connaissances plus assidues que moi
J'ai essayé de tout mettre dans le titre et je vais décrire plus en détail le problème ci-après :
J'utilise pour sauvegarder une petite base Firebird 5 le composant Firedac FDIBBackup.
J'ai une machine serveur sur lequel est installé Firbird 5 (x32). Je remplace dans les exemples ci-après son adresse IP par "IPLocaleServeur"
- Installation toute fraiche sans modification de firebird.conf
- le super user est SYSDBA et son mot de passe masterkey
je lance ISQL :
J'édite le databases.conf pour y ajouter la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9$>isql -user FRED SQL>create database 'c:\BDD\LaBaseASauvegarder.fdb'; SQL>show database; Database: c:\BDD\LaBaseASauvegarder.fdb Owner : FRED ... ... SQL>exit;
Sur un second poste du réseau j'ai une installation complète serveur en version (x64) mais je ne pense pas que ce soit le problème au besoin je testerai sur une machine qui n'a qu'une installation client seul firebird 5 (x32))
Code : Sélectionner tout - Visualiser dans une fenêtre à part AliasDeLaBaseASauvegarder = c:\BDD\LaBaseASauvegarder.fdb
Je lance :
Et la sauvegarde se fait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak.fbk -USER SYSDBA -PAS masterkey
Je fais un petit programme dans Delphi 12
Je pose sur la fiche les trois composants :
ainsi qu'un bouton (btSauvegarder) et six TEdit (edServeur, edAlias, edUser, edPassword, edRole, edBackup)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 FDIBBackup1: TFDIBBackup; FDGUIxWaitCursor1: TFDGUIxWaitCursor; FDPhysFBDriverLink1: TFDPhysFBDriverLink;
Sur l'évènement clic du bouton j'ai :
La sauvegarde fonctionne avec les valeurs des TEdit suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 with FDIBBackup1 do begin BackupFiles.Clear; UserName := edUser.Text; Password := edPassword.Text; SqlRoleName := edRole.Text; Protocol := ipTCPIP; Host := edServeur.Text; Database := edAlias.Text; BackupFiles.Add(edBackup.Text); Backup; end;
Maintenant je retourne sur le serveur pour créer une base de sécurité spécifique à ma base de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 edServeur.Text := IpLocaleServeur; edAlias.Text := 'AliasDeLaBaseASauvegarder'; edUser,.Text := 'SYSDBA'; edPassword.Text := 'masterkey'; edRole.Text := ''; edBackup.Text := 'c:\BDD\LaSauvegardeFDIBBackup.fbk';
J'édite le databases.conf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3$>ISQL -user SYSDBA SQL>CREATE DATABASE 'c:\BDD\MaBaseDeSecu.fdb'; SQL>exit;
Je vérifie que la nouvelle base de sécurité est bien prise en compte en essayant de lancer GBAK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 AliasDeLaBaseASauvegarder = c:\BDD\LaBaseASauvegarder.fdb { SecurityDataBase = c:\BDD\MaBaseDeSecu.fdb }
J'ai bien un message d'erreur m'indiquant que la base de sécurité n'a pas d'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak_AvecBaseSecu.fbk -USER SYSDBA -PAS masterkey
De retour sur le serveur, je vais créer SYSDBA et quelques autres utilisateurs ADMINDEMABASE qui aura le role rdb$admin FRED qui est le nom du Owner de la base et un utilisateur lamda a qui j'attribue le droit d'utiliser la fonction de GBAK à travers un role que je crée pour l'occasion :
Retour sur mon poste 'client' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $>isql -user SYSDBA SQL> connect AliasDeLaBaseASauvegarder; SQL> create user SYSDBA password 'PasMasterkey'; SQL> create user ADMINDEMABASE password 'LeGrosMotDePasse'; SQL> grant rdb$admin to ADMINDEMABASE; SQL> create user FRED password 'LeMotDePasseDeFred'; SQL> create user PECORE password 'LeMotDePasseDuPecore'; SQL> create ROLE DEMIDIEU; SQL> Alter role DEMIDIEU set system privileges to USE_GBAK_UTILITY; SQL> GRANT DEMIDIEU to PECORE; SQL> commit; SQL> exit;
Sauvegarde gbak avec SYSDBA (et le mot de passe PasMasterkey qui est celui défini pour AliasDeLaBaseASauvegarder)cela fonctionne (alors que si j'essaye avec masterkey ca ne marche pas => Normal donc).
Sauvegarde avec ADMINDEMABASE en utilisant le role rdb$ADMIN;
Code : Sélectionner tout - Visualiser dans une fenêtre à part gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak_avecBaseSecu_SYSDBA.fbk -USER SYSDBA -PAS PasMasterkey
Sauvegarde avec FRED qui est le owner de la base AliasDeLaBaseASauvegarder
Code : Sélectionner tout - Visualiser dans une fenêtre à part gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak_avecBaseSecu_ADMINDEMABASE.fbk -USER ADMINDEMABASE -PAS LeGrosMotDePasse -ROLE rdb$ADMIN
Sauvegarde avec PECORE en utilisant le role DEMIDIEU
Code : Sélectionner tout - Visualiser dans une fenêtre à part gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak_avecBaseSecu_FRED.fbk -USER FRED -PAS LeMotDePasseDeFred
Tout fonctionne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak_avecBaseSecu_PECORE.fbk -USER PECORE -PAS LeMotDePasseDuPecore -ROLE DEMIDIEU
Maintenant avec FDIBBackup...
Plus rien de marche
=> Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 edServeur.Text := IpLocaleServeur; edAlias.Text := 'AliasDeLaBaseASauvegarder'; edUser,.Text := 'SYSDBA'; edPassword.Text := 'masterkey'; edRole.Text := ''; edBackup.Text := 'c:\BDD\LaSauvegardeFDIBBackup.fbk';
Du coup j'essaye le mot de passe du SYSDBA général :
=> Missing security context for AliasDeLaBaseASauvegarder unknown ISC error 33630835
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 edServeur.Text := IpLocaleServeur; edAlias.Text := 'AliasDeLaBaseASauvegarder'; edUser,.Text := 'SYSDBA'; edPassword.Text := 'masterkey'; edRole.Text := ''; edBackup.Text := 'c:\BDD\LaSauvegardeFDIBBackup.fbk';
Et tous les autres cas me renvoient "Your user name and password are not defined. Ask your database administrator to set up a Firebird login." comme si la base de sécurité de AliasDeLaBaseASauvegarder ne servait a rien.
Sous IBExpert j'ai également ce message mais si je coche Use itself as Expected database (isc_spb_expected_db) = AliasDeLaBaseASauvegarder la sauvegarde fonctionne.
D'après https://www.firebirdsql.org/file/doc...roperties.html
Le problème a existé dans JAYBIRD https://github.com/FirebirdSQL/jaybird/issues/691 et a été résolu.Pour Firebird 3.0 et versions ultérieures lors de l’utilisation d’une base de données de sécurité autre que celle par défaut, afin que Firebird sache quelle base de données utiliser pour s’authentifier. Lors de l’utilisation de la base de données de sécurité par défaut, il n’est pas nécessaire de définir cette propriété.
Certaines implémentations de services (par exemple, BackupManager) peuvent définir explicitement ceci dans le cadre de leur fonctionnement lorsque sa valeur actuelle est null.
Quand je cherche isc_spb_expected_db dans les sources de firedac il est bien défini dans FireDAC.Phys.IBCli mais jamais utilisé.
Merci de m'avoir lu, mais je crois avoir répondu à ma question en développant mes tests et recherches...
Je laisse le message au cas où ça serve à quelqu'un (ou si j'ai loupé un truc à paramétrer)
=> Je vais mettre a jour mon Delphi peut être que ca a été corrigé, sinon tester d'autres composants ou appeler GBAK depuis mon appli.
Partager