mysql create user how create new user mysql
Ce tutoriel explique la commande MySQL Create User avec différents mécanismes d'autorisation, la gestion des mots de passe, les options de limite de ressources, etc.:
La commande MySQL CREATE USER est utilisée pour créer de nouveaux utilisateurs et accorder un accès granulaire aux bases de données / tables, etc.
Plusieurs personnes utilisent une instance de serveur MySQL, ayant différents niveaux d'accès. Par exemple, certains utilisateurs ont un accès en lecture à une base de données spécifique, de même, certains peuvent avoir un accès en lecture-écriture à une base de données particulière, etc.
différence entre le test unitaire et le test d'intégration
La commande CREATE USER est plus fréquemment utilisée par les administrateurs MySQL pour créer des utilisateurs pour les instances du serveur MySQL et accorder différentes autorisations à l'aide de la requête GRANT.
Ce que vous apprendrez:
- Ma commande SQL CREATE USER
- CRÉER UN UTILISATEUR avec le plugin Auth
- CRÉER UN UTILISATEUR avec un rôle
- CRÉER UN UTILISATEUR avec SSL / TLS
- CRÉER UN UTILISATEUR avec les options de gestion des mots de passe
- CRÉER UN UTILISATEUR avec les options de limite de ressources
- Mettre à jour et supprimer des utilisateurs MySQL
- Questions fréquemment posées
- Conclusion
Ma commande SQL CREATE USER
La commande CREATE USER est utilisée pour créer ou ajouter de nouveaux comptes aux instances de serveur MySQL.
Cette commande est généralement accessible / est utilisée par les administrateurs MySQL pour gérer l'accès aux différents utilisateurs de l'instance MySQL Server.
Lors de la création d'un utilisateur à l'aide de la commande CREATE USER, vous pouvez spécifier
- Authentification, qui doit être utilisée lors de la connexion à MySQL.
- Limite de ressources
- Propriétés de gestion des mots de passe: expiration du mot de passe, paramètres de réutilisation du mot de passe.
- Verrouillage de compte: les comptes nouvellement créés seraient verrouillés ou déverrouillés.
Les comptes sont créés dans la table système MySQL nommée «Mysql.user»
Remarque: Pour utiliser la commande CREATE USER, l'utilisateur doit avoir le privilège CREATE_USER ou insérer une subvention pour MySQL schéma système.
Dans la forme la plus simple, la syntaxe de la commande CREATE USER est la suivante:
CREATE USER (IF NOT EXISTS) '{username}'@'{hostname}' IDENTIFIED BY '{passwordString}';
Notez le facultatif SI NON EXISTE . Cela garantit que si l'utilisateur existe déjà, le résultat de la requête SQL lèvera simplement un avertissement et aucune erreur. Ici, 'Nom d'utilisateur' fait référence au nom d'utilisateur réel auquel l'utilisateur se connecterait et «Nom d’hôte» fait référence à l'hôte à partir duquel l'utilisateur se connecterait.
Veuillez noter, si le champ «hostname» est laissé vide, la valeur de l’hôte est supposée être «%», ce qui permettrait à n’importe quel hôte de se connecter avec le nom d’utilisateur spécifié.
Créez un utilisateur avec cette syntaxe:
CREATE USER 'userx'@'localhost' IDENTIFIED BY 'password';
Avec la déclaration ci-dessus, nous avons créé un utilisateur avec le nom d'utilisateur «userx» et le mot de passe comme «mot de passe». Le nom d'hôte est localhost car nous créons les utilisateurs sur notre instance MySQL locale.
Essayons d'interroger la table mysql.users pour voir l'entrée de l'utilisateur que nous avons créé.
SELECT * from mysql.user
Vous verrez le résultat comme ci-dessous:
Les 4 premiers utilisateurs sont pré-créés lors de l'installation de MySQL elle-même tandis que la dernière entrée est l'utilisateur que nous avons créé - c'est-à-dire «userx».
Il est important de noter qu'à ce stade, nous venons de créer un utilisateur sans donner aucun droit à l'utilisateur en termes de création / mise à jour / interrogation d'une base de données, etc.
Essayons de nous connecter avec cet utilisateur avec le client MySQL.
Vous pouvez utiliser le terminal pour vous connecter avec la commande ci-dessous:
$ /usr/local/mysql/bin/mysql -u userx -p
Lorsqu'on vous demande un mot de passe, entrez le mot de passe en tant que «mot de passe».
Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 33 Server version: 8.0.20 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
Maintenant, nous allons créer une nouvelle base de données en utilisant le mot clé CREATE DATABASE.
mysql> create database student; ERROR 1044 (42000): Access denied for user 'userx'@'localhost' to database 'student'
Comme vous pouvez le voir ci-dessus, un message d’erreur est généré qui indique que l’utilisateur ‘userx’ n’a pas accès pour créer DATABASE Voyons les autres options qui pourraient être utilisées avec la commande CREATE USER.
CRÉER UN UTILISATEUR avec le plugin Auth
«Auth plugin» spécifie une option d’authentification et est stocké dans la colonne plugin de la table mysql.user. MySQL prend en charge une poignée de plugins d'authentification.
Certains plugins pris en charge sont les suivants:
- Hachage de mot de passe natif MySQL: Le hachage de mot de passe natif n'est rien d'autre que l'utilisation de SHA1 pour stocker les valeurs de mot de passe dans la table mysql.users. Ce mécanisme est considéré comme moins sécurisé que le hachage de mot de passe SHA1.
- Hachage de mot de passe SHA2 256: Il s'agit du plugin d'authentification par défaut utilisé par MySQL. c'est-à-dire même si aucun plugin d'authentification n'est spécifié avec la commande CREATE_USER, par défaut ce plugin serait appliqué.
- Authentification externe à l'aide de LDAP: LDAP est généralement utilisé pour lier l'authentification MySQL à l'annuaire actif de l'organisation. Par exemple, authentification à l'aide de Google SSO, OAuth ou Microsoft Outlook LDAP. Cela nécessite également l'installation du plugin LDAP côté MySQL. Pour plus de détails, vous pouvez vous référer ici.
>> Référez ici pour une liste complète des plugins pris en charge.
Essayons de créer un utilisateur avec un plugin d'authentification par défaut et un plugin d'authentification SHA2 et leurs valeurs hachées correspondantes dans la table mysql.users. Tout d'abord, nous allons créer un utilisateur avec l'authentification par défaut, qui est (SHA2), et nous allons voir ce qui est stocké dans le mysql.user table.
CREATE USER IF NOT EXISTS 'user-default'@'localhost' IDENTIFIED BY 'P@ssw0rd'
Voyons le plug-in d'authentification pour cet utilisateur 'user-default' dans la table mysql.users:
SELECT host,user,plugin,authentication_string from mysql.user where user='user-default'
Ici, dans authentication_string, vous pouvez voir sa valeur SHA-256 pour la chaîne de mot de passe - «P @ ssw0rd».
Créons maintenant un utilisateur avec un plug-in d'authentification. 'Mot de passe natif MySQL' et voyez quelle est la valeur du plugin qui est stocké.
CREATE USER IF NOT EXISTS 'user-sha1'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd'
SELECT host,user,plugin,authentication_string from mysql.user where user='user-sha1'
CRÉER UN UTILISATEUR avec un rôle
MySQL permet également d'attribuer des rôles prédéfinis aux nouveaux utilisateurs. Ces rôles ont déjà un accès configuré à certaines ou à toutes les bases de données (qui peuvent également être personnalisées), par exemple, un rôle nommé «développeur» pourrait être créé qui pourrait se voir attribuer tous les privilèges sur une base de données et plus tard, nous pourrions utiliser le même rôle pour attribuer à de nouveaux utilisateurs.
Voyons ceci avec un exemple:
- Créer un rôle nommé développeur
CREATE ROLE 'developer'
- Créez une base de données nommée 'test'
CREATE DATABASE test
- Attribuer des privilèges pour tester la base de données pour le rôle de «développeur»
GRANT ALL ON test.* TO 'developer'
- Créer un utilisateur et attribuer un rôle de développeur
CREATE USER IF NOT EXISTS 'user-with-role'@'localhost' DEFAULT ROLE developer;
- Validez que l'utilisateur peut créer une table dans la base de données de test
Essayons de vous connecter avec l’utilisateur nommé «utilisateur avec rôle» et nous essaierons de créer une nouvelle table dans la base de données de test.
$ /usr/local/mysql/bin/mysql -u user-with-role Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 44 Server version: 8.0.20 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> use test; Database changed mysql> create table test_table(name varchar(20)); Query OK, 0 rows affected (0.07 sec)
CRÉER UN UTILISATEUR avec SSL / TLS
La création d'un utilisateur avec des options SSL / TLS nécessiterait à la fois le client et le serveur d'avoir des certificats SSL installés. Par défaut, SSL n'est pas configuré pour MySQL.
Suivez ces pas pour configurer SSL pour l'instance de serveur MySQL.
Afin de créer un utilisateur avec SSL activé, vous pouvez utiliser l'option REQUIRE SSL lors de la création de l'utilisateur.
CREATE USER 'user-with-ssl'@'localhost' REQUIRE SSL;
De même, la création à l'aide de X509 supposerait que le client / utilisateur se connecte pour avoir un certificat X509 valide.
>> Référez ici pour en savoir plus sur X509.
Pour créer un utilisateur avec un certificat X509, utilisez la requête ci-dessous:
CREATE USER 'user-with-x509'@'localhost' REQUIRE X509;
CRÉER UN UTILISATEUR avec les options de gestion des mots de passe
Les options de mot de passe sont utilisées pour définir la stratégie sur le mot de passe lors de la création d'un utilisateur à l'aide de la commande CREATE USER.
#1) Expirez le mot de passe lors de la connexion. Le mot de passe est expiré après la première utilisation et invite les utilisateurs à changer le mot de passe.
CREATE USER IF NOT EXISTS 'test'@'localhost' IDENTIFIED BY 'Password' PASSWORD EXPIRE;
#deux) Expirez le mot de passe après un intervalle fixe. L'expiration du mot de passe peut être configurée avec l'intervalle configuré, par exemple, 90 jours.
CREATE USER IF NOT EXISTS 'test'@'localhost' IDENTIFIED BY 'Password' PASSWORD EXPIRE INTERVAL 90 DAY;
# 3) Le mot de passe est verrouillé après les tentatives de relance configurées. Souvent, il est souhaitable que le compte utilisateur soit verrouillé (pendant une période configurée) après «n» tentatives incorrectes. Dans la requête ci-dessous, le compte utilisateur serait verrouillé pendant 2 jours après 5 tentatives incorrectes.
CREATE USER 'test'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password' FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 2;
# 4) Le nouveau mot de passe ne doit pas être le même que les mots de passe précédents configurés.
Dans la requête ci-dessous, le nouveau mot de passe défini par les utilisateurs ne doit pas être le même que les 2 derniers mots de passe.
CREATE USER IF NOT EXISTS 'test'@'localhost' IDENTIFIED BY 'Password' PASSWORD EXPIRE PASSWORD HISTORY 2;
CRÉER UN UTILISATEUR avec les options de limite de ressources
Des limites de ressources sont requises en particulier pour les instances MySQL de production afin d'éviter de submerger la base de données par les requêtes / requêtes d'un seul utilisateur et qui pourraient avoir un impact sur les performances du serveur MySQL.
Nous pouvons définir les limites de ressources en utilisant l'une des 3 options ci-dessous:
# 1) MAX_QUERIES_PER_HOUR - Nombre de requêtes d'obtention autorisées pour un utilisateur donné par heure.
implémentation c ++ de l'arbre binaire
CREATE USER 'user-with-resource-limits'@'localhost' WITH MAX_QUERIES_PER_HOUR 5
Supposons que si l'utilisateur essaie de dépasser plus de 5 requêtes par heure, le serveur MySQL lèverait une erreur comme ci-dessous:
ERROR 1226 (42000): User 'user-with-resource-limits' has exceeded the 'max_questions' resource (current value: 5)
# 2) MAX_UPDATES_PER_HOUR - Nombre de requêtes de mise à jour autorisées pour un utilisateur donné par heure.
CREATE USER 'user-with-resource-limits'@'localhost' WITH MAX_UPDATES_PER_HOUR 50
# 3) MAX_CONNECTIONS_PER_HOUR - Le nombre de fois qu'un compte peut se connecter au serveur par heure.
CREATE USER 'user-with-resource-limits'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 50
# 4) MAX_USER_CONNECTIONS - Le nombre de connexions simultanées à l'instance de serveur MySQL de l'utilisateur donné.
CREATE USER 'user-with-resource-limits'@'localhost' WITH MAX_USER_CONNECTIONS 50
Veuillez noter que toutes les options ci-dessus peuvent également être combinées lors de la création d'un utilisateur. Supposons que si nous voulons spécifier MAX_QUERIES comme 10 et MAX_UPDATES comme 100, alors nous pouvons avoir une seule requête CREATE_USER comme:
CREATE USER 'user-with-resource-limits'@'localhost' WITH MAX_UPDATES_PER_HOUR 100 MAX_QUERIES_PER_HOUR 10
Mettre à jour et supprimer des utilisateurs MySQL
MySQL fournit 2 commandes importantes - ALTER USER et DROP USER pour modifier et supprimer respectivement les utilisateurs existants. Comprenons ces deux exemples à l’aide d’exemples.
ALTER USER
MySQL ALTER USER est utilisé pour mettre à jour / modifier les comptes d'utilisateurs MySQL existants. Il peut être utilisé pour,
- Mettre à jour les limites de ressources
- Définir les options de mot de passe
- Verrouiller et déverrouiller les comptes, etc.
Voyons un exemple d'utilisation d'ALTER USER pour déverrouiller un compte verrouillé.
Créez un utilisateur dans un état verrouillé, puis déverrouillez-le avec la commande ALTER USER.
CREATE USER 'test'@'localhost'I DENTIFIED BY 'Password' ACCOUNT LOCK;
Maintenant, en vous connectant avec cet utilisateur, nous recevrons un message de compte verrouillé (car l'utilisateur a été créé dans un état de compte verrouillé).
$ /usr/local/mysql/bin/mysql -u test -p Enter password: ERROR 3118 (HY000): Access denied for user 'test'@'localhost'. Account is locked.
Utilisez la requête ci-dessous pour déverrouiller l'utilisateur avec la commande ALTER.
ALTER USER 'test'@'localhost' ACCOUNT UNLOCK
Connectez-vous avec l'utilisateur avec le client MySQL:
$ /usr/local/mysql/bin/mysql -u test -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 50 Server version: 8.0.20 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
DROP UTILISATEUR
La commande MySQL DROP USER supprime un ou plusieurs utilisateurs existants et tous leurs privilèges et octrois associés.
Veuillez noter qu'il ne supprimera / supprimera aucune donnée insérée / table créée ou mise à jour par l'utilisateur, qui est en cours de suppression.
Si quelqu'un essaie de supprimer un utilisateur inexistant, la commande DROP USER génère une erreur.
Créons un utilisateur et supprimons-le à l’aide de la commande DROP:
CREATE USER 'test'@'localhost'; DROP USER 'test'@'localhost';
Questions fréquemment posées
Q # 1) Qu'est-ce qu'un utilisateur dans MySQL?
Répondre: L'utilisateur dans MySQL est un compte / une entité qui peut se connecter à l'instance de serveur MySQL et effectuer différentes opérations. Un utilisateur peut se voir attribuer un accès basé sur les rôles ou un accès granulaire à une ou plusieurs bases de données et / ou tables.
Q # 2) Comment vérifier les différents utilisateurs connectés à MySQL?
Répondre: Afin de voir les sessions utilisateur actives sur une instance de serveur MySQL, vous pouvez exécuter la commande processlist comme ci-dessous.
SHOW processlist;
La sortie de cette commande afficherait différents attributs des sessions de l'utilisateur actif connectées au moment de l'exécution de la commande.
Exemple de sortie ci-dessous:
Q # 3) Comment changer d'utilisateur dans MySQL?
Répondre: MySQL fonctionne sur le concept de sessions utilisateur. Lorsque vous êtes connecté avec un utilisateur donné, vous pouvez soit prévoir de mettre fin à la session, soit ouvrir une session contre un nouvel utilisateur dans une nouvelle fenêtre ou en tant que nouvelle connexion dans les clients de l'interface graphique MySQL comme un plan de travail.
Pour vous connecter avec un utilisateur particulier à partir du client mysql, vous pouvez utiliser la syntaxe ci-dessous:
mysql -u {userName} -p
Après avoir écrit la commande ci-dessus, une fois que vous appuyez sur Entrée, vous serez invité à entrer le mot de passe de l'utilisateur spécifié dans le champ {userName}. Une fois le mot de passe validé, vous serez redirigé vers l'invite de commande / shell MySQL.
Pour vous connecter avec un autre utilisateur, vous pouvez mettre fin à la session en cours en entrant la commande exit et vous reconnecter avec un autre utilisateur.
mysql> exit
Il est également possible d’avoir plusieurs connexions aux instances de serveur MySQL pour différents utilisateurs. Vous pouvez simplement ouvrir un nouvel onglet / fenêtre pour l'invite de commande et utiliser la même commande pour vous connecter avec un autre utilisateur.
mysql -u {userName2} -p
Q # 4) Comment rendre un utilisateur MySQL en lecture seule?
Répondre: MySQL fournit un mécanisme exhaustif pour accorder un accès granulaire aux bases de données ou aux tables. Vous pouvez fournir différents types d'accès comme SELECT, UPDATE, INSERT, etc. à une ou plusieurs bases de données ou tables.
Afin de n'accorder qu'un accès en lecture seule à un utilisateur, vous pouvez accorder l'accès SELECT à une base de données (en utilisant * pour toutes les tables ou en mentionnant explicitement le nom de la table selon les besoins)
Comprenons cela à l'aide d'un exemple ci-dessous:
Nous créons un utilisateur nommé 'readaccess' avec un mot de passe comme 'Mot de passe'
create user 'readaccess'@'localhost' IDENTIFIED BY 'Password'
Maintenant, accordez un accès en lecture à toutes les tables d’une base de données nommée «test» en utilisant le mot-clé GRANT dans MySQL
grant select on test.* to 'readaccess'@'localhost'
Maintenant, pour valider l’accès, vous pouvez vous connecter avec cet utilisateur nommé ‘readaccess’ et essayer d’interroger les tables dans la base de données ’test’.
Cependant, si vous essayez d'insérer des données dans l'une des tables de la base de données de test, vous obtiendrez une erreur d'accès refusé, car nous venons d'accorder explicitement l'accès en lecture à cet utilisateur.
Q # 5) Comment puis-je voir les utilisateurs dans MySQL?
Répondre: MySQL a une table au niveau du système nommée «mysql.user» qui contient une liste de tous les utilisateurs créés pour l'instance de serveur MySQL. Les privilèges sur cette table sont généralement limités aux utilisateurs root ou admin ou à une personne qui gère l'authentification et l'autorisation pour l'instance de serveur MySQL.
Q # 6) Comment trouver le nom d'utilisateur et le mot de passe MySQL?
Répondre: Le mappage des utilisateurs et des mots de passe MySQL est stocké dans la table système «mysql.user», qui est une table à accès restreint. Le mot de passe est stocké au format crypté en fonction du mode de cryptage qui a été choisi lors de la création de l'utilisateur.
Cependant, si le compte d'une personne est verrouillé, MySQL fournit une autre commande appelée ALTER USER, qui peut être utilisée pour déverrouiller un compte utilisateur donné.
Conclusion
Dans ce didacticiel, nous avons découvert la commande MySQL CREATE USER, qui est utilisée pour l'authentification et la gestion des accès généralement par les administrateurs de base de données.
MySQL fournit de nombreux mécanismes d'authentification puissants et des attributions basées sur les rôles qui permettent de créer de nouveaux utilisateurs avec des autorisations d'accès prédéfinies. Nous avons également vu des exemples de création d'utilisateurs avec différents mécanismes d'autorisation, différents paramètres de mot de passe, options d'expiration, etc.
lecture recommandée
- Comment télécharger MySQL pour Windows et Mac
- Tutoriel MySQL Create View avec des exemples de code
- Tutoriel MySQL Create Table avec des exemples
- 31 Questions et réponses sur les entretiens de test de base de données
- Tutoriel de normalisation de base de données: Exemples 1NF 2NF 3NF BCNF
- Guide complet de test de base de données (pourquoi, quoi et comment tester les données)
- MongoDB Créer une sauvegarde de base de données
- MongoDB Créer un utilisateur et attribuer des rôles avec des exemples