読み取り専用ユーザーを作成する (MySQL)
MySQL
Published: 2020-03-29

やったこと

MySQL で読み取りだけ実行可能なユーザーを作成します。

確認環境

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using  EditLine wrapper

調査

ユーザーを検索します。

mysql> SELECT user, host FROM mysql.user;
+------+-----------------------+
| user | host                  |
+------+-----------------------+
| root | 127.0.0.1             |
| root | ::1                   |
| root | localhost             |
| root | localhost.localdomain |
+------+-----------------------+
4 rows in set (0.00 sec)

SELECT 権限を持つユーザーを作成します。

mysql> GRANT SELECT ON test.* TO read1@localhost IDENTIFIED BY 'hogehoge';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

read1 ユーザーが作成されていることを確認します。

mysql> SELECT user, host FROM mysql.user;
+-------+-----------------------+
| user  | host                  |
+-------+-----------------------+
| root  | 127.0.0.1             |
| root  | ::1                   |
| read1 | localhost             |
| root  | localhost             |
| root  | localhost.localdomain |
+-------+-----------------------+
5 rows in set (0.00 sec)

ここで、read1 ユーザーで MySQL に再接続します。

$ mysql -u read1 -p test

SELECT は実行できます。

mysql> select * from test_table;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
|  1 | 2    | 3    | 4    |
|  2 | 2    | 3    | 4    |
+----+------+------+------+
2 rows in set (0.00 sec)

権限がないので INSERT はエラーになりました。

mysql> insert into test_table values (3, 2, 3, 4);
ERROR 1142 (42000): INSERT command denied to user 'read1'@'localhost' for table 'test_table'

ユーザー削除 (root ユーザーで実行)

mysql> DROP USER 'read1'@'localhost';
Query OK, 0 rows affected (0.00 sec)

参考