MySQLでユーザーを作成し、リモートアクセス権限を付与する

MySQLでリモートアクセス可能なユーザーを作成し、特定のデータベースに対する権限を付与することは一般的な要件です。この記事では、その手順を詳細に説明します。

手順1:MySQLにログイン

まず、管理者権限(例えば、rootユーザー)でMySQLにログインします:

Terminal window
1
mysql -u root -p

手順2:データベースを作成し、エンコーディングを設定する

projectという名前のデータベースを作成し、utf8mb4エンコーディングを使用します:

1
CREATE DATABASE project CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

手順3:ユーザーを作成し、任意のIPアドレスからのアクセスを許可する

myuserという名前のユーザーを作成し、任意のIPアドレスからのアクセスを許可します。パスワードはmyuser_passwordとします:

1
CREATE USER 'myuser'@'%' IDENTIFIED BY 'myuser_password';

手順4:ユーザーに権限を付与する

myuserユーザーに対してprojectデータベースの全権限を付与します:

1
GRANT ALL PRIVILEGES ON project.* TO 'myuser'@'%';

手順5:権限をリフレッシュする

権限テーブルをリフレッシュして変更を有効にします:

1
FLUSH PRIVILEGES;

完全なSQLスクリプト

以下は、データベースの作成、ユーザーの作成、および権限の付与のすべての手順をカバーする完全なSQLスクリプトです:

1
-- データベースを作成し、エンコーディングを設定する
2
CREATE DATABASE project CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3
4
-- ユーザーを作成し、任意のIPアドレスからのアクセスを許可する
5
CREATE USER 'myuser'@'%' IDENTIFIED BY 'myuser_password';
6
7
-- ユーザーに権限を付与する
8
GRANT ALL PRIVILEGES ON project.* TO 'myuser'@'%';
9
10
-- 権限をリフレッシュする
11
FLUSH PRIVILEGES;

既存のユーザーを削除する

既にmyuserという名前のユーザーが存在し、再作成したい場合は、既存のユーザーを削除できます:

1
DROP USER 'myuser'@'localhost';
2
DROP USER 'myuser'@'%';
3
4
FLUSH PRIVILEGES;

MySQLのリモートアクセスを許可する設定

MySQLの設定ファイルがリモートアクセスを許可していることを確認します。MySQLの設定ファイル(例:/etc/mysql/mysql.conf.d/mysqld.cnfまたは/etc/my.cnf)を編集し、以下の行を見つけます:

1
bind-address = 127.0.0.1

これをコメントアウトするか、次のように変更します:

1
bind-address = 0.0.0.0

その後、MySQLサービスを再起動します:

Terminal window
1
sudo systemctl restart mysql

ファイアウォールの設定

サーバーにファイアウォールがある場合は、MySQLポート(通常は3306)がファイアウォールを通過できるようにします。例えば、ufwを使用する場合:

Terminal window
1
sudo ufw allow 3306/tcp

以上の手順を実行することで、リモートからMySQLデータベースにアクセスできるユーザーを作成し、特定のデータベースに対する操作権限を付与することができます。