MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 USERGRANTを組み合わせることで、用途に応じた最小限の権限だけを持つユーザーを柔軟に管理できます。セキュリティの観点からも、必要以上の権限を付与しない運用を心がけましょう。

  1. MySQLでテーブルを動的に作成する方法(ストアドプロシージャ活用)

    MySQLでテーブルを動的に作成したい場合は、ストアドプロシージャを利用するのが便利です。この記事では、StudentId(int型)とStudentName(varchar型)の2つのカラムを持つテーブルを、任意のテーブル名で動的に生成する手順を解説します。 ストアドプロシージャの作成 まず、テーブル名を引数として受け取り、動的にCREATE TABLE文を組み立てて実行するストアドプロシージャを作成します。 mysql> DELIMITER $$ mysql> CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VAR

  2. 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