テスト環境では、次のように同じ名前とデータベースを持つユーザーを作成しました。
create user 'test'@'localhost' identified by 'blablabla';
create database test;
このようにユーザーをデータベースに関連付けると(ユーザーにすべての権限も付与されます):
grant all privileges on test.* to test;
次のエラーが発生します。
エラー1133(42000):ユーザーテーブルに一致する行がありません。
矛盾が何であるか理解していません。ユーザーとデータベースの両方が正常に作成されたという手がかりがshow databases;
あるため、このエラーが発生した理由はわかりません。SELECT user FROM mysql.user;
このエラーが発生するのはなぜですか?
Abhik Boseのアップデート:
mysql> grant all privileges on test.* to 'test'@'localhost';
grant all privileges on test.* to 'test'@'localhost';
^C
mysql> grant all privileges on test.* to 'test'@'localhost';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 4774
Current database: *** NONE ***
Query OK, 0 rows affected (0.00 sec)
答え1
PostgreSQLとは異なり、MySQLとMariaDBには単一のユーザー名の役割はありません。test
未定義のホスト名を持つユーザーはユーザーとして解釈されますtest@%
。どのホストは別のユーザーでtest@localhost
あり、まったく異なるパスワードを持つことができます。
やりたいことになります
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
代わりに。実際にはCREATE USER
別のステートメントを完全に省略し、次のことができます。
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'password';
残りはMySQLが処理します。