やったこと
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 testSELECT は実行できます。
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)