[Base] Protéger une base de données

Venez découvrir tous les tutoriels, modèles et autres foires aux questions afin de maîtriser rapidement votre suite bureautique favorite.

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Cette section est faite pour présenter les tutoriels. Si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du module où se produit le problème.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

[Base] Protéger une base de données

Message par Pierre-Yves Samyn »

Bonjour

Ce tutoriel ne concerne que la protection des bases au format OOoBase "par défaut", autrement dit les bases "incorporées" au format HSQLDB. Ces dernières ne disposent pas des mécanismes d'attribution de droit tels que ceux disponibles pour des bases de données professionnelles (MySQL et autres)

En préambule, j'attire votre attention sur la nécessité de procéder à une copie de sécurité de vos bases avant de se lancer dans ce qui suit.

Plusieurs questions relatives à la protection m'ont amené à "creuser" davantage la question. Entre autres :
ftopic19427.html
ftopic19426.html

Ce fil fait suite à celui-ci dans lequel j'évoquais mes premiers essais relatifs à la protection des bases.

Le début de solution évoqué dans ce fil n'est pas satisfaisant pour deux raisons principales :
  • Elle nécessite de décompresser le fichier archive (.odb), de manipuler directement le fichier content.xml, puis de reconstituer une archive "valide". Ceci n'est pas "à la portée" d'un utilisateur lambda
  • Elle semble ne pas offrir une sécurité garantie : elle provoque effectivement la saisie d'un profil de connexion (nom utilisateur et mot de passe) mais les droits attribués à un utilisateur semble ne pas être opérationnels (partie que je n'avais pas approfondie à l'époque).
Ce que nous allons mettre en oeuvre dans ce qui suit permettra de :
  1. créer un (plusieurs) utilisateur(s),
  2. leur attribuer des droits (sélection, insertion, modification, suppression) sur les données
  3. limitera l'affichage des tables à celles sur lesquelles l'utilisateur a des droits
  4. interdira l'accès au DDL ("Data Definition Language", description de métadonnées en SQL), en clair interdira à l'utilisateur de modifier la structure ou supprimer une table
Première étape : création des utilisateurs et attribution de leurs droits

Ceci se fera via la commande Outils > SQL qui ouvre un dialogue. Taper la suite d'instruction ci-dessous (en l'ayant adaptée à votre base) puis cliquer sur le bouton Exécuter

Code : Tout sélectionner

CREATE USER FORUM PASSWORD "FORUM"
GRANT SELECT,INSERT,UPDATE,DELETE ON "Personnes" TO FORUM
Ce qui est à adapter :
  • Le nom de l'utilisateur (FORUM dans l'exemple)
  • Son mot de passe ("FORUM" dans l'exemple)
  • Les droits qu'on souhaite attribuer
  • Le nom de la table concernée ("Personnes" dans l'exemple)
Capture-1.png
Deuxième étape : connexion à la base

Pour forcer la connexion à l'ouverture de la base avec le profil "limité" (de l'utilisateur "Forum") nous utiliserons une macro :

Code : Tout sélectionner

sub PysOpen

dim PysConn as object
dim PysRequete as object, PysResultat, PysSQL as string

PysConn = ThisDatabaseDocument.DataSource.getConnection("","") 

PysSQL =  "connect user forum password forum"
          
PysRequete = PysConn.createStatement()
PysResultat = PysRequete.executeQuery(PysSQL)
PysConn.Tables.refresh

end sub
Cette procédure exécute une requête connectant l'utilisateur choisi puis actualise l'affichage des tables (ce qui limite ce dernier aux tables "accessibles" par l'utilisateur (pour information, la base jointe comprend une table "Contacts" qui ne sera pas visible par défaut pour l'exemple).

Coller le texte de cette macro dans un module de votre base. Accès à l'éditeur par Outils > Macros > Gérer les macros > OOoBasic > Nouveau (si votre base ne comprend pas encore de macros).

Il reste à demander à OOo de lancer cette procédure à l'ouverture de la base. Pour cela : Outils > Personnaliser > onglet Evénements > vérifier que la liste Enregistrer dans affiche bien votre base (et non OOo), sélectionner l'événement Ouvrir le document dans la liste puis cliquer sur le bouton Macro pour aller "rechercher" la macro ci-dessus, puis enregistrer la base, quitter OOo.
Capture-2.png

Documentation sur les instructions SQL :
http://hsqldb.org/web/hsqlDocsFrame.html

Nota :
  • après les recommandations de début de tutoriel, j'insiste sur le fait que nous outrepassons ici ce qui est proposé par défaut dans l'interface. Ceci mérite donc toute notre attention. Il conviendrait de tester tout cela en détail (je n'y ai passé que quelques heures...). Enfin, ceci est susceptible d'évolution avec les futures versions d'OOo.
  • la protection proposée ici est bien entendu contournable ; l'objectif ici est de proposer une solution de protection "a minima" pour des utilisateurs courants. On pourra se reporter au fil inité par Bernard sur cette question.
MotDePasse.odb
Aucune question à la suite de ce fil... Elles doivent être posées, soit dans la section Base de données, soit dans la section Macro, en fonction de leur objet.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.