web-dev-qa-db-fra.com

ERREUR 1054 (42S22): colonne inconnue 'plugin' dans 'mysql.user'

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'
6
brentwpeterson

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.

9
RolandoMySQLDBA

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 |
 + ------------------------ + ------------------- ----- + ----------------------------------- + ------ + - ---- + --------- + 
3
Milan Dhameliya