M OD UL E B D D

Post on 08-Nov-2021

0 views 0 download

Transcript of M OD UL E B D D

MODULE BDDMODULE BDDMathieu GOULIN :

mathieu.goulin@gadz.org

ASRALL

2020

Le Langage SQL

SOMMAIRESOMMAIREPartie 1: Prérequis

Comprendre ce qu'est une base de donnéesAlgèbre relationnelleLe langage SQL

SOMMAIRESOMMAIREPartie 2: Administration

Motivations?Sécurité/intégritéSauvegarde/restaurationPerformancesGestion du changementMise en œuvre

SÉCURITÉSÉCURITÉ

DÉFINITIONSDÉFINITIONSSécurité:

Protection de la base de données contre lesutilisateurs non autorisésVéri�cation que ce que les utilisateurs veulentfaire est autoriséProtection contre les aléas de l’informatique

DÉFINITIONSDÉFINITIONSIntégrité:

Cohérence des données entre ellesprotection de la base de données contre lesutilisateurs autorisés

L’objectif est de garantir la persistance des donnéesdans un état accessible et exploitable par l’utilisateur�nal, peu importe ce qui pourrait se produire.

EXEMPLESEXEMPLESBug logiciel, provoquant une corruption des données.Fausse manipulation d’un utilisateur dans la baseréalisant des suppressions de tables.Accès d’une personne non autorisé et accès à desdonnées con�dentielles.Modi�cation frauduleuse de données.Panne matériel provoquant l’indisponibilité de labase.

SÉCURITÉSÉCURITÉ

INCIDENT DÉFINITIONINCIDENT DÉFINITIONITIL V3: Evènement imprévu provoquantl’interruption d’un service, ou la réduction de saqualité.

Un incident peut être impactant ou non pour lesutilisateurs

Se prémunir contre la survenance d’incidents oupréparer des solutions de contournement fait partiede la politique sécurité.

DIFFÉRENTS NIVEAUX DE SÉCURITÉDIFFÉRENTS NIVEAUX DE SÉCURITÉ

Au niveau du SGBD:Authenti�cation/autorisation d’accès pour lesutilisateursFaille de sécurité dans le logicielErreur de con�guration

Au niveau de l’OS:Droits d’accès à l’OS (mdp root compromis)Droits en lecture des �chiers (export base, binairesde la base).

Au niveau du réseau

DIFFÉRENTS NIVEAUX DE SÉCURITÉDIFFÉRENTS NIVEAUX DE SÉCURITÉAu niveau physique:

Redondance disque (RAID, SAN)Load balancing/clusteringSalles blanches, sécurité incendie

Au niveau applicatif:Utilisateurs, rôles, droits, actions possibles Vues,Procédures stockésRisque d’injection SQL sur les applications Web

Risque humain:MDP trop simple, session restée ouverte, etc

Ne jamais exposer un serveur BDD sur InternetBloquer le port d’écoute du serveur au niveau du�rewall

Restreindre les accès au serveur BDD, et éviter de lepartager avec d’autres fonctionsToujours dé�nir des mots de passe complexes pourles utilisateurs de droits forts

Ne pas laisser les mdps en clair sur un wiki interneou sur un post-it sur l’écranChanger les mdps par défaut

LES ACCÈSLES ACCÈSSuivant le niveau de sécurité con�guré, postgreSQLpeut accepter des connexions avec ou sans mot de

passe, en local uniquement ou à distance.

On pourra dé�nir ces paramètres dans les �chiers decon�guration système:

pg_hba.confpostgresql.conf

Ces �chiers sont dans le répertoire/etc/postgresql/[version]/[cluster]/.

LES AUTORISATIONSLES AUTORISATIONSDifférentes autorisations sur la base

LectureInsertionMise à jourSuppression

Différentes autorisations sur la structure de la baseCréation/suppression d’indexRessources: création/suppression de nouvellesrelationsAltération des schémas: ajout/suppressiond’attributs

LES AUTORISATIONSLES AUTORISATIONSPrivilège: droit d’effectuer une action précise sur unobjet donnéNotion de rôle :

possibilité de gérer un ensemble de privilègesacquisdé�ni en fonction des besoins d’un certain grouped’utilisateurs

Un utilisateur c’est un rôle auquel on peut seconnecter:

CREATE USER équivaut à CREATE ROLE avecLOGIN

Un groupe c’est un rôle, avec lequel on ne peut seconnecter, et que l’on donne à plusieurs utilisateurs.

CREATE ROLE NOLOGIN;GRANT TO ;

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCE[,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] nom_table [, ...] | ALL TABLES IN SCHEMA nom_schémTO { [ GROUP ] nom_rôle | PUBLIC } [, ...] [ WITH GRANT OPTION ];

GRANT nom_rôle [, ...] TO nom_rôle [, ...] [ WITH ADMIN OPTION ]

Dans PostgreSQL, on peut affecter 5 types de droit àun utilisateur ou à un groupe

r pour SELECTa pour INSERTw pour UPDATEd pour DELETEx pour REFERENCES

Vous pouvez connaître les droits accordés avec lacommande \z

SAUVEGARDE ETSAUVEGARDE ETRESTAURATIONRESTAURATION

La perte irréversible des données d’une entreprisepeut provoquer sa disparition.Pour un DBA ne pas implémenter un système desauvegarde des BDD est à considérer comme unefaute grave!Sauvegarder c’est bien, pouvoir restaurer c’estmieux!

Une sauvegarde est une image à un moment donnédans le temps d’un ensemble d’informations.Dans le cas d’une base de données, on peut souhaitersauvegarder:

Des donnéesUne tableUn ensemble de tablesUne baseLe sur-ensemble nécessaire et suf�sant pourpouvoir retourner dans une situation correcteaprès un désastre.

Il faut donc sauvegarder régulièrement:

Les donnéesLes structures des tablesLes utilisateurs et leurs privilègesLes �chiers et paramètres de con�guration de la base

Périodicité?Durée de rétention?Périmètre de la sauvegarde?Conditions de réalisation?Type de sauvegarde?Supports?

Conserver sa sauvegarde dans un dossier du serveurau-delà du très court terme est une erreur!La stratégie de sauvegarde doit être validée par desrestauration (régulière) pour véri�cation.

DIFFÉRENTS TYPES DE SAUVEGARDEDIFFÉRENTS TYPES DE SAUVEGARDE

SAUVEGARDE LOGIQUE : EXPORT (DUMP)SAUVEGARDE LOGIQUE : EXPORT (DUMP)Le principe est de produire un �chier texte de

commandes SQL (appelé « �chier dump »), qui, si on lerenvoie au serveur, recrée une base de données

identique à celle sauvegardée.

Il s’agit ici d’une sauvegarde « logique ». PostgreSQLpropose pour cela le programme utilitaire : pg_dump

L'usage basique est :

pg_dump base_de_donnees > fichier_de_sortie

SAUVEGARDE LOGIQUE : EXPORT (DUMP)SAUVEGARDE LOGIQUE : EXPORT (DUMP)pg_dump doit avoir accès en lecture à toutes lestables à sauvegarder

Doit être lancé pratiquement toujours en tant quesuperutilisateur de la base.

Les sauvegardes créées par pg_dump sontcohérentes, ce qui signi�e que la sauvegardereprésente une image de la base de données aumoment où commence l'exécution de pg_dump.pg_dump bloque certaines opérations sur la base :verrou partagé

SAUVEGARDE LOGIQUE : EXPORT (DUMP)SAUVEGARDE LOGIQUE : EXPORT (DUMP)Pour Restaurer la sauvegarde les �chiers texte crééspar pg_dump peuvent être lus par le programme psql.La syntaxe générale d'une commande de restaurationest :

psql base_de_donnees < fichier_d_entree

SAUVEGARDE À FROIDSAUVEGARDE À FROIDCette stratégie de sauvegarde consiste à copierphysiquement les �chiers utilisés par PostgreSQLpour le stockage des données.N'importe quelle méthode de sauvegarde peut êtreutilisée, par exemple :

tar -cf sauvegarde.tar /var/lib/postgresql/9.6/main/

SAUVEGARDE À FROIDSAUVEGARDE À FROIDrestrictions:

Le serveur de base de données doit être arrêtépour obtenir une sauvegarde utilisable.Le serveur doit également être arrêté avant derestaurer les données.On restaure toute la base, ou rien du tout!Impossible en l’état de ne restaurer qu’une seuletable.

SAUVEGARDE À FROIDSAUVEGARDE À FROIDUne sauvegarde des �chiers de données n'est pasforcément moins volumineuse qu'une sauvegardeSQL.

Au contraire, pg_dump ne sauvegarde pas lecontenu des index, mais la commande pour lesrecréer.On sauvegarde également les « espaces vides » desdata�les.

Une sauvegarde des �chiers de données est plusrapide pour les grosses BDD.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDPostgreSQL maintient en permanence des journauxWAL (write ahead log) dans le sous-répertoirepg_xlog/ du répertoire de données du cluster.Ces journaux décrivent chaque modi�cationeffectuée sur les �chiers de données des bases.Ils existent principalement pour se prémunir dessuites d'un arrêt brutal : si le système s'arrêtebrutalement, la base de données peut être restauréedans un état cohérent en « rejouant » les entrées desjournaux enregistrées depuis le dernier point devéri�cation.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDL'existence de ces journaux rend possible l'utilisationd'une stratégie pour la sauvegarde des bases dedonnées : la combinaison d'une sauvegarde de niveausystème de �chiers avec la sauvegarde des �chiersWAL.Si la récupération est nécessaire, la sauvegarde estrestaurée, puis les �chiers WAL sauvegardés sontrejoués pour amener la sauvegarde jusqu'à la dateactuelle.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDBéné�ces :

Une longue séquence de �chiers WAL peut êtreassemblée pour être rejouée, une sauvegardecontinue est obtenue en continuant simplement àarchiver les �chiers WAL.Les entrées WAL ne doivent pas obligatoirement êtrerejouées intégralement.La ré-exécution peut être stoppée en tout point, touten garantissant une image cohérente de la base dedonnées telle qu'elle était à ce moment-là.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDCette technique autorise la récupération d'uninstantané (PITR – Point In Time Recovery) : il estpossible de restaurer l'état de la base de donnéestelle qu'elle était en tout point dans le temps depuisla dernière sauvegarde de base.c'est la technique de sauvegarde préférée dans denombreuses situations où une haute �abilité estrequise.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDInconvénients:

Cette méthode ne supporte que la restauration d'uncluster de bases de données complet, pas d'un sous-ensemble.Un espace d'archivage important est requis : lasauvegarde de la base peut être volumineuse et unsystème très utilisé engendre un tra�c WAL àarchiver de plusieurs Mo.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDUne récupération fructueuse à partir de l'archivagecontinu ( « sauvegarde à chaud » ) nécessite uneséquence ininterrompue de �chiers WAL archivésqui s'étend au moins jusqu'au point de départ de lasauvegarde.Plus il y a de �chiers WAL à rejouer, plus larestauration est longue.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDProcédure de mise en œuvre:

S'assurer que l'archivage WAL est activé et fonctionnelSe connecter à la base de données en tant que superuti

SELECT pg_start_backup('label'); label : chaîne utilisée pour identifier de façon unique lpg_start_backup crée un fichier de label de sauvegarde nom

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDEffectuer la sauvegarde du système de �chiers (avectar par exemple). Inutile de stopper la base. Le mieuxest d’utiliser « temporairement » un répertoiredisque (vitesse d’écriture).

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDSe connecter à nouveau à la base de données en tantque superutilisateur et lancer la commande :

Cela met �n au processus de sauvegarde et réalise unbasculement automatique vers le prochain segmentWAL. Ce basculement est nécessaire pour permettreau dernier �chier de segment WAL écrit pendant lasauvegarde d'être immédiatement archivable.Attendre l’archivage des �chiers des segments WALutilisés lors de la sauvegarde (rapide).

SELECT pg_stop_backup();

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDLe �chier identi�é par le résultat de pg_stop_backup est

le dernier segment à archiver pour terminer lasauvegarde. L'archivage de ces �chiers intervientautomatiquement si archive_command est déjàcon�guré. Reste ensuite à mettre sur bandes les

�chiers de données + WAL.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDPour restaurer une sauvegarde à chaud:

Arrêter le serveur s'il est en cours d'exécution.Effacer tous les �chiers et sous-répertoires existantsous le répertoire des données du cluster et sous lesrépertoires racines des tablespaces.Restaurer les �chiers de la base de données à partirde la sauvegarde. Il faut qu'ils soient restaurés avec lebon propriétaire (l'utilisateur système de la base dedonnées, et non pas root !) et avec les bons droits.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDSupprimer tout �chier présent dans pg_xlog/ Ilsproviennent de la sauvegarde et sont du coupprobablement obsolètes. Le sous-répertoirepg_xlog/archive_status/ doit aussi être créé.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDCréer un �chier de commandes de récupération recove

Si nécessaire, modi�er temporairement le �chier pg_hbde se connecter.

Les paramètres : restore_command (string) restore_command = 'cp /mnt/serveur/reparchives/%f "%p"' %f sera remplacé par le nom du fichier à récupérer à partir de l%p sera remplacé par le chemin vers le répertoire de copie sur lrecovery_target_time (timestamp) Le moment où arrêter la récupér

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDDémarrer le serveur.

Le serveur se trouve alors en mode récupération etcommence la lecture des �chiers WAL archivés dont il abesoin. À la �n du processus de récupération, le serveur

renomme recovery.conf en recovery.done (pourempêcher de retourner accidentellement en mode derécupération en cas de nouvel arrêt brutal ultérieur),

puis passe en mode de fonctionnement normal.

Inspecter le contenu de la base de données pours'assurer que la récupération a bien fonctionné.

SAUVEGARDE À CHAUDSAUVEGARDE À CHAUDSi tout va bien, le �chier pg_hba.conf peut-êtrerestauré pour autoriser les utilisateurs à sereconnecter. Le point clé de tout ceci est l'écritured'un �chier de commandes de récupération qui décritcomment et jusqu'où récupérer. Le �chierrecovery.conf.sample (normalement présent dans lerépertoire d'installation share/) peut être utilisécomme prototype.

QUESTION ?QUESTION ?