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

Bases de données Delphi Discussion :

Sauvegarde distante firebird d'une base de données ayant une base de sécurité personnalisée avec FDIBBackup


Sujet :

Bases de données Delphi

  1. #1
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut Sauvegarde distante firebird d'une base de données ayant une base de sécurité personnalisée avec FDIBBackup
    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 :
    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;
    J'édite le databases.conf pour y ajouter la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AliasDeLaBaseASauvegarder = c:\BDD\LaBaseASauvegarder.fdb
    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))

    Je lance :
    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
    Et la sauvegarde se fait.

    Je fais un petit programme dans Delphi 12
    Je pose sur la fiche les trois composants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        FDIBBackup1: TFDIBBackup;
        FDGUIxWaitCursor1: TFDGUIxWaitCursor;
        FDPhysFBDriverLink1: TFDPhysFBDriverLink;
    ainsi qu'un bouton (btSauvegarder) et six TEdit (edServeur, edAlias, edUser, edPassword, edRole, edBackup)

    Sur l'évènement clic du bouton j'ai :
    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;
    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
    edServeur.Text := IpLocaleServeur;
    edAlias.Text := 'AliasDeLaBaseASauvegarder';
    edUser,.Text := 'SYSDBA';
    edPassword.Text := 'masterkey';
    edRole.Text := '';
    edBackup.Text := 'c:\BDD\LaSauvegardeFDIBBackup.fbk';
    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
    $>ISQL -user SYSDBA
    SQL>CREATE DATABASE 'c:\BDD\MaBaseDeSecu.fdb';
    SQL>exit;
    J'édite le databases.conf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AliasDeLaBaseASauvegarder = c:\BDD\LaBaseASauvegarder.fdb
    {
        SecurityDataBase = c:\BDD\MaBaseDeSecu.fdb
    }
    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
    gbak -b -service IpLocaleServeur:service_mgr AliasDeLaBaseASauvegarder c:\BDD\LaSauvegardeGBak_AvecBaseSecu.fbk -USER SYSDBA -PAS masterkey
    J'ai bien un message d'erreur m'indiquant que la base de sécurité n'a pas d'utilisateur.

    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 :
    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;
    Retour sur mon poste 'client' :
    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).
    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 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_ADMINDEMABASE.fbk -USER ADMINDEMABASE -PAS LeGrosMotDePasse -ROLE rdb$ADMIN
    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_FRED.fbk -USER FRED -PAS LeMotDePasseDeFred
    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_PECORE.fbk -USER PECORE -PAS LeMotDePasseDuPecore -ROLE DEMIDIEU
    Tout fonctionne !

    Maintenant avec FDIBBackup...
    Plus rien de marche
    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';
    => Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
    Du coup j'essaye le mot de passe du SYSDBA général :
    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';
    => Missing security context for AliasDeLaBaseASauvegarder unknown ISC error 33630835

    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

    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.
    Le problème a existé dans JAYBIRD https://github.com/FirebirdSQL/jaybird/issues/691 et a été résolu.

    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.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 581
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    le truc c'est que, quand tu utilises GKAK, tu utilises le paramètre -service, ce qui te permets d'obtenir la sauvegarde de ta base de données sur le poste "demandeur"
    mais FDIBBackup, à ma connaissance, ne propose pas cette option

    FDFBNBackup a contrario, utilise le service mais contrairement au gbak "classique" ne vide pas la poubelle (sweep de garbage).

    je suis "tombé" sur ton message, que j'avais complètement zappé , en tentant de répondre à une question "bête" :
    Faut-il que les programmes nbackup et gbak soit installés sur le poste "client" ?
    et là, j'avoue que j'ai un doute, et mon environnement m'empêche de chercher la réponse (tous mes postes "locaux" ont, au moins, une version de Firebird installée)
    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

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 581
    Billets dans le blog
    65
    Par défaut
    Bien que non adepte de IBX (estimant que Interbase et firebird commencent à beaucoup diverger) je doit quand même citer
    TIBBackupService
    qui pourrait peut-être fonctionner ?
    Ne pas négliger non plus UIB
    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

Discussions similaires

  1. Sauvegarder l'affichage d'une image dans un dossier avec un bouton !
    Par cincap dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 19/02/2016, 11h19
  2. Réponses: 0
    Dernier message: 15/08/2007, 16h36
  3. [D7][FireBird]Créer une base de données
    Par aityahia dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/04/2007, 14h23
  4. [D7] Sauvegarder un TFont dans une base
    Par dacid dans le forum Delphi
    Réponses: 2
    Dernier message: 17/07/2006, 09h17
  5. Réponses: 4
    Dernier message: 03/02/2006, 12h42

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