web-dev-qa-db-ja.com

エラー1054(42S22):「mysql.user」の不明な列「プラグイン」

ユーザーに新しいデータベースへの権限を付与しようとしています

mysql> grant all on db_test.* to 'user_test'@'localhost' identified by 'usersexistingpassword';

次のエラーが表示されます

ERROR 1054 (42S22): Unknown column 'plugin' in 'mysql.user'

MySQL 5.6を使用しています

mysql> select @@version;
+-------------+
| @@version   |
+-------------+
| 5.6.24-72.2 |
+-------------+
1 row in set (0.00 sec)

5.6.x以降でのネイティブパスワードの更新に関するMySQLの記事を見つけました

6.3.9.3 4.1より前のパスワードハッシュおよびmysql_old_passwordプラグインからの移行 https://dev.mysql.com/doc/refman/5.7/en/account-upgrades.html

彼らが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

あなたの問題は_mysql.user_とMySQL 5.6にアップグレードした方法に関係しています

rootとして特権を付与できない に対する私の答えを見ると、MySQL 4.1からMySQL 5.6への_mysql.user_の説明が表示されます。

pluginは、MySQL 5.5/5.6の_mysql.user_の列#41です。

_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>
_

その列はMySQL 5.1、5.0または4.xでは表示されません。これは、MySQLが何らかの理由で5.6にアップグレードされたにもかかわらず、5.1以前の_mysql.user_がまだあることを示しています。

SELECT COUNT(1) column_count FROM information_schema.columns WHERE table_schema='mysql' AND table_name='user';を実行して39を取得した場合、私はあなたのための修正だけを持っています。

私の投稿を参照してください MySQLサービスはユーザーに特権を付与しようとした後に停止します 5.1から5.6に_mysql.user_を手動で修正する方法について。

9
RolandoMySQLDBA

CREATE USERクエリ。

ユーザーテーブルを修正するために次の解決策を実行しました。

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`; 

CREATE USERクエリは正常に機能します。!!

rootとして特権を付与することはできません に対する回答を参照して、修正を行います。ありがとう RolandoMySQLDBA 。!

以下は上記のSQLの作成に役立ちました:

 + ------------------------ + ------------------- ----- + ----------------------------------- + ------ +- ---- + --------- + 
 |フィールド(MySQL 5.1)|フィールド(MySQL 5.6)|タイプ|ヌル|キー|デフォルト| 
 + ------------------------ + ----------------- ------- + ----------------------------------- + ------ + ----- + --------- + 
 |ホスト|ホスト| char(60)|いいえ| PRI | | 
 |ユーザー|ユーザー| char(16)| NO | PRI | | 
 |パスワード|パスワード| 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 | enum( 'N'、 'Y')| NO | | N | 
 | Reload_priv | Reload_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Shutdown_priv | Shutdown_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Process_priv | Process_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | File_priv | File_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Grant_priv | Grant_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | References_priv | References_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Index_priv | Index_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Alter_priv | Alter_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Show_db_priv | Show_db_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Super_priv | Super_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Create_tmp_table_priv | Create_tmp_table_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Lock_tables_priv | Lock_tables_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Execute_priv | Execute_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Repl_slave_priv | Repl_slave_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Repl_client_priv | Repl_client_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Create_view_priv | Create_view_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Show_view_priv | Show_view_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Create_routine_priv | Create_routine_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Alter_routine_priv | Alter_routine_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Create_user_priv | Create_user_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Event_priv | Event_priv | enum( 'N'、 'Y')|いいえ| | N | 
 | Trigger_priv | Trigger_priv | enum( 'N'、 'Y')|いいえ| | N | 
| | Create_tablespace_priv | enum( 'N'、 'Y')|いいえ| | N |
 | ssl_type | ssl_type | enum( ''、 'ANY'、 'X509'、 'SPECIFIED')|いいえ| | | 
 | ssl_cipher | ssl_cipher |ブロブ|いいえ| | NULL | 
 | x509_issuer | x509_issuer |ブロブ|いいえ| | NULL | 
 | x509_subject | x509_subject |ブロブ|いいえ| | NULL | 
 | max_questions | max_questions | int(11)符号なし|いいえ| | 0 | 
 | max_updates | max_updates | int(11)符号なし|いいえ| | 0 | 
 | max_connections | max_connections | int(11)符号なし|いいえ| | 0 | 
 | max_user_connections | max_user_connections | int(11)符号なし|いいえ| | 0 | 
| |プラグイン| char(64)|はい| | || | authentication_string |テキスト|はい| | NULL || | password_expired | enum( 'N'、 'Y')|いいえ| | N |
 + ------------------------ + ------------------- ----- + ----------------------------------- + ------ +- ---- + --------- + 
3
Milan Dhameliya