Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Saiba mais sobre as permissões de nível de tabela do MySQL


É 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)