Много често е да видите изявление за предоставяне като следното, което дава достъп до всички таблици в дадена база данни.
GRANT SELECT, SHOW VIEW
ON mydatabase.*
TO myreaduser@myhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Където mydatabase
, myreaduser
, myhoost
и somepassword
са подходящите променливи за вашата база данни. Обърнете внимание, че FLUSH PRIVILEGES
командата нулира привилегиите на MySQLs и няма да можете да използвате новите потребителски разрешения, докато не бъде стартирана.
Такъв потребител ще може да чете и да осъществява достъп до всички таблици в база данни. За този пример ще използваме базата данни boatio, която има 3 таблици: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 tables, за да видим, че има достъп само до trips
маса, а не другите две. Този нов потребител просто не знае, че другите таблици дори съществуват.
$ 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)