やったこと
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)