特定のデータベース内のすべてのテーブルへのアクセスを許可する次のようなgrantステートメントが表示されることは非常に一般的です。
GRANT SELECT, SHOW VIEW
ON mydatabase.*
TO myreaduser@myhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
mydatabase
、myreaduser
、myhoost
、およびsomepassword
データベースに適切な変数です。 FLUSH PRIVILEGES
に注意してください コマンドはMySQLの特権をリセットし、実行されるまで新しいユーザー許可を使用できなくなります。
このようなユーザーは、データベース内のすべてのテーブルを読み取ってアクセスできるようになります。この例では、3つのテーブルを持つboatioデータベースを使用します:boats
、trips
、およびusers
。
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| boats |
| trips |
| users |
+------------------+
3 rows in set (0.00 sec)
trips
にのみアクセスできるユーザーを作成したい場合 テーブルでは、すべてのテーブルを表すワイルドカードスプラット(*)を、必要な特定のテーブル(この場合はtrips
)に置き換えるだけです。 。
GRANT SELECT, SHOW VIEW
ON boatio.trips
TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
これで、新しいユーザーとしてログインし、show tableを実行して、trips
にのみアクセスできることを確認できます。 テーブルであり、他の2つではありません。この新しいユーザーは、他のテーブルが存在することすら知らないだけです。
$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
+------------------+
1 row in set (0.00 sec)
ユーザーがより多くのテーブルにアクセスできるようにするには、同じGRANT
を再実行するだけです。 追加のテーブル名を持つステートメント。たとえば、次のようにすると、trips
へのアクセスが許可されます。 およびusers
テーブルですが、boats
ではありません 。
GRANT SELECT, SHOW VIEW ON boatio.trips TO myreaduser@localhost IDENTIFIED BY 'somepassword';
GRANT SELECT, SHOW VIEW ON boatio.users TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
そしてその証拠:ユーザーはtrips
にアクセスできるようになりました およびusers
テーブルですが、boats
ではありません 。
$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
| users |
+------------------+
2 rows in set (0.00 sec)