MySQLでユーザーを作成して権限を付与する方法|CREATE USERとGRANT文の使い方
MySQLでは、CREATE USER文で新しいユーザーを作成し、GRANT文を使ってデータベースへのアクセス権限を付与できます。本記事では、ユーザー作成から各種権限(SELECT・INSERT・UPDATE・DELETE・EXECUTE)の付与、そして付与された権限の確認方法まで、具体的なコード例とともにわかりやすく解説します。
ユーザー作成と権限付与の基本構文
まずは、データベースの作成、ユーザーの作成、そして権限付与までの一連の流れを示す基本構文です。
create database yourDatabaseName DEFAULT CHARACTER SET utf8; create user `yourUserName` identified by yourPassword; GRANT SELECT ON yourDatabaseName.* TO `yourUserName`; GRANT INSERT ON yourDatabaseName.* TO `yourUserName`; GRANT UPDATE ON yourDatabaseName.* TO `yourUserName`; GRANT DELETE ON yourDatabaseName.* TO `yourUserName`; GRANT EXECUTE ON yourDatabaseName.* TO `yourUserName`;
この構文のポイントは以下の通りです。
- DEFAULT CHARACTER SET utf8:日本語などのマルチバイト文字を正しく扱うために、文字コードを明示的に指定しておくのが安全です。
- identified by:ユーザーのパスワードを設定します。パスワードは引用符で囲んで指定します。
- GRANT 権限名 ON データベース名.* TO ユーザー名:特定のデータベース内のすべてのテーブルに対して、指定した操作の権限を付与します。
実際にユーザーを作成して権限を付与する例
それでは、実際のMySQLクライアントでの実行例を見てみましょう。ここでは「demo_app」というデータベースと、「John_123」というユーザーを作成し、5つの権限を順番に付与しています。
mysql> create database demo_app DEFAULT CHARACTER SET utf8; Query OK, 1 row affected, 1 warning (0.00 sec) mysql> create user `John_123` identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT SELECT ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT INSERT ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT UPDATE ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT DELETE ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec) mysql> GRANT EXECUTE ON demo.* TO `John_123`; Query OK, 0 rows affected (0.00 sec)
すべてのコマンドが正常に実行されると、「Query OK」と表示されます。これで、ユーザー「John_123」はデータベース「demo」に対してSELECT・INSERT・UPDATE・DELETE・EXECUTEの5つの操作を行えるようになりました。
付与した権限を確認する方法
ユーザーに付与された権限を確認するには、SHOW GRANTS文を使用します。
mysql> show grants for `John_123`;
実行すると、以下のような結果が出力されます。
+-----------------------------------------------------------------------------+ | Grants for John_123@% | +-----------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `John_123`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `demo`.* TO `John_123`@`%` | +-----------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
出力結果の見方
表示された権限情報の意味は次の通りです。
- GRANT USAGE ON *.*:「USAGE」は特別な権限で、「ログインできるが何も操作権限を持たない」ということを意味します。すべてのユーザーにデフォルトで付与されます。
- GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `demo`.*:先ほど付与した5つの権限が、データベース「demo」に対して設定されていることが確認できます。
補足:複数の権限を一度に付与する方法
権限は1つずつ付与するだけでなく、カンマ区切りでまとめて指定することも可能です。
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON demo.* TO `John_123`;
また、すべての権限を付与したい場合は ALL PRIVILEGES を使うと便利です。
GRANT ALL PRIVILEGES ON demo.* TO `John_123`;
権限の変更を即座に反映させたい場合は、以下のコマンドを実行しておくと確実です。
FLUSH PRIVILEGES;
このように、CREATE USERとGRANTを組み合わせることで、用途に応じた最小限の権限だけを持つユーザーを柔軟に管理できます。セキュリティの観点からも、必要以上の権限を付与しない運用を心がけましょう。
-
MySQLでテーブルを動的に作成する方法(ストアドプロシージャ活用)
MySQLでテーブルを動的に作成したい場合は、ストアドプロシージャを利用するのが便利です。この記事では、StudentId(int型)とStudentName(varchar型)の2つのカラムを持つテーブルを、任意のテーブル名で動的に生成する手順を解説します。 ストアドプロシージャの作成 まず、テーブル名を引数として受け取り、動的にCREATE TABLE文を組み立てて実行するストアドプロシージャを作成します。 mysql> DELIMITER $$ mysql> CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VAR
-
MySQLでAND演算子とOR演算子を組み合わせたSELECTクエリの使い方
MySQLでは、WHERE句の中でAND演算子とOR演算子を組み合わせることで、複数の条件に基づいた柔軟なデータ抽出が可能になります。この記事では、実際にテーブルを作成し、ANDとORを組み合わせたSELECTクエリの実行方法を手順を追って解説します。1. サンプルテーブルの作成まず、CREATE TABLE文を使用してテーブルを作成します。mysql> create table DemoTable ( StudentId int, StudentName varchar(20), StudentSubject varchar(20) ); Query OK, 0