質問 :多くのMySQLバージョンで、GRANTステートメントとともにIDENTIFIEDBY「パスワード」を何年も使用しています。ただし、新しいCentOS Streamリリース8のMySQLバージョン8.0.26でも同じことが失敗しました。以下は、完全なエラーメッセージです。何が問題になる可能性がありますか? –Tushar。
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost' IDENTIFIED BY 'qcuser123'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near IDENTIFIED BY 'quser123' at line 1
パスワードで識別されたGRANTを使用中にエラーが発生しました
Tushar、GRANTステートメントでのIDENTIFIED BYパスワードの使用は、MySQLバージョン5.7.6以降非推奨になりました。これは、CREATEUSERまたはALTERUSERでパスワードによるIDENTIFIEDを使用し、以下に示すようにGRANTPRIVILEGESを適用する必要があることを意味します。
ユーザーを作成してパスワードを割り当てます。
mysql> CREATE USER 'quser'@'localhost' IDENTIFIED BY 'qc123'; Query OK, 0 rows affected (0.12 sec)
GRANTを使用して特権を追加します:
mysql> GRANT ALL PRIVILEGES ON qdb.* TO 'quser'@'localhost'; Query OK, 0 rows affected (0.03 sec)
最新のMySQLでこの変更が行われる理由
この変更は、以下の理由で意味があります。
-
IDENTIFIED BY
の使用 GRANT権限を持つパスワードは、アカウントの新しいパスワードとして指定されたパスワードを設定します。別のパスワードで既に存在するアカウントがある場合、IDENTIFIED BYパスワードとともにGRANT特権を実行すると、既存のパスワードが上書きされると想定します。つまり、GRANTからIDENTIFIEDを削除すると、アカウントには作成時に設定されたパスワードが残ります。 - MySQLバージョン5.7.2の時点で、アカウントがすでに存在する場合、「パスワード」による識別は禁止されており、アカウントの作成中、つまり
CREATE USER
でのみ使用する必要があります。 またはALTER USER
。 - GRANTは、ユーザーアカウントが存在しない場合、それを作成する場合があります。
NO_AUTO_CREATE_USER enabled
- GRANTステートメントで指定されたアカウントが存在しない場合、IDENTIFIEDBYまたはIDENTIFIEDWITHを介して空でないパスワードが指定されない限り、GRANTはアカウントの作成に失敗します。
NO_AUTO_CREATE_USER disabled
- GRANTステートメントで指定されたアカウントが存在しない場合、GRANTはアカウントを作成します。 IDENTIFIED BYでパスワードが指定されていない場合、これは安全ではない可能性があります。
最後に、IDENTIFIED BYパスワードを使用したGRANTは非推奨になり、CREATEUSERまたはALTERUSERを使用してユーザーアカウントを作成する必要があります。
StackOverflow経由。