É muito comum ver uma declaração de concessão como a seguinte, que dá acesso a todas as tabelas em um determinado banco de dados.
GRANT SELECT, SHOW VIEW
ON mydatabase.*
TO myreaduser@myhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Onde
mydatabase
, myreaduser
, myhoost
e somepassword
são as variáveis apropriadas para seu banco de dados. Observe que os FLUSH PRIVILEGES
O comando redefine os privilégios do MySQL e você não poderá usar as novas concessões de usuário até que ele seja executado. Esse usuário poderá ler e acessar todas as tabelas em um banco de dados. Para este exemplo vamos usar o banco de dados Boatio que possui 3 tabelas:
boats
, trips
e users
. mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| boats |
| trips |
| users |
+------------------+
3 rows in set (0.00 sec)
Se quisermos criar um usuário que tenha acesso apenas às
trips
tabela, simplesmente substituímos o curinga splat (*) que representa todas as tabelas, pelas tabelas específicas que você deseja (neste caso:trips
). GRANT SELECT, SHOW VIEW
ON boatio.trips
TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Agora podemos fazer login como o novo usuário e executar show tables para ver que ele só tem acesso às
trips
mesa e não os outros dois. Esse novo usuário simplesmente não sabe que as outras tabelas existem. $ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
+------------------+
1 row in set (0.00 sec)
Para dar ao usuário acesso a mais tabelas, simplesmente execute novamente o mesmo
GRANT
instrução com os nomes de tabela adicionais. Por exemplo, o seguinte concederá acesso às trips
e users
tabelas, mas não os 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;
E a prova:o usuário agora tem acesso às
trips
e users
mesas, mas não boats
. $ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
| users |
+------------------+
2 rows in set (0.00 sec)