let characters = ["Batman", "Oracle", "Joker", "Harley Quinn", "Bane"];
Character dcCharacters[...]; dcCharacters[0] = new Character("Batman", "Bruce Wayne"); dcCharacters[1] = new Character("Oracle", "Barbara Gordon"); dcCharacters[...] = ...;
.txt
Batman Bruce Wayne Oracle Barbara Gordon
.csv
alias,name Batman,Bruce Wayne Oracle,Barbara Gordon
.xml
<Characters> <Character alias="Batman" name="Bruce Wayne"></Character> <Character alias="Oracle" name="Barbara Gordon"></Character> </Characters>
.json
[ { alias:"Batman", name: "Bruce Wayne" }, { alias:"Oracle", name: "Barbara Gordon" } ]
On utilise un modèle relationnel pour organiser les données de façon structurée et standardisée pour faciliter l'accès par les développeurs via le langage SQL.
Logiciel permettant de stocker et manipuler(CRUDL) une base de données en assurant l'intégrité de l'information.
Une instance d'un SGBD peut héberger plusieurs bases de données, elles-mêmes contenant plusieurs tables.
MariaDB est un système de gestion de bases de données relationnelles :
apt update && apt install -y mariadb-server
systemctl status mariadb
# En tant que root mysql # Version compacte de mysql -u [username] -p -h [server_host] [database] # man mysql pour voir les options disponibles
Une fois la commande de connexion mysql exécutée, le terminal MariaDB[()]> est disponible.
mysql
MariaDB[()]>
COMMANDE SQL;
Il est possible de regrouper plusieurs commandes SQL dans un fichier .sql et de les exécuter via le client en ligne de commande
.sql
SOURCE path/to/script.sql
Par exemple, script.sql
script.sql
CREATE USER 'alice'@'localhost'; GRANT ALL ON *.* TO 'alice'@'localhost'; CREATE USER 'bob'@'%'; GRANT ALL ON public.* TO 'bob'@'%'; SET PASSWORD FOR 'bob'@'%' = PASSWORD('pwd');
VS Code et l'extension Remote SSH peuvent offrir un environnement de rédaction pratique.
Par contre, certaines fonctionnalités (gestion des serveurs, création de fichiers, réadaction de requêtes, consultation du résultat, etc.) peuvent être plus agréable via une application avec interface graphique
La configuration initiale du serveur peut varier selon le paquet utilisé pour l'installation. Les distributions Debian et Ubuntu maintiennent une variante du script d'installation.
Pour les autres systèmes d'exploitation, il est recommandé d'exécuter le script mysql_secure_installation pour un serveur utilisé en production.
mysql_secure_installation
Plusieurs commandes sont disponibles pour la gestion des utilisateurs et leurs privilèges.
📚 Documentation
Il est également possible de regrouper plusieurs privilèges dans un rôle pour faciliter la réutilisation.
Chaque utilisateur, account name, est défini par un identifiant ET un hôte
'username'@'host'
Le username identifie l'utilisateur et le host la source de la connexion. Par exemple, l'utilisateur root créé par défaut est défini 'root'@'localhost'. Seules les connexions en provenance de la machine elle-même, localhost, seront autorisées pour root.
'root'@'localhost'
Les manipulations des utilisateurs doivent utiliser explicitement le account name complet.
📚 Documentation CREATE USER
CREATE [OR REPLACE] USER [IF NOT EXISTS] user_specification [,user_specification ...]; user_specification: username@host [authentication_option] authentication_option: IDENTIFIED BY 'password' | IDENTIFIED BY PASSWORD 'password_hash' | IDENTIFIED {VIA|WITH} authentication_rule } authentication_rule: authentication_plugin | authentication_plugin {USING|AS} 'authentication_string' | authentication_plugin {USING|AS} PASSWORD('password')
CREATE USER 'alice'; -- Correspond a CREATE USER 'alice'@'%' -- % est un wildcard pour le host CREATE USER 'alice'@'localhost'; CREATE USER 'alice'@'A.B.C.D/S';
-- Securiser l'utilisateur, avec un mot de passe CREATE USER 'bob'@'localhost' IDENTIFIED BY 'pwd'; -- ou avec le plugin unix_socket CREATE USER 'bob'@'localhost' IDENTIFIED VIA unix_socket;
-- Pour eviter une erreur en creant un duplicata CREATE USER IF NOT EXISTS 'charlie'@'localhost'; -- Pour reinitialiser un account name avec de nouvelles caracteristiques CREATE OR REPLACE USER 'charlie'@'localhost' IDENTIFIED BY 'pwd'; -- ou PLUSIEURS mecanismes (10.4+) CREATE USER 'etd'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD('pwd');
-- Supprimer un utilisateur DROP USER [IF EXISTS] username@host;
-- Modifier les identifiants RENAME USER username@host TO newUsername@newHost;
-- Attribuer/Modifier/Retirer un mot de passe -- Mettre le mot de passe a vide pour le retirer '' SET PASSWORD [FOR username@host] = PASSWORD('clear_password');
-- Modifie un utilisateur, avec la syntaxe du CREATE USER ALTER USER [IF EXISTS] username@host [...];
-- Voir les utilisateurs existants, en tant que root ou equivalent SELECT user, host, plugin, password FROM mysql.user; -- Pour voir si plusieurs mécanismes d'authentification (10.4+) SELECT * FROM mysql.global_priv;
-- Voir la commande de création d'un utilisateur SHOW CREATE USER username@host;
La nomenclature username@host offre beaucoup de flexibilité pour définir les utilisateurs. Toutefois, MariaDB utilise plusieurs règles pour déterminer à quel utilisateur correspond une demande de connexion.
-- Voir quel utilisateur a été résolu par MariaDB à partir des identifiants fourni SELECT user() AS 'fourni', current_user() AS 'resolu';
Bien qu'il soit possible de définir des utilisateurs autorisé à se connecter de différents host, il faut configurer le service MariaDB pour être à l'écoute des connexions externes(et ouvrir le pare-feu si nécessaire).
Le fichier de configuration du service MariaDB est /etc/mysql/mariadb.conf.d/50-server.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf
# Décommenter et mettre a jour la ligne suivante avec l'IP du serveur bind-address = A.B.C.D
Puis, redémarrer le service systemctl restart mariadb.
systemctl restart mariadb
Pour exploiter le SGBD, un utilisateur fraîchement créé doit posséder des permissions.
-- Voir les permissions SHOW GRANTS [FOR username@host];
GRANT priv_type [(column_list)] [, priv_type [(column_list)], ...] ON db_name.obj_name TO username@host [WITH GRANT OPTION]; -- Le priv_type représente l'élément autorisé -- https://mariadb.com/kb/en/grant/#privilege-levels -- Le wildcard * peut être utilisé pour le db_name et obj_name -- WITH GRANT OPTION permet à l'utilisateur d'attributer a d'autres utilisateurs -- les permissions qu'il possède
Pour retirer une permission, on l'identifie avec la même structure que lors de l'attribution.
-- Retirer les permissions REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON [object_type] priv_level FROM username@host [, username@host ...]
-- Retirer TOUTES les permissions REVOKE ALL PRIVILEGES, GRANT OPTION FROM username@host [, username@host ...];
Il est également possible de faire un retrait partiel des permissions.
MariaDB [(none)]> SHOW GRANTS FOR alice@localhost; +--------------------------------------------------------+ | Grants for alice@localhost | +--------------------------------------------------------+ | GRANT USAGE ON *.* TO 'alice'@'localhost' | | GRANT ALL ON `testdb`.* TO 'alice'@'localhost' | +--------------------------------------------------------+
MariaDB [(none)]> REVOKE DROP ON testdb.* FROM alice@localhost;
MariaDB [(none)]> SHOW GRANTS FOR alice@localhost; +--------------------------------------------------------+ | Grants for alice@localhost | +--------------------------------------------------------+ | Grants for alice@localhost: GRANT USAGE ON *.* TO 'alice'@'localhost' | Grants for alice@localhost: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `testdb`.* TO 'alice'@'localhost' +--------------------------------------------------------+
Pour nous permettre de valider au minimum nos permissions, nous allons créer des bases données que nous pourrons assigner aux utilisateurs.
CREATE DATABASE [IF NOT EXISTS] db_name;
On peut préciser l'accès aux bases de données
GRANT ALL ON db_name.* TO username@host;
Puis, lister les bases données disponibles à l'utilisateur connecté
SHOW DATABASES;
👉 Énoncé