ユーザーに新しいデータベースへの権限を付与しようとしています
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'
あなたの問題は_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
_を手動で修正する方法について。
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 | + ------------------------ + ------------------- ----- + ----------------------------------- + ------ +- ---- + --------- +