はじめに
下記手順を紹介いたします。
- MySQLアカウント作成
- 権限付与
- データベース接続
動作確認環境
mysql> status
--------------
mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 14
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.32 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 26 days 22 hours 19 min 37 sec
Threads: 2 Questions: 41 Slow queries: 0 Opens: 148 Flush tables: 3 Open tables: 67 Queries per second avg: 0.000
--------------
MySQLアカウント作成
mysqlクライアントを起動し、rootアカウントで接続します。
[root@mdb01 ~]# mysql -uroot -p
Enter password:
mysql>
現在のアカウント一覧を確認します。
host列は接続元のクライアントを表しており、アカウントは、ユーザ名@ホスト名という形で識別されます。
localhostとなっている場合は、MySQLサーバ以外のホストからは接続不可となります。
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
最初に接続元クライアントを指定せずに、chibattyというアカウントを作成します。
mysql> CREATE USER chibatty IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.03 sec)
作成されたアカウントを確認します。
接続元を指定しなかったため、host列に%が設定されています。%は接続元クライアントを制限しない事を表します。
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| chibatty | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.01 sec)
続いて接続元クライアントをlocalhostに限定したアカウントを作成します。
mysql> CREATE USER chibatty@localhost IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.01 sec)
host列にlocalhostが設定されているアカウントが追加された事が確認できます。
mysql> SELECT user, host FROM mysql.user WHERE user = 'chibatty';
+----------+-----------+
| user | host |
+----------+-----------+
| chibatty | % |
| chibatty | localhost |
+----------+-----------+
2 rows in set (0.00 sec)
今回は他サーバから接続する要件はないため、host列が%となっているアカウントをDROP USERのDDLにて削除します。
mysql> DROP USER chibatty;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT user, host FROM mysql.user WHERE user = 'chibatty';
+----------+-----------+
| user | host |
+----------+-----------+
| chibatty | localhost |
+----------+-----------+
1 row in set (0.00 sec)
mysqlクライアントを終了し、作成したアカウントでMySQLにログインします。
mysql> exit
Bye
[root@mdb01 ~]# mysql -uchibatty -p
Enter password:
mysql>
自身が接続中のアカウントは、CURRENT_USER()ファンクションを使用する事で確認可能です
mysql> SELECT CURRENT_USER();
+--------------------+
| CURRENT_USER() |
+--------------------+
| chibatty@localhost |
+--------------------+
1 row in set (0.00 sec)
権限付与
chibattyアカウントを使用して、menagerieデータベースを選択してみます。
下記の通り権限不足によるエラーが発生しました。
mysql> USE menagerie
ERROR 1044 (42000): Access denied for user 'chibatty'@'localhost' to database 'menagerie'
また、SHOW DATABASESにて、データベース一覧を確認しましたが、menagerieは表示されません。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)
現在、chibattyアカウントに付与されている権限を確認します。
USAGEという権限が付与されています。
USAGEは、MySQLサーバに接続できるのみの権限のため、現在の権限では、menagerieデータベースに接続できません。
mysql> SHOW GRANTS FOR chibatty@localhost;
+----------------------------------------------+
| Grants for chibatty@localhost |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `chibatty`@`localhost` |
+----------------------------------------------+
1 row in set (0.00 sec)
chibattyに権限を付与するため、rootアカウントにてMySQLサーバに接続します。
mysql> exit
Bye
[root@mdb01 ~]# mysql -uroot -p
Enter password:
mysql>
menagerieデータベースに対するすべての権限をchibattyに付与します。
mysql> GRANT ALL ON menagerie.* TO chibatty@localhost;
Query OK, 0 rows affected (0.01 sec)
chibattyアカウントに付与されている権限を確認します。
mysql> SHOW GRANTS FOR chibatty@localhost;
+-----------------------------------------------------------------+
| Grants for chibatty@localhost |
+-----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `chibatty`@`localhost` |
| GRANT ALL PRIVILEGES ON `menagerie`.* TO `chibatty`@`localhost` |
+-----------------------------------------------------------------+
2 rows in set (0.00 sec)
データベース接続
chibattyアカウントを使用してチュートリアル用データベースに接続します。mysqlクライアント起動時のコマンドラインオプションにデータベース名を指定する事により、データベースを選択できます。あるいはmysqlクライアント起動後にUSE文を使用して選択する事も可能です。
[root@mdb01 ~]# mysql -uchibatty -p menagerie
Enter password:
mysql> SELECT CURRENT_USER(), DATABASE();
+--------------------+------------+
| CURRENT_USER() | DATABASE() |
+--------------------+------------+
| chibatty@localhost | menagerie |
+--------------------+------------+
1 row in set (0.00 sec)
ちなみに\Gを使用すると、行と列を入れ替えて表示できます。
対象列が多い場合など、有用な機能です。
mysql> SELECT CURRENT_USER(), DATABASE() \G
*************************** 1. row ***************************
CURRENT_USER(): chibatty@localhost
DATABASE(): menagerie
1 row in set (0.00 sec)