MySQLは、ユーザー名とホストの両方によってユーザーを識別します。 MySQLがログイン時に認証を行う場合、MySQLは最初に完全に一致するホスト名を探します。完全に一致するものが見つからない場合は、「%」ワイルドカードを含むホストを探します。
GRANT ... TO [email protected]
、MySQLは新しいユーザーを作成しました(IDENTIFIED BY
がなかったため、パスワードはありません ステートメントで与えられます。
次に、myuser
としてログインしようとしたときに何が起こりましたか ローカルホストから、mysqldは'myuser'@'localhost'
に一致するエントリを見つけようとしました mysql.userテーブルでそれを見つけました。そして、セッションはそのユーザーに割り当てられた特権を取得しました。
(もう少し正確に言うと、mysqldはmysql.userテーブルの内容を実際には調べません。これは、ビルド時にテーブルから入力されたメモリ内構造を実際に調べます。メモリ構造は、GRANT、REVOKE、またはFLUSH PRIVILEGESステートメントによってトリガーされます。)
新しいユーザーを追加する前に何が起こっていたのか、mysqldはユーザーとホスト名に完全に一致するものを探していましたが、見つかりませんでした。ただし、「%」ワイルドカードを使用したエントリが見つかったため、それに一致したため、セッションは「myuser」@「%」ユーザーに付与されたすべての権限を取得しました。
2人のユーザー'u'@'%'
および'u'@'localhost'
互いに分離して区別されます。特権は、各ユーザーに個別に付与する必要があります。 'u'@'%'
に付与された特権 そのユーザーにのみ適用し、'u'@'localhost'
には適用しない 。