J'essaie d'accorder des privilèges pour un utilisateur à une nouvelle base de données
mysql> grant all on db_test.* to 'user_test'@'localhost' identified by 'usersexistingpassword';
J'obtiens l'erreur suivante
ERROR 1054 (42S22): Unknown column 'plugin' in 'mysql.user'
J'utilise MySQL 5.6
mysql> select @@version;
+-------------+
| @@version |
+-------------+
| 5.6.24-72.2 |
+-------------+
1 row in set (0.00 sec)
J'ai trouvé un article sur MySQL sur la mise à jour des mots de passe natifs sur 5.6.x et versions ultérieures
6.3.9.3 Migration hors du hachage de mot de passe antérieur à 4.1 et du plugin mysql_old_password https://dev.mysql.com/doc/refman/5.7/en/account-upgrades.html
J'ai exécuté la commande qu'ils recommandent en tant que root
mysql> UPDATE mysql.user SET plugin = 'mysql_native_password'
-> WHERE plugin = '' AND (Password = '' OR LENGTH(Password) = 41);
ERROR 1054 (42S22): Unknown column 'plugin' in 'where clause'
Votre problème est lié à mysql.user
Et à la façon dont vous avez effectué la mise à niveau vers MySQL 5.6
Si vous regardez ma réponse à Impossible d'accorder les privilèges en tant que root , je vous montre la description de mysql.user
De MySQL 4.1 à MySQL 5.6.
La colonne plugin
est la colonne # 41 dans mysql.user
Dans MySQL 5.5/5.6
mysql> SELECT column_name,ordinal_position FROM information_schema.columns
-> WHERE table_schema='mysql' and table_name='user' and column_name='plugin';
+-------------+------------------+
| column_name | ordinal_position |
+-------------+------------------+
| plugin | 41 |
+-------------+------------------+
1 row in set (0.04 sec)
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.6.24 |
+-----------+
1 row in set (0.02 sec)
mysql>
Cette colonne n'apparaît pas dans MySQL 5.1, 5.0 ou 4.x. Ce que cela me dit, c'est que MySQL a été mis à niveau vers la version 5.6, mais a toujours le mysql.user
À partir de la version 5.1 ou antérieure.
Si vous exécutez SELECT COUNT(1) column_count FROM information_schema.columns WHERE table_schema='mysql' AND table_name='user';
et que vous obtenez 39, j'ai juste le correctif pour vous.
Voir mon article Le service MySQL s'arrête après avoir tenté d'accorder des privilèges à un utilisateur sur la façon de corriger manuellement mysql.user
De 5.1 directement à 5.6.
J'ai eu une erreur similaire pendant CREATE USER
requete.
J'ai fait la solution suivante pour rectifier la table d'utilisateurs.
ALTER TABLE `user` ADD `Create_tablespace_priv` ENUM('N','Y') NOT NULL DEFAULT 'N' AFTER `Trigger_priv`;
ALTER TABLE `user` ADD `plugin` CHAR(64) NULL AFTER `max_user_connections`;
ALTER TABLE `user` ADD `authentication_string` TEXT NULL DEFAULT NULL AFTER `plugin`;
ALTER TABLE `user` ADD `password_expired` ENUM('N','Y') NOT NULL DEFAULT 'N' AFTER `authentication_string`;
Maintenant CREATE USER
la requête fonctionne bien. !!
La rectification est obtenue à partir de la référence de la réponse à ne peut pas accorder de privilèges en tant que root . Merci RolandoMySQLDBA .!
Ce qui suit a aidé à créer au-dessus de SQL:
+ ------------------------ + ------------------- ----- + ----------------------------------- + ------ + - ---- + --------- + | Champ (MySQL 5.1) | Champ (MySQL 5.6) | Type | Null | Clé | Par défaut | + ------------------------ + ----------------- ------- + ----------------------------------- + ------ + ----- + --------- + | Hôte | Hôte | omble chevalier (60) | NON | PRI | | | Utilisateur | Utilisateur | char (16) | NON | PRI | | | Mot de passe | Mot de passe | char (41) | NO | | | | Select_priv | Select_priv | enum ('N', 'Y') | NO | | N | | Insert_priv | Insert_priv | enum ('N ',' Y ') | NO | | N | | Update_priv | Update_priv | enum (' N ',' Y ') | NO | | N | | Delete_priv | Delete_priv | enum ( 'N', 'Y') | NO | | N | | Create_priv | Create_priv | enum ('N', 'Y') | NO | | N | | Drop_priv | Drop_priv | énumération ('N', 'Y') | NO | | N | | Reload_priv | Reload_priv | énumération ("N", "Y") | NON | | N | | Shutdown_priv | Shutdown_priv | énumération ("N", "Y") | NON | | N | | Process_priv | Process_priv | énumération ("N", "Y") | NON | | N | | File_priv | File_priv | énumération ("N", "Y") | NON | | N | | Grant_priv | Grant_priv | énumération ("N", "Y") | NON | | N | | References_priv | References_priv | énumération ("N", "Y") | NON | | N | | Index_priv | Index_priv | énumération ("N", "Y") | NON | | N | | Alter_priv | Alter_priv | énumération ("N", "Y") | NON | | N | | Show_db_priv | Show_db_priv | énumération ("N", "Y") | NON | | N | | Super_priv | Super_priv | énumération ("N", "Y") | NON | | N | | Create_tmp_table_priv | Create_tmp_table_priv | énumération ("N", "Y") | NON | | N | | Lock_tables_priv | Lock_tables_priv | énumération ("N", "Y") | NON | | N | | Execute_priv | Execute_priv | énumération ("N", "Y") | NON | | N | | Repl_slave_priv | Repl_slave_priv | énumération ("N", "Y") | NON | | N | | Repl_client_priv | Repl_client_priv | énumération ("N", "Y") | NON | | N | | Create_view_priv | Create_view_priv | énumération ("N", "Y") | NON | | N | | Show_view_priv | Show_view_priv | énumération ("N", "Y") | NON | | N | | Create_routine_priv | Create_routine_priv | énumération ("N", "Y") | NON | | N | | Alter_routine_priv | Alter_routine_priv | énumération ("N", "Y") | NON | | N | | Create_user_priv | Create_user_priv | énumération ("N", "Y") | NON | | N | | Event_priv | Event_priv | énumération ("N", "Y") | NON | | N | | Trigger_priv | Trigger_priv | énumération ("N", "Y") | NON | | N | | | Create_tablespace_priv | énumération ("N", "Y") | NON | | N | | ssl_type | ssl_type | énumération ('', 'TOUT', 'X509', 'SPÉCIFIÉ') | NON | | | | ssl_cipher | ssl_cipher | blob | NON | | NULL | | x509_issuer | x509_issuer | blob | NON | | NULL | | x509_subject | x509_subject | blob | NON | | NULL | | max_questions | max_questions | int (11) non signé | NON | | 0 | | max_updates | max_updates | int (11) non signé | NON | | 0 | | max_connections | max_connections | int (11) non signé | NON | | 0 | | max_user_connections | max_user_connections | int (11) non signé | NON | | 0 | | | plugin | omble chevalier (64) | OUI | | || | chaîne_authentification | texte | OUI | | NULL || | password_expired | énumération ("N", "Y") | NON | | N | + ------------------------ + ------------------- ----- + ----------------------------------- + ------ + - ---- + --------- +