Premier niveau de l’administration des SGBD : utilisateurs, rôles, droits
Le DBA (DataBase Administrator). Il en existe au moins un. Une petite base peut n’avoir qu’un seul administrateur. Une base importante peut en regrouper plusieurs qui se partagent les tâches suivantes :
● L’administrateur réseaux (qui peut être le DBA) se charge de la configuration des couches clients pour les accès distants.
● Les développeurs qui conçoivent et mettent à jour la base. Ils peuvent aussi agir sur leurs objets (création et modification des tables, index, séquences, etc.). Ils transmettent au DBA leurs demandes spécifiques (stockage, optimisation, sécurité).
● Les administrateurs d’applications qui gèrent les données manipulées par l’application ou les applications. Pour les petites et les moyennes bases, le DBA joue ce rôle.
● Les utilisateurs qui se connectent et interagissent avec la base à
travers les applications ou à l’aide d’outils (interrogations pour la
génération de rapports, ajouts, modifications ou suppressions
d’enregistrements).
Tous seront des utilisateurs (au sens Oracle) avec des privilèges
différents.
SHOW DATABASES;
Depuis sur l’IUT la machine utilisée est serveurmysql2
:
Se connecter en tant que root :
-- sur un poste de l'IUT
mysql --user=root --host=serveurmysql2 --database=mysql --password=secret
-- avec VPN à l'IUT
mysql --user=root --host=serveurmysql2.iut-bm.univ-fcomte.fr --database=mysql --password=secret
-- sur une machine personnelle
sudo mysql -u root -pCréer des utilisateurs préfixés de votre login de l’iut
L’hôte est l’adresse à partir de laquelle l’utilisateur va se connecter.
ip address
## recherche adresse IP sur un portable avec le VPN
## inet 10.248.2.112/32
login@912e002-01:~/Desktop$ hostname -i
172.20.176.%
ping -a serveurmysql2.iut-bm.univ-fcomte.fr
-- remplacer l'adresse IP par localhost sur vos machines personnelles
CREATE USER 'login'@'%' IDENTIFIED BY 'secret';
CREATE USER 'login_user2'@'172.20%' IDENTIFIED BY 'secret';
CREATE USER 'login_user3'@'10.248%' IDENTIFIED BY 'secret';
-- ou sur un portable
CREATE USER 'login_user4'@'serveurmysql2' IDENTIFIED BY 'secret';
CREATE USER 'login_user41'@'pc-amillet' IDENTIFIED BY 'secret';
CREATE USER login_user5 IDENTIFIED BY 'secret';
CREATE USER login_user6;
CREATE USER 'login_user7'@'%login%' IDENTIFIED BY 'secret';
CREATE USER login_admin IDENTIFIED BY 'secret';
CREATE USER 'login_user8'@'%912e007-0%' IDENTIFIED BY 'secret';
CREATE USER 'login_user9'@'912e007-03.iut-bm.univ-fcomte.fr' IDENTIFIED BY 'secret';
-- remplacer 007-03 par le numéro de votre posteTester les connexions dans un terminal
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user2
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user3
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user4
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user41
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user5
mysql --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user6
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user7
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user8
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_user9
mysql --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --user=login_adminvoir
mysql --password=secret --host=serveurmysql2 --user=login -- o
mysql --password=secret --host=serveurmysql2 --user=login_user2 -- n
mysql --password=secret --host=serveurmysql2 --user=login_user3 -- o
mysql --user=login_user4 --password=secret --host=serveurmysql2 -- n
mysql --user=login_user5 --password=secret --host=serveurmysql2 -- o
mysql --user=login_user6 --host=serveurmysql2 -- n
mysql --user=login_user7 --password=secret --host=serveurmysql2 -- n
mysql --user=login_user8 --password=secret --host=serveurmysql2 -- n
mysql --user=login_user9 --password=secret --host=serveurmysql2 -- n
mysql --user=login_admin --password=secret --host=serveurmysql2 -- oon peut l’adresse ip qui est refusé
SELECT User,Host FROM mysql.user ORDER BY User;
SHOW CREATE USER 'login'@'%';
SELECT User,Host FROM mysql.user WHERE User LIKE '%login%';Remarque : en remplaçant 'login'@'hostclient' par
'login'@'%'
select user()mysql> SELECT user() ;Le résultat peut être : moi@localhost ou moi@maMachine. C’est le nom de l’utilisateur et son hôte (sa machine)
mysql> SELECT current_user() ;Le current_user est un profil d’utilisateur et pas l’utilisateur avec son nom et sa machine. On peut par exemple avoir un profil de connexion correspondant à :
• un nom d’utilisateur pouvant se connecter de n’importe quelle
machine : moi@’%’
• un nom d’utilisateur pouvant se connecter de la machine du serveur :
moi@localhost
• un nom d’utilisateur pouvant se connecter de sa machine uniquement :
moi@maMachine
• n’importe quel utilisateur se connectant à partir d’une machine
particulière : ‘%’@cetteMachine
• un nom d’utilisateur pouvant se connecter de sa machine uniquement :
moi@maMachine
afficher la liste des utilisateurs
DESCRIBE user;
SELECT Host,User
,Select_priv
-- ,max_connections
-- ,max_user_connections
, plugin,authentication_string
, password_expired
FROM user
-- WHERE User LIKE '%login%'
;SELECT User,Host FROM mysql.user WHERE User LIKE '%login%';
RENAME USER 'login_user4' TO 'login_user4'@'%'; -- NON
RENAME USER 'login_user4'@'serveurmysql2' TO 'login_user4'@'%';
SELECT User,Host FROM mysql.user WHERE User LIKE '%login%';DROP USER 'login_user4';
DROP USER 'login_user3'@'10.248%';
CREATE USER 'login_user3'@'%' IDENTIFIED BY 'secret';
SELECT User,Host FROM mysql.user;
SELECT User,Host FROM mysql.user WHERE User LIKE '%login%';
L’instruction dépend de la version de mysql
(mysql --version dans un terminal)
| Commande | MySQL | MariaDB | Statut | Notes |
|---|---|---|---|---|
ALTER USER 'login' IDENTIFIED BY 'secret'; |
≥ 5.7.6 | ≥ 10.2 | ✅ Conseillé | Syntaxe standard SQL, à privilégier dans tous les cas. Pas de
FLUSH PRIVILEGES nécessaire. |
ALTER USER 'login' IDENTIFIED WITH 'mysql_native_password' BY 'secret'; |
8.x | ❌ Non | ℹ️ Contexte | Utile sur MySQL 8 pour forcer le plugin legacy (compatibilité clients anciens). |
ALTER USER 'login' IDENTIFIED VIA mysql_native_password USING PASSWORD('secret'); |
❌ Non | ≥ 10.2 | ℹ️ MariaDB only | Syntaxe propre à MariaDB (VIA au lieu de
WITH). |
ALTER USER 'login' IDENTIFIED WITH plugin_authentification BY 'secret'; |
❌ Non | ❌ Non | ❌ Invalide | plugin_authentification n’est pas un vrai nom de
plugin. À supprimer du cours. |
SET PASSWORD FOR 'login' = PASSWORD('secret'); |
≤ 5.7.5 | Legacy | ⚠️ Déconseillé | Fonction PASSWORD() supprimée sur MySQL 8. À réserver
aux très vieilles versions. |
UPDATE user SET Password=PASSWORD('secret') WHERE User='login'; |
≤ 5.7.5 | ❌ Non | ❌ Déprécié | Colonne Password supprimée à partir de 5.7.6. Ne
fonctionne plus. |
UPDATE user SET authentication_string=PASSWORD('secret') WHERE User='login'; FLUSH PRIVILEGES; |
5.7.6 – 7.x | ❌ Non | ❌ Déconseillé | Non portable, non conforme aux autres SGBDR.
FLUSH PRIVILEGES requis manuellement. |
Rappel :
FLUSH PRIVILEGESest inutile aprèsALTER USERouGRANT(rechargement automatique). Il n’est nécessaire qu’après unUPDATEdirect sur les tables système.
Donc on retiendra
ALTER USER 'login' IDENTIFIED BY 'secret';
Pour information :
PostgreSQL
CREATE USER user_name WITH ENCRYPTED PASSWORD 'mypassword';
ALTER USER user_name WITH PASSWORD 'new_password';Oracle
CREATE USER username IDENTIFIED BY password;
ALTER USER user_name IDENTIFIED BY new_password;SQL Server
CREATE LOGIN user_name WITH PASSWORD = 'mypassword';
ALTER LOGIN user_name WITH PASSWORD = 'new_password';CREATE DATABASE BDD_login;
CREATE DATABASE BDD_login2
DEFAULT CHARACTER SET utf8
COLLATE utf8_bin;
CREATE DATABASE BDD_login3;
CREATE DATABASE BDD_login4;
SELECT * FROM db; -- sur mysql de oracle (vide sur mariadb)
-- voir les droits par base de données
SELECT * FROM information_schema.SCHEMA_PRIVILEGES;
-- ou plus lisible
SHOW GRANTS FOR 'login'@'%';
-- 2. on vérifie (vide pour l'instant)
SELECT * FROM mysql.db;
-- 3. on accorde des droits
GRANT ALL PRIVILEGES ON BDD_login.* TO 'login'@'%';
-- 4. on vérifie à nouveau (la ligne apparaît)
SELECT * FROM mysql.db;les schémas (BDD sur mysql)
SELECT SCHEMA_NAME , default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
SELECT SCHEMA_NAME , default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME LIKE '%login%';les droits
SELECT * FROM db; -- sur mysql de oracle (vide sur mariadb)
-- voir les droits par base de données
SELECT * FROM information_schema.SCHEMA_PRIVILEGES;
-- ou plus lisible
SHOW GRANTS FOR 'login'@'%';
-- 2. on vérifie (vide pour l'instant)
SELECT * FROM mysql.db;
-- 3. on accorde des droits
GRANT ALL PRIVILEGES ON BDD_login.* TO 'login'@'%';
-- 4. on vérifie à nouveau (la ligne apparaît)
SELECT * FROM mysql.db;supprimer une base de données
DROP DATABASE BDD_login4;USE BDD_login;-- compte login (remplacer login et motdepasse) dans tout le script
-- mysql --user=login --password=motdepasse --host=localhost --database=BDD_login
CREATE DATABASE BDD_login;
CREATE USER 'login' IDENTIFIED BY 'motdepasse';
GRANT ALL PRIVILEGES ON BDD_login.* TO 'login'@'%';
FLUSH PRIVILEGES;
-- pb avec LOAD DATA
-- GRANT ALL PRIVILEGES ON BDD_login.* TO 'login'@'%';Consulter les droits d’un utilisateur : ➢ Pour n’importe quel utilisateur :
SHOW GRANTS [FOR user];
➢ Pour soi-même :
mysql> SHOW GRANTS;
➢ Droit d’USAGE Quand on crée un utilisateur, il n’a qu’un seul droit : le droit d’usage. Ca lui permet de se connecter mais il ne peut rien faire d’autre !
mysql> SHOW GRANTS;
+------------------------------------------+
| Grants for nouvelUtilisateur@localhost
|
+------------------------------------------+
| GRANT USAGE ON *.* TO ` nouvelUtilisateur `@`localhost` |
+------------------------------------------+
info : pour voir tous les priviléges
GRANT
La commande GRANT appliquée à un utilisateur n’existant pas crée cet utilisateur.
GRANT privilege [,privilege] ON composant TO nomUtilisateur [WITH GRANT OPTION]➢ Exemple de création d’un utilisateur sans droits
mysql> GRANT USAGE ON *.* TO login@localhost;L’utilisateur login peut se connecter sur n’importe quelle machine et n’a aucun droit. Il accède uniquement à la BD information_schema.
ON *.* veut dire : toutes les BD . toutes les
tables➢ Exemple de création d’un utilisateur qui peut tout consulter
mysql> GRANT SELECT ON *.* TO login ;➢ Exemple de création d’un super-utilisateur
mysql> GRANT ALL PRIVILEGES ON *.* TO login_admin WITH GRANT OPTION;L’utilisateur admin peut se connecter sur la machine du serveur et a les mêmes droits que l’administrateur root. Il faut éviter de multiplier les administrateurs sur une machine en production !!!
Jeu de test pour GRANT
GRANT ALL PRIVILEGES ON BDD_login.* TO 'login';
GRANT ALL PRIVILEGES ON BDD_login2.* TO 'login'@'%';
SHOW GRANTS FOR login;
GRANT SELECT,INSERT, UPDATE, DELETE ON BDD_login3.* TO 'login';
SHOW GRANTS FOR login;
GRANT SELECT ON *.* TO login ;
SHOW GRANTS FOR login;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO login_admin WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT SELECT,INSERT, UPDATE, DELETE ON BDD_login2.* TO 'login';
FLUSH PRIVILEGES;
SHOW GRANTS FOR login;
SHOW GRANTS FOR login_admin;
-- depuis l'autre terminale
mysql --user=login3 --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --database=BDD_login
mysql --user=login4 --password=secret --host=serveurmysql2.iut-bm.univ-fcomte.fr --database=BDD_login
ip address
hostname -i
documentation
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
SELECT * FROM db;
CREATE DATABASE BDD_login;
CREATE USER "login" IDENTIFIED BY by "motdepasse";
GRANT ALL PRIVILEGES ON BDD_login.* TO 'login'@'%';
FLUSH PRIVILEGES;
mysql --user=login --host=serveurmysql2.iut-bm.univ-fcomte.fr --password=motdepasse BDD_loginLa liste des droits
Voici la liste des droits fréquemment utilisés :
| Droit | Signification |
ALL ou ALL PRIVILEGES |
TOus les droits sauf WITH GRANT OPTION. |
USAGE |
Synonyme de “pas de droits”. |
ALTER |
Autorise l’utilisation de ALTER TABLE. |
CREATE |
Autorise l’utilisation de CREATE TABLE. |
DELETE |
Autorise l’utilisation de DELETE. |
DROP |
Autorise l’utilisation de DROP TABLE. |
INSERT |
Autorise l’utilisation de INSERT. |
INDEX |
Autorise l’utilisation de CREATE INDEX et
DROP INDEX. |
SELECT |
Autorise l’utilisation de SELECT. |
UPDATE |
Autorise l’utilisation de UPDATE. |
GRANT OPTION |
Synonyme pour WITH GRANT OPTION |
| Droit | Signification |
CREATE TEMPORARY TABLES |
Autorise l’utilisation de CREATE TEMPORARY TABLE. |
EXECUTE |
Autorise l’utilisateur à exécuter des procédures stockées (pour MySQL 5.0). |
FILE |
Autorise l’utilisation de SELECT ... INTO OUTFILE et
LOAD DATA INFILE. |
LOCK TABLES |
Autorise l’utilisation de LOCK TABLES sur les tables
pour lesquelles l’utilisateur a les droits de SELECT. |
PROCESS |
Autorise l’utilisation de SHOW FULL PROCESSLIST. |
REFERENCES |
Réservé pour le futur. |
RELOAD |
Autorise l’utilisation de FLUSH. |
REPLICATION CLIENT |
Donne le droit à l’utilisateur de savoir où sont les maîtres et esclaves. |
REPLICATION SLAVE |
Nécessaire pour les esclaves de réplication (pour lire les historiques binaires du maître). |
SHOW DATABASES |
SHOW DATABASES affiche toutes les bases de
données. |
SHUTDOWN |
Autorise l’utilisation de mysqladmin shutdown. |
SUPER |
Autorise une connexion unique même si max_connections
est atteint, et l’exécution des commandes CHANGE MASTER,
KILL thread, mysqladmin debug,
PURGE MASTER LOGS et SET GLOBAL. |
-- etape 1
SHOW GRANTS FOR login;
REVOKE UPDATE ON BDD_login2.* FROM login;
SHOW GRANTS FOR login;
REVOKE ALL PRIVILEGES ON BDD_login.* FROM login;
SHOW GRANTS FOR login;
REVOKE ALL PRIVILEGES ON BDD_login2.* FROM login; -- supprime la ligne
SHOW GRANTS FOR login;
REVOKE ALL PRIVILEGES ON *.* FROM login;
SHOW GRANTS FOR login;
SHOW GRANTS FOR login_admin;
REVOKE GRANT OPTION ON *.* FROM login_admin ;
SHOW GRANTS FOR login_admin;CREATE ROLE '<role>';
CREATE ROLE '<role>'@'<host>';
GRANT <privileges> ON <database>.<object> TO '<role>'@'<host>';
SELECT CURRENT_ROLE();https://www.prisma.io/dataguide/mysql/authentication-and-authorization/role-management
CREATE ROLE developer;
GRANT developer TO login;
GRANT SELECT,INSERT ON BDD_login.* TO developer;
SELECT CURRENT_ROLE();https://mariadb.com/kb/en/set-role/
SELECT CURRENT_ROLE();
SET ROLE developer;
SELECT CURRENT_ROLE();
SHOW GRANTS;
SET ROLE NONE;
SELECT CURRENT_ROLE();
SHOW GRANTS;Créer dans une base login_mediatheque les tables
suivantes :
CREATE TABLE login_film (id INT, titre VARCHAR(50), genre VARCHAR(30));
CREATE TABLE login_client (id INT, nom VARCHAR(50), email VARCHAR(50));
CREATE TABLE login_emprunt (id INT, id_film INT, id_client INT, date_retour DATE);Créer trois utilisateurs :
login_media_gestionnaire : peut tout faire sur toutes
les tableslogin_media_employe : peut lire et modifier
login_film et login_emprunt, mais pas
login_clientlogin_media_caisse : peut uniquement lire
login_filmPuis :
GRANT correspondantsSHOW GRANTS et
SELECT * FROM mysql.dbDELETE) de
login_media_employe sur login_empruntCréer dans une base login_rh la table suivante :
CREATE TABLE login_employe (
id INT,
nom VARCHAR(50),
prenom VARCHAR(50),
salaire DECIMAL(10,2),
adresse VARCHAR(100)
);Créer deux utilisateurs :
login_rh_manager : peut voir toutes les colonneslogin_rh_consultant : peut voir uniquement
nom et prenom — pas le salaire ni
l’adresseGRANT avec restriction par colonnelogin_rh_consultant et
vérifier qu’un SELECT salaire FROM login_rh.login_employe
est bien refuséSELECT nom, prenom FROM login_rh.login_employe
fonctionneCréer dans une base login_ecole les tables suivantes
:
CREATE TABLE login_eleve (id INT, nom VARCHAR(50));
CREATE TABLE login_cours (id INT, intitule VARCHAR(50));
CREATE TABLE login_note (id INT, id_eleve INT, id_cours INT, valeur DECIMAL(4,2));Créer les rôles suivants :
login_role_lecture : droit SELECT sur
toutes les tables de login_ecolelogin_role_saisie : droits INSERT et
UPDATE sur login_note uniquementlogin_role_admin : tous les droits sur
login_ecoleCréer trois utilisateurs et leur attribuer les rôles :
login_prof → login_role_lecture +
login_role_saisielogin_secretaire → login_role_lecturelogin_dba → login_role_adminPuis :
login_prof et activer son rôle
avec SET ROLESELECT CURRENT_ROLE() et
SHOW GRANTSINSERT sur login_note
fonctionne mais qu’un INSERT sur login_eleve
est refuséReprendre l’exercice du cours (Alice, Bob, Caroline) en préfixant tous les objets :
CREATE DATABASE login_bdd;
CREATE USER login_Alice;
CREATE USER login_Bob;
CREATE USER login_Caroline;
CREATE TABLE login_bdd.login_TA1 (no_ta1 VARCHAR(50));
CREATE TABLE login_bdd.login_TA2 (no_ta2 VARCHAR(50));
CREATE TABLE login_bdd.login_TA3 (no_ta3 VARCHAR(50));
CREATE TABLE login_bdd.login_TB1 (no_tb1 VARCHAR(50));
CREATE TABLE login_bdd.login_TB2 (no_tb2 VARCHAR(50));
CREATE TABLE login_bdd.login_TC1 (AT1 VARCHAR(50), AT2 VARCHAR(50), AT3 VARCHAR(50), AT4 VARCHAR(50));
CREATE VIEW login_bdd.login_VB1 AS SELECT * FROM login_bdd.login_TB1;GRANT pour les tables de
login_Alice (login_TA1,
login_TA2, login_TA3)GRANT pour les tables de
login_Bob (login_TB1, login_TB2,
login_VB1)GRANT sur colonnes pour la table
login_TC1 de login_Caroline (AT1,
AT2 pour tous ; AT3, AT4 pour
login_Bob uniquement)login_TB2 accessible à tous sauf
login_Alice — expliquer pourquoi c’est impossible à
exprimer directement en SQL et proposer une solution alternative (vue ou
rôle)Le point 4 est intentionnellement ouvert : MySQL/MariaDB ne permet pas d’exclure un utilisateur d’un droit global. La réflexion sur cette limitation est l’objectif.
autre exo
Exercice 3 : Droits d’accès
On considère trois utilisateurs Alice, Bob et Caroline ayant chacun respectivement un compte
A,B,C sur une base de données.
— Alice dispose de trois tables TA1, TA2, TA3
— Bob dispose de deux tables TB1, TB2 et une vue VB1.
— Caroline dispose d’une table TC1.
A partir des hypothèses suivantes, écrire les commandes SQL permettant de définir la politique
de gestion des droits d’accès.
Alice souhaite que :
— TA1 soit visible pour Bob et Caroline mais que seul Bob puisse mettre à jour ses données.
— TA2 soit privée
— TA3 soit accessible en lecture pour tout le monde (tous les utilisateurs du SGBD)
Bob souhaite que :
— TB1 soit modifiable (insertion, mise à jour et suppression) par Alice et Caroline.
— TB2 soit accessible en lecture pour tout le monde sauf pour Alice.
— VB1 soit visible uniquement pour Caroline.
Caroline souhaite que les attributs AT1 et AT2 soient visibles par tous les utilisateurs de la
base et que les attributs AT3 et AT4 soient visibles uniquement par Bob.
CREATE DATABASE login_bdd;
CREATE USER login_Alice;
CREATE USER login_Bob;
CREATE USER login_Caroline;
USE login_bdd;
CREATE TABLE IF NOT EXISTS login_bdd.login_TA1 (
no_ta1 varchar(50)
);
CREATE TABLE IF NOT EXISTS login_bdd.login_TA2 (
no_ta2 varchar(50)
);
CREATE TABLE IF NOT EXISTS login_bdd.login_TA3 (
no_ta3 varchar(50)
);
CREATE TABLE IF NOT EXISTS login_bdd.login_TB1 (
no_tb1 varchar(50)
);
CREATE TABLE IF NOT EXISTS login_bdd.login_TB2 (
no_tb2 varchar(50)
);
CREATE VIEW VB1
AS SELECT *
FROM login_bdd.login_TB1;
CREATE TABLE IF NOT EXISTS login_bdd.login_TC1 (
AT1 varchar(50),
AT2 varchar(50),
AT3 varchar(50),
AT4 varchar(50)
);
-- droit pour les tables de login_Alice
GRANT SELECT, INSERT, UPDATE, DELETE ON login_bdd.login_TA1 TO login_Bob;
GRANT SELECT ON login_bdd.login_TA1 TO login_Caroline, login_Bob;
GRANT SELECT ON login_bdd.login_TA3 TO 'login_Caroline'@'%','login_Bob'@'%';
GRANT ALL PRIVILEGES ON login_bdd.login_TA1 TO 'login_Alice'@'%';
GRANT ALL PRIVILEGES ON login_bdd.login_TA2 TO 'login_Alice'@'%';
GRANT ALL PRIVILEGES ON login_bdd.login_TA1 TO 'login_Alice'@'%';
REVOKE SELECT ON login_bdd.login_TA1 FROM login_Caroline, login_Bob;
REVOKE INSERT, UPDATE, DELETE ON login_bdd.login_TA1 FROM login_Bob;
REVOKE SELECT ON login_bdd.login_TA3 FROM login_Caroline, login_Bob;
SHOW GRANTS FOR login_Bob;
SHOW GRANTS FOR login_Caroline;
SHOW GRANTS FOR login_Alice;
-- droit pour les tables de login_Bob
GRANT SELECT, INSERT, UPDATE, DELETE ON login_bdd.login_TA1 TO login_Bob;
GRANT SELECT ON login_bdd.login_TA1 TO login_Caroline, login_Bob;
GRANT SELECT ON login_bdd.login_TA3 TO 'login_Caroline'@'%','login_Bob'@'%';
GRANT ALL PRIVILEGES ON login_bdd.login_TB1 TO login_Bob;
GRANT ALL PRIVILEGES ON login_bdd.login_TB2 TO login_Bob;
SHOW GRANTS FOR login_Caroline;
SHOW GRANTS FOR login_Alice;
SHOW GRANTS FOR login_Bob;
-- droit pour les tables de login_Caroline
-- GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';
SHOW GRANTS FOR login_Alice;
SHOW GRANTS FOR login_Bob;
SHOW GRANTS FOR login_Caroline;
DROP DATABASE login_bdd;
DROP USER login_Alice;
DROP USER login_Bob;
DROP USER login_Caroline;https://stackoverflow.com/questions/45596542/grant-permission-to-all-columns-individually-in-mysql