MySQLでユーザーに権限を付与する方法|GRANT文の使い方を実例付きで解説
MySQLでは、新しく作成したユーザーには初期状態でほとんど権限が与えられていません。そのため、ユーザーが必要な操作を行えるようにするには、GRANT文を使って明示的に権限を付与する必要があります。この記事では、GRANT文の基本構文から実際の使用例までをわかりやすく解説します。
GRANT文の基本構文
GRANT privilege,[privilege],.. ON privilege_level TO user [IDENTIFIED BY password] [REQUIRE tsl_option] [WITH [GRANT_OPTION | resource_option]];
構文の各要素の説明
1. 権限の指定
GRANTキーワードの直後に、付与したい権限を1つ以上指定します。複数の権限を同時に付与する場合は、それぞれをカンマ(,)で区切ります。
2. 権限レベルの指定
続いて、権限が適用される範囲(privilege_level)を指定します。MySQLでは以下の4つのレベルがサポートされています。
- グローバルレベル:*.*(サーバー上のすべてのデータベース)
- データベースレベル:database.*(特定のデータベース全体)
- テーブルレベル:database.table(特定のテーブル)
- カラムレベル:特定のカラムのみ(この場合、各権限の後に対象カラムをカンマ区切りで指定する必要があります)
3. 対象ユーザーの指定
権限を付与するユーザーアカウントを指定します。すでに存在するユーザーであればそのユーザーの権限が更新され、存在しない場合は新しいユーザーが自動的に作成されます。オプションのIDENTIFIED BY句を使えば、ユーザーのパスワードを設定・変更することも可能です。
4. セキュア接続の要求
REQUIRE句を使用すると、SSLやX509証明書などのセキュアな接続経由でのみデータベースサーバーに接続できるよう制限できます。
5. WITH句によるオプション指定
オプションのWITH GRANT OPTION句を付けると、そのユーザーは自身が保有している権限を他のユーザーに付与したり剥奪したりできるようになります。さらに、WITH句ではMySQLサーバーのリソース割り当てを設定することもできます。たとえば、1時間あたりに許可する接続数やクエリ実行数の上限を設定でき、MySQL共有ホスティングのような共有環境において非常に便利です。
実行例:ユーザーの作成と権限の確認
以下の例では、まず新しいユーザーを作成します。
mysql> use mysql Database changed mysql> create user abcd@localhost identified by 'password123'; Query OK, 0 rows affected (0.04 sec)
次に、作成したばかりのユーザーabcd@localhostの権限を確認してみましょう。
mysql> SHOW GRANTS FOR abcd@localhost; +------------------------------------------+ | Grants for abcd@localhost | +------------------------------------------+ | GRANT USAGE ON *.* TO 'abcd'@'localhost' | +------------------------------------------+ 1 row in set (0.01 sec)
GRANT USAGEは「実質的に何も権限を持っていない」ことを示しており、これが新規ユーザーの初期状態です。
すべての権限を付与する
それでは、abcd@localhostにすべての権限を付与してみます。以下のステートメントを実行します。
mysql> GRANT ALL ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.05 sec)
ここで、ON *.*は「すべてのデータベースと、その中のすべてのオブジェクト」を意味します。また、WITH GRANT OPTIONを付けることで、abcd@localhostが他のユーザーへ権限を付与できるようになります。
もう一度SHOW GRANTS文を実行すると、権限が正しく更新されていることが確認できます。
mysql> SHOW GRANTS FOR abcd@localhost; +---------------------------------------------------------------------+ | Grants for abcd@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 1 row in set (0.00 sec)
まとめ
MySQLでユーザーに権限を付与するにはGRANT文を使用します。権限の種類と権限レベル(グローバル/データベース/テーブル/カラム)を適切に組み合わせることで、必要最小限の権限だけを安全に付与できます。特に本番環境ではALL権限の乱用を避け、用途に応じた権限のみを付与することがセキュリティ上のベストプラクティスとなります。
-
【MySQL入門】別のユーザーとしてログインする方法をわかりやすく解説
MySQLで別のユーザーとしてログインしたい場合は、mysql -u ユーザー名 -p コマンドを使用します。この記事では、新しいユーザーの作成から、作成したユーザーでのログイン方法まで、手順を追って詳しく解説します。別のユーザーとしてログインするための基本構文別のユーザーとしてMySQLにログインする際の基本構文は以下の通りです。> mysql -u yourUsername -pEnter password:コマンドを実行してEnterキーを押すと、パスワードの入力を求められます。ここに該当ユーザーのパスワードを入力すればログインできます。ステップ1:新しいユーザーを作成するまずは、
-
MySQLでユーザーに全ストアドプロシージャへのアクセス権限を付与する方法
MySQLですべてのストアドプロシージャへのアクセス権限をユーザーに許可する手順MySQLでは、GRANT EXECUTE 構文を使用することで、特定のユーザーに対してデータベース内のすべてのストアドプロシージャ(およびストアドファンクション)を実行する権限を簡単に付与できます。ここでは、その具体的な手順を順を追って解説します。ステップ1:現在登録されているユーザーの確認まず、mysql.user テーブルから既存のユーザーとホストの一覧を表示して確認しましょう。mysql> SELECT user, host FROM mysql.user;このクエリを実行すると、次のような出力が得ら