GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre les privilèges MySQL

La fonction principale du système d'autorisation MySQL est d'associer un utilisateur authentifié avec des privilèges sur une base de données, tels que SELECT, INSERT, UPDATE et DELETE. La fonctionnalité du système d'autorisation comprend la possibilité d'avoir des utilisateurs anonymes et d'activer des fonctions spécifiques telles que LOAD DATA INFILE et diverses opérations administratives. Cette autorisation garantit que les utilisateurs ne peuvent effectuer que les opérations pour lesquelles ils ont reçu les privilèges appropriés.

Déterminer les privilèges utilisateur appropriés

Vous pouvez accorder plusieurs types de privilèges à un compte MySQL à différents niveaux :globalement ou pour des bases de données, des tables ou des colonnes particulières. Par exemple, vous pouvez donner à un utilisateur la possibilité d'effectuer une sélection dans n'importe quelle table de n'importe quelle base de données en lui accordant le privilège SELECT au niveau global.

Vous pouvez donner à un compte un contrôle total sur une base de données spécifique sans avoir aucune autorisation sur d'autres bases de données. Le compte peut ensuite créer la base de données, créer des tables et d'autres objets de base de données, effectuer une sélection dans les tables et ajouter, supprimer ou mettre à jour de nouveaux enregistrements.

Accorder des privilèges administratifs

Les privilèges globaux suivants s'appliquent aux utilisateurs administratifs :

  • FICHIER  :permet aux utilisateurs de demander au serveur MySQL de lire et d'écrire des fichiers dans le système de fichiers hôte du serveur.
  • PROCESSUS :permet aux utilisateurs d'utiliser l'instruction SHOW PROCESSLIST pour voir toutes les instructions que les clients exécutent.
  • SUPER  : Autorise les utilisateurs à arrêter d'autres connexions client ou à modifier la configuration d'exécution du serveur.
  • TOUS  :accorde tous les privilèges à l'exception de la possibilité d'accorder des privilèges à d'autres utilisateurs.

Le SUPER Les privilèges administratifs permettent aux utilisateurs d'effectuer des tâches supplémentaires, notamment de définir des variables globales et de mettre fin aux connexions client. Il existe également des spécificateurs de privilèges spéciaux :

– Utilisez ALL et ALL PRIVILEGES pour accorder tous les privilèges à l'exception de la possibilité d'accorder des privilèges à d'autres comptes. Utilisez GRANT ALL … WITH GRANT OPTION pour accorder tous les privilèges, y compris la possibilité d'accorder des privilèges à d'autres comptes.
– Utilisez USAGE pour accorder la possibilité de se connecter au serveur. Ce privilège crée un enregistrement dans la table des utilisateurs pour le compte, mais sans aucun privilège. Le compte peut ensuite être utilisé pour accéder au serveur à des fins limitées, telles que l'émission d'instructions SHOW VARIABLES ou SHOW STATUS. Le compte ne peut pas être utilisé pour accéder au contenu de la base de données tels que les tables, bien que ces privilèges puissent être accordés ultérieurement.

Les autres privilèges administratifs incluent CRÉER UN UTILISATEUR , CRÉER DES TABLES TEMPORAIRES , AFFICHER LES BASES DE DONNÉES , VERROUILLER LES TABLES , RECHARGER , et ARRÊT . Les privilèges administratifs, y compris ceux de la diapositive, peuvent être utilisés pour compromettre la sécurité, accéder à des données privilégiées ou effectuer des attaques par déni de service sur un serveur. Accordez les privilèges administratifs avec parcimonie, car ils peuvent être utilisés abusivement par des utilisateurs malveillants ou négligents.

Déclaration de subvention

L'instruction GRANT crée un nouveau compte ou modifie un compte existant.

Syntaxe GRANT :

 GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';

Dans la syntaxe/l'exemple ci-dessus, l'instruction accorde le privilège SELECT pour toutes les tables de la base de données world_innodb à un utilisateur nommé kari, qui doit se connecter depuis l'hôte local et utiliser un mot de passe Abc123.

Clauses de la déclaration :
1. Privilèges à accorder
2. Niveau de privilège :

  • Global :*.*
  • Base de données :[db_name].*
  • Table :[db_name].[table_name]
  • Routine stockée :[db_name].[routine_name]

3. Compte auquel vous accordez le privilège.
4. Un mot de passe facultatif.

Les clauses de l'instruction GRANT ont les effets suivants :

  • Subvention mot-clé :spécifie un ou plusieurs noms de privilège indiquant les privilèges que vous accordez. Les noms de privilège ne sont pas sensibles à la casse. Pour répertorier plusieurs privilèges, séparez-les par des virgules.
  • ON clause :spécifie le niveau des privilèges que vous accordez.
  • À clause :spécifie le compte auquel vous accordez les privilèges. Si le compte n'existe pas déjà, l'instruction le crée.
  • IDENTIFIÉ PAR clause :(facultatif) attribue le mot de passe spécifié au compte. Si le compte existe déjà, le mot de passe remplace tout ancien.

L'omission de la clause IDENTIFIED BY a l'effet suivant :

  • Si le compte dans la clause TO existe, son mot de passe reste inchangé.
  • Si le compte dans la clause TO n'existe pas, il est créé avec un mot de passe vide.

Par mesure de sécurité, activez le NO_AUTO_CREATE_USER Mode SQL pour empêcher l'instruction GRANT de créer de nouveaux comptes lorsque vous ne spécifiez pas de clause IDENTIFIED BY.

Afficher les privilèges GRANT

SHOW GRANTS affiche les instructions qui recréent les privilèges pour l'utilisateur spécifié. Il affiche les privilèges uniquement pour le compte exact spécifié dans la déclaration. L'exemple ci-dessous montre les privilèges uniquement pour [email protected], pas pour kari@%.

 SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER();

Vous pouvez également spécifier un nom de compte pour afficher les subventions pour :

 mysql>SHOW GRANTS FOR
'kari'@'myhost.example.com'; 
+----------------------------------------------------------------+ 
| Grants for [email protected]                             | 
+----------------------------------------------------------------+ 
| GRANT FILE ON *.* TO 'kari'@'myhost.example.com'               | 
| GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| 
| IDENTIFIED BY PASSWORD                                         | 
| '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA'                    | 
+----------------------------------------------------------------+

La sortie affichée ci-dessus se compose de deux instructions GRANT. Leurs clauses ON affichent les privilèges aux niveaux global et de la base de données, respectivement. Si le compte a un mot de passe, SHOW GRANTS affiche une clause IDENTIFIED BY PASSWORD à la fin de l'instruction GRANT; cette clause répertorie les privilèges globaux du compte. Le mot PASSWORD après IDENTIFIED BY indique que la valeur du mot de passe affichée est la valeur chiffrée stockée dans la table utilisateur, et non le mot de passe réel. Étant donné que le mot de passe est stocké à l'aide d'un cryptage unidirectionnel, MySQL n'a aucun moyen d'afficher le mot de passe non crypté.

Si le compte peut accorder tout ou partie de ses privilèges à d'autres comptes, la sortie affiche WITH GRANT OPTION à la fin de chaque instruction GRANT à laquelle elle s'applique.

Restrictions des privilèges utilisateur

Vous ne pouvez pas explicitement refuser l'accès à un utilisateur spécifique. Vous ne pouvez pas associer un mot de passe à un objet spécifique tel qu'une base de données, une table ou une routine.

Tableaux des subventions

Le serveur MySQL lit les tables de droits de la base de données mysql dans la mémoire au démarrage et base toutes les décisions de contrôle d'accès sur ces tables. Les tableaux correspondent aux niveaux de privilège :

Niveau de privilège/tableau Contenu et privilèges
utilisateur Contient un enregistrement pour chaque compte connu du serveur
db Privilèges spécifiques à la base de données
tables_priv Privilèges spécifiques aux tables
columns_priv Privilèges spécifiques aux colonnes
procs_priv Procédures stockées et privilèges de fonctions

L'utilisateur table contient un enregistrement pour chaque compte connu du serveur, ainsi que ses privilèges globaux. Il indique également d'autres informations sur le compte, telles que :

  • Toutes les limites de ressources auxquelles il est soumis
  • Si les connexions client qui utilisent le compte doivent être établies via une connexion sécurisée utilisant SSL

Chaque compte doit avoir un enregistrement de table d'utilisateurs ; le serveur détermine s'il accepte ou rejette chaque tentative de connexion en lisant le contenu de cette table. Chaque compte possède également des enregistrements dans les autres tables d'octroi s'il dispose de privilèges à un niveau autre que le niveau global.

Utilisation des tableaux de subventions

Le serveur détermine si un client peut se connecter en fonction des colonnes Hôte, Utilisateur et Mot de passe de la table des utilisateurs. Pour se connecter avec succès, MySQL doit faire correspondre un enregistrement dans la table des utilisateurs à l'hôte à partir duquel le client se connecte, le nom d'utilisateur donné par le client et le mot de passe répertorié dans l'enregistrement correspondant.

Une fois qu'un client s'est connecté, MySQL vérifie les privilèges d'accès pour chaque déclaration en faisant correspondre l'identité du compte aux colonnes Hôte et Utilisateur des tables de privilèges.

  • Les privilèges de chaque ligne du tableau des utilisateurs s'appliquent globalement au compte identifié par ses colonnes Hôte et Utilisateur.
  • Les privilèges dans les enregistrements correspondants des tables db, tables_priv, columns_priv et procs_priv s'appliquent au niveau identifié par le nom de la table de privilèges spécifique.

Par exemple, les privilèges d'un enregistrement de table db s'appliquent à la base de données nommée dans l'enregistrement, mais pas aux autres bases de données. Le processus d'installation de MySQL crée les tables de droits.

  • Les tables d'octroi utilisent le moteur de stockage MyISAM.
  • La disponibilité de MyISAM est garantie.

Effectuer des modifications de privilèges

Le serveur lit les tables d'octroi en mémoire lors de sa séquence de démarrage et utilise les copies en mémoire pour vérifier l'accès client. Le serveur actualise ses copies en mémoire des tables d'octroi dans les conditions suivantes :

  • Vous modifiez un compte utilisateur en émettant une déclaration de gestion de compte telle que CREATE USER, GRANT, REVOKE ou SET PASSWORD.
  • Vous rechargez les tables explicitement en émettant une instruction FLUSH PRIVILEGES ou en exécutant une commande mysqladmin flush-privileges ou mysqladmin reload.

Évitez d'apporter des modifications directement aux tableaux de subventions pour les raisons suivantes :

  • La syntaxe des relevés de gestion de compte est conçue pour être claire et simple.
  • Si vous faites une erreur dans un relevé de gestion de compte, le relevé échoue et ne modifie aucun paramètre.
  • Si vous faites une erreur lors de la modification directe des tableaux de subventions, vous pouvez verrouiller tous les utilisateurs hors du système.

Quand les modifications sont-elles appliquées ?

  • Les modifications apportées aux privilèges globaux et aux mots de passe ne s'appliquent qu'aux connexions ultérieures de ce compte.
  • Les modifications apportées aux privilèges au niveau de la base de données s'appliquent après la prochaine instruction USE db_name du client.
  • Les modifications apportées aux privilèges de table et de routine s'appliquent immédiatement.

Révocation des privilèges du compte

Utilisez l'instruction REVOKE pour révoquer des privilèges d'instruction SQL spécifiques :

REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';

Utilisez l'instruction REVOKE pour révoquer les privilèges d'un compte. Vous pouvez choisir de révoquer des privilèges pour diverses raisons, telles qu'une réduction de l'accès requis d'un utilisateur. La syntaxe de l'instruction REVOKE contient les clauses suivantes :

  • RÉVOQUER mot-clé :spécifie la liste des privilèges à révoquer.
  • ON clause :indique le niveau auquel les privilèges doivent être révoqués.
  • DE clause :spécifie le nom du compte.

L'exemple ci-dessus suppose qu'Amon dispose des privilèges SELECT, DELETE, INSERT et UPDATE sur la base de données world_innodb, mais que vous souhaitez modifier le compte afin qu'il n'ait qu'un accès SELECT. Le premier exemple révoque les privilèges qui lui permettent d'apporter des modifications.

Pour révoquer le privilège d'accorder des privilèges à d'autres utilisateurs :

REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';

L'exemple ci-dessus révoque la capacité de Jan à accorder à d'autres utilisateurs tous les privilèges qu'il détient pour la base de données world_innodb, en révoquant le privilège GRANT OPTION de son compte.

Pour révoquer tous les privilèges, y compris l'octroi de privilèges à d'autres :

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';

L'exemple ci-dessus révoque tous les privilèges détenus par le compte de Sasha (à n'importe quel niveau), en révoquant TOUS LES PRIVILÈGES et GRANT OPTION de son compte.

Remarque  :Utilisez l'instruction SHOW GRANTS avant d'émettre REVOKE pour déterminer les privilèges à révoquer, puis à nouveau par la suite pour confirmer le résultat.Guide du débutant sur la gestion des utilisateurs MySQL
Comprendre l'authentification enfichable MySQL


Linux
  1. Installer MariaDB ou MySQL sur Linux

  2. Comment ajouter un nouvel utilisateur MySQL et accorder des privilèges d'accès

  3. Comprendre YAML pour Ansible

  4. Comprendre les privilèges MySQL

  5. Comprendre l'authentification enfichable MySQL

Comment supprimer ou supprimer un compte utilisateur MySQL

Comprendre les autorisations de fichiers Linux

Comment vérifier les privilèges utilisateur MySQL sous Linux

Comprendre les processus sous Linux

Comment définir des privilèges limités sur un compte revendeur dans WHM ?

Qu'est-ce que MySQL vs MariaDB vs Percona