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).
- créer un (plusieurs) utilisateur(s),
- leur attribuer des droits (sélection, insertion, modification, suppression) sur les données
- limitera l'affichage des tables à celles sur lesquelles l'utilisateur a des droits
- 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
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
- 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)
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
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.
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.