VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
ユーザーの作成
@'localhost' の部分はホスト制限です。このアカウントはローカルマシンからしか接続できません。よくあるホストのパターンは次のとおりです。
'alice'@'localhost' と 'alice'@'%' は、ユーザー名が同じでも 2 つの別々のアカウントです。
権限の付与
database.table 記法を使います。
*.*— すべてのデータベースのすべてのテーブル(グローバル)myapp.*—myappデータベースのすべてのテーブルmyapp.orders—ordersテーブルのみ
権限レベル
よく使う権限は次のとおりです。
付与内容の表示
権限の取り消し
ERROR 1141: There is no such grant defined for user が返ります。ユーザーは他のレベルで付与された権限を保持します。SELECT ON myapp.* を取り消しても、SELECT ON myapp.orders が別に付与されていれば、それは削除されません。
パスワードの変更
ロール(MySQL 8.0 以降)
ロールは、名前の付いた権限の集まりです。各ユーザーに個別の権限を付与する代わりに、ロールを付与します。ユーザーの削除
最小権限のベストプラクティス
各アカウントには必要な権限だけを与えます。- アプリケーションの読み取りレプリカ:
SELECTのみ - アプリケーションの書き込みアカウント:
SELECT、INSERT、UPDATE、DELETE - アプリケーションのスキーマアカウント(マイグレーション):
CREATE、ALTER、DROP、INDEXを追加 - DBA アカウント:
*.*に対するALL PRIVILEGES - アプリケーションアカウントには
SUPERやALLを決して付与しない
app.example.com 上のアプリケーションは、'appuser'@'%' ではなく 'appuser'@'app.example.com' を使うべきです。
よくある質問
MySQL は権限を自動的にフラッシュしますか?
CREATE USER、GRANT、REVOKE、ALTER USER によるすべての変更はすぐに反映されます。FLUSH PRIVILEGES は不要です。FLUSH PRIVILEGES が必要なのは、権限テーブルを INSERT/UPDATE で直接変更した場合だけです(そうすべきではありません)。
localhost と 127.0.0.1 の違いは何ですか?
MySQL の localhost は、ネットワークのループバックではなく、Unix ソケット接続(ローカルのファイルソケット)を指します。127.0.0.1 は TCP ループバックです。同じマシン上でもクライアントが TCP で接続するなら、ホスト制限には 127.0.0.1 を使ってください。
トラブルシューティング
関連項目
- MySQL のセキュリティ強化 — ユーザー権限を補完するサーバーレベルのセキュリティ
- MySQL の INFORMATION_SCHEMA — コマンドの背後にある付与内容とメタデータのクエリ
- よくある MySQL のエラーとその修正方法 — アクセス拒否などの頻出エラーの読み解き
- JWT で MySQL ユーザーを認証する方法 — パスワードの代わりにトークンでサインインするアカウント