MySQL Ver 8.0.21で作業しているときに、この課題が発生しました
ホストで実行しmy_app_db
ているroot
ユーザーに名前付きデータベースのアクセス許可を付与したかったのです。localhost
しかし、コマンドを実行すると:
use my_app_db;
GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';
エラーが発生します:
エラー1064(42000):SQL構文にエラーがあります。'my_app_db。*TO'root'@' localhost''の1行目で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください>
これが私が修正した方法です:
MySQLコンソールにログインします。ログインするroot
ユーザーに変更できます。
mysql -u root -p
mysqlルートパスワードを入力します
次に、MySQLサーバー上のすべてのユーザーとそのホストを一覧表示します。PostgreSQLとは異なり、これは多くの場合mysql
データベースに保存されます。したがって、mysql
最初にデータベースを選択する必要があります。
use mysql;
SELECT user, host FROM user;
注:を実行しないuse mysql
と、no database selected
エラーが発生します。
これにより、次のような出力が得られます。
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
次に、リストから取得した情報に基づいて、必要なユーザーに特権を付与します。データベースに権限を付与する前に、まずデータベースを選択する必要があります。私の場合、ホストroot
で実行されているユーザーを使用しています。localhost
use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
注:このGRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';
コマンドは、MySQLの最新バージョンでは機能しない場合があります。MyQLの最新バージョンのほとんどは、使用するデータベースを選択した後、特権の付与database_name
コマンドでwithを置き換えます。*
その後、MySQLコンソールを終了できます。
exit
それでおしまい。
これがお役に立てば幸いです