Création d'utilisateurs
CREATE USER 'pierre' IDENTIFIED BY 'secure123';
Cette commande crée un utilisateur nommé 'pierre' avec le mot de passe 'secure123'.
Consultation des utilisateurs
SELECT host, user, authentication_string, select_priv, insert_priv, drop_priv FROM mysql.user;
Le champ 'host' indique le type de connexion : '%' pour les connexions TCP distantes, une adresse IP spécifique, un nom de machine, '::1' pour IPv6 local, ou 'localhost' pour les connexions en ligne de commande. Le champ 'user' est le nom d'utilisateur. Les privilèges tels que 'select_priv' et 'insert_priv' définissent les autorisations accordées.
Pour modifier le mot de passe de l'utilisateur courant :
SET PASSWORD = PASSWORD('nouveau_mdp');
Pour changer le mot de passe d'un utilisateur spécifique :
UPDATE mysql.user SET authentication_string=PASSWORD('nouveau_mdp') WHERE user='jean';
Exécutez FLUSH PRIVILEGES; pour appliquer les modifications.
Suppression d'utilisateurs
DROP USER 'jean';
Évitez d'utiliser des requêtes DELETE directes sur la table utilisateur pour prévenir les incohérences.
Gestion des permissions
Attribution des privilèges
GRANT SELECT, INSERT ON ma_base.* TO 'pierre'@'localhost' IDENTIFIED BY 'secure123';
Cette commande attribue des privilèges sur la base 'ma_base' à l'utilisateur 'pierre' connecté localement. Si l'utilisateur n'existe pas, il sera créé.
Pour accorder tous les privilèges à un utilisateur distant :
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'admin123';
Pour autoriser l'accès distant à l'utilisateur root :
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root_mdp' WITH GRANT OPTION;
Utilisez FLUSH PRIVILEGES; pour valider les changements.
Révision des privilèges
SHOW GRANTS;
Pour révoquer des privilèges :
REVOKE SELECT, INSERT ON ma_base.* FROM 'pierre'@'localhost';
Les modifications prennent effet après la reconnexion de l'utilisateur.
Visualisation des permissions
Pour voir les privilèges de l'utilisateur courant :
SHOW GRANTS;
Pour les privilèges globaux :
SELECT * FROM mysql.user;
Pour les privilèges sur une base spécifique :
SELECT * FROM mysql.db;
Pour les privilèges sur une table :
SELECT * FROM mysql.tables_priv;
Accès à distance
Pour configurer l'accès distant :
- Vérifiez la connectivité réseau avec un ping vers l'adresse IP du serveur.
- Désactivez le pare-feu si nécessaire, par exemple avec
service iptables stopsur Linux. - Assurez-vous qu'un utilisateur distant existe dans MySQL :
SELECT * FROM mysql.user WHERE user='pierre' AND host='%';
Si aucun utilisateur n'est trouvé, créez-le avec :
GRANT ALL PRIVILEGES ON *.* TO 'pierre'@'%' IDENTIFIED BY 'remote_mdp';
Testez ensuite la connexion avec un outil client.
Sensibilité à la casse
SHOW VARIABLES LIKE '%lower_case_table_names%';
Sous Windows, la casse est insensible par défaut, tandis que sous Linux, elle est sensible. La valeur 0 indique une sensibilité à la casse, 1 une insensibilité, et 2 stocke les noms tels quels mais les recherche en minuscules.
Pour configurer une inesnsibilité à la casse, ajoutez dans le fichier my.cnf sous la section [mysqld] :
lower_case_table_names=1
Redémarrez le serveur MySQL. Avant cela, convertissez les noms de bases et de tables en minuscules pour éviter des erreurs. Évaluez soigneusement les impacts avant de modifier ce paramètre.
Paramétrage de sql_mode
SHOW VARIABLES LIKE 'sql_mode';
Exemples de modes courants :
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE';
- ONLY_FULL_GROUP_BY : Requiert que toutes les colonnes dans SELECT soient dans GROUP BY pour les agrégations.
- NO_AUTO_VALUE_ON_ZERO : Empêche l'auto-incrémentation sur les valeurs 0.
- STRICT_TRANS_TABLES : Interrompt les insertions invalides dans les tables transactionnelles.
- NO_ZERO_IN_DATE : Prohibe les dates avec mois ou jour nul en mode strict.
- NO_ZERO_DATE : Rejette les dates complètement nulles.
- ERROR_FOR_DIVISION_BY_ZERO : Génère une erreur pour les divisions par zéro.
- NO_AUTO_CREATE_USER : Empêche la création d'utilisateurs sans mot de passe via GRANT.
- NO_ENGINE_SUBSTITUTION : Lance une erreur si le moteur de stockage requis est indisponible.
- PIPES_AS_CONCAT : Interprète '||' comme opérateur de concaténation de chaînes.
- ANSI_QUOTES : Traite les guillemets doubles comme délimiteurs d'identifiants.
Des ensembles de modes comme 'ORACLE' combinent plusieurs paramètres pour une compatibilité accrue.