# Privileges:



Le contrôle d'accès de MySQL se fait en deux étapes :

- Etape 1 : Le serveur vérifie que vous êtes autorisé à vous connecter.
- Etape 2 : En supposant que vous pouvez vous connecter, le serveur vérifie chaque requête que vous soumettez, pour vérifier si vous avez les droits suffisants pour l'exécuter. Par exemple, si vous sélectionnez des droits dans une table, ou effacez une table, le serveur s'assure que vous avez les droits de SELECT pour cette table, ou les droits de DROP, respectivement.



#### Les commandes les plus courantes:

- **ALL PRIVILEGES** – Donne à l'utilisateur de MySQL un total accès à une base de données désignée (ou un accès global à l'ensemble du système si aucune base de données n'est sélectionnée)
- **CREATE** – Permet aux utilisateurs de créer des bases de données/tableaux
- **ALTER** – 

- **SELECT** – Permet aux utilisateurs de récupérer des données

- **INSERT** – Permet aux utilisateurs d’ajouter de nouvelles entrées dans les tableaux

- **UPDATE** – Permet aux utilisateurs de modifier les entrées existantes dans les tableaux

- **DELETE** – Permet aux utilisateurs de supprimer les entrées de la tableau

- **DROP** – Permet aux utilisateurs de supprimer des bases de données/tableaux entiers
- **GRANT OPTION** – Permet d'accorder ou de supprimer les privilèges des autres utilisateurs



#### Liste des commandes:

```
GRANT 
SELECT, INSERT, DROP, UPDATE, DELETE, CREATE, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR
ON *.* TO
```



#### Voir les droits de l'utilisateur courant:

```mysql
MariaDB [(none)]> SHOW GRANTS;
+----------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                                                                 |
+----------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '*1111111111111111111111111111111111' OR unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                                                             |
+----------------------------------------------------------------------------------------------+
```



#### Voir les droits d'un utilisateur 'mysqlbackupuser' sur un host:

```mysql
MariaDB [(none)]> SHOW GRANTS FOR 'mysqlbackupuser'@'localhost';
+----------------------------------------------------------------------------------------------+
| Grants for mysqlbackupuser@localhost                                                                                                 |
+----------------------------------------------------------------------------------------------+
| GRANT SELECT, LOCK TABLES ON *.* TO `mysqlbackupuser`@`localhost` IDENTIFIED BY PASSWORD '*22222222222222222222222222222222222222222' |
+----------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
```

Si le host n'est pas précisé, il s'agit de **'%'**

```mysql
MariaDB [(none)]> SHOW GRANTS FOR 'mysqlbackupuser';
ERROR 1141 (42000): There is no such grant defined for user 'mysqlbackupuser' on host '%'
```

Les droits peuvent être différents d'une base à l'autre:

```mysql
MariaDB [(none)]> SHOW GRANTS FOR 'the_user'@'localhost';
+----------------------------------------------------------------------------------------------+
| Grants for the_user@localhost                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
+----------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `the_user`@`localhost` IDENTIFIED BY PASSWORD '*201716EF6717C367868F777B9C6E17796F19F379' |
|
| GRANT ALL PRIVILEGES ON `bdd`.* TO `the_user`@`localhost`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
+----------------------------------------------------------------------------------------------+
```



#### Donner tous les droits à l'utilisateur:

-sur une base:

```mariadb
MariaDB [(none)]> GRANT ALL PRIVILEGES ON mydatabase.* TO the_user@localhost;
Query OK, 0 rows affected (0.029 sec)
```

-sur le tout le serveur:

```mariadb
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO the_user@localhost;
Query OK, 0 rows affected (0.025 sec)
```

Pour que les changements prennent effets:

```mysql
MariaDB [(none)]> FLUSH PRIVILEGES;
```



#### Révocation de privilèges:

`mysql> REVOKE ALL PRIVILEGES;`

```mariadb
MariaDB [(none)]> REVOKE ALL PRIVILEGES ON *.* FROM the_user@localhost;
Query OK, 0 rows affected (0.023 sec)
```

`mysql> REVOKE <PRIVILEGES>;`

```mariadb
MariaDB [(none)]> SHOW GRANTS FOR 'the_user'@'localhost';
+----------------------------------------------------------------------------------------------+
| Grants for the_user@localhost                                                                                            |
+----------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `the_user`@`localhost` IDENTIFIED BY PASSWORD '*201716EF6717C367868F777B9C6E17796F19F379' |
+----------------------------------------------------------------------------------------------+

```

On supprime les privilèges DROP et SHUTDOWN:

```mariadb
MariaDB [(none)]> REVOKE DROP, SHUTDOWN ON *.* FROM the_user@localhost;
Query OK, 0 rows affected (0.022 sec)
```

```mariadb
MariaDB [(none)]> SHOW GRANTS FOR 'the_user'@'localhost';
+----------------------------------------------------------------------------------------------+
| Grants for the_user@localhost                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+----------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, RELOAD, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `the_user`@`localhost` IDENTIFIED BY PASSWORD '*201716EF6717C367868F777B9C6E17796F19F379' |
+----------------------------------------------------------------------------------------------+

```

