多くのMySQLチュートリアルで、ユーザーがユーザーの作成中と特権の付与中の両方でコマンドIDENTIFIED BY 'password'
を使用することがよくあります。
例えば:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
IDENTIFIED BY
なしでGRANT
を使用してみましたが、動作します。
2回使用されている理由を誰かが説明できますか?特定の特権用に他のパスワードがありますか?
GRANT
は、ユーザーに特権を追加するためのものです。紛らわしいことに、ユーザーを作成してパスワードを変更する機能もあります。この機能は廃止されているため、使用しないでください。
GRANT
でIDENTIFIED
を使用すると、ユーザーのパスワードを変更できます。
IDENTIFIEDが存在し、グローバル付与特権(GRANT OPTION)を持っている場合、指定されたパスワードは、アカウントが存在し、すでにパスワードを持っている場合でも、アカウントの新しいパスワードになります。 IDENTIFIEDがない場合、アカウントパスワードは変更されません。
MySQL 5.7.2の時点で、アカウントが既に存在する場合、新しいアカウントを作成するときにのみ使用することを目的としているため、IDENTIFIED WITHは禁止されています。
また、GRANT
が存在しない場合、ユーザーを作成する場合があります。
GRANTステートメントで指定されたアカウントが存在しない場合、実行されるアクションはNO_AUTO_CREATE_USER SQLモードに依存します。
- NO_AUTO_CREATE_USERが有効になっていない場合、GRANTはアカウントを作成します。これは、IDENTIFIED BYを使用して空でないパスワードを指定しない限り、非常に安全ではありません。
- NO_AUTO_CREATE_USERが有効になっている場合、IDENTIFIED BYを使用して空でないパスワードを指定したり、IDENTIFIED WITHを使用して認証プラグインに名前を付けたりしない限り、GRANTは失敗し、アカウントを作成しません。
MySQL 5.7.6では、GRANTを使用してアカウント認証特性を定義することは非推奨です。代わりに、CREATE USERまたはALTER USERを使用して認証特性を確立または変更します。このGRANT機能は、将来のMySQLリリースで削除される予定です。
https://dev.mysql.com/doc/refman/5.7/en/grant.html を参照してください
要約すると、CREATE
を使用してユーザーを作成し、GRANT
を使用して特権を追加します。
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost';
自己作成ユーザーを付与するため、以下の行で権利を取得できます。
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
注:識別は、資格情報の検証のために保存するパスワードをパスワードに対して表します。
これは単なる追加のセキュリティ対策です。共有ホスト環境など、異なるサーバー上の同じユーザーに対して異なるパスワードを使用する場合があります。それがあなた自身のサーバーであり、あなたとあなたの同僚がそれを使用する唯一のものである場合、あなたは特権を与えるユーザーを識別する必要はありません。
ユーザーを特定する場合、指定したパスワードのみをそのユーザーと一緒に使用してこれらの権限を実行できます。