Privilégios [RESOLVIDO]

1. Privilégios [RESOLVIDO]

Éder
edertux

(usa Debian)

Enviado em 26/01/2014 - 13:18h

Olá comunidade!

Estudando MySQL me deparei com a seguinte dúvida:

Segundo a documentação, SHOW DATABASES exibe todos os banco de dados.

Então concedi esse direito ao usuário teste:

--------------------------------------------
mysql> GRANT SHOW DATABASES on *.* to teste;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
--------------------------------------------

Mas aí quando tento exibir todos os banco de dados com o usuário teste, só me retorna isso:

-----------------------
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
-----------------------

Ora, se SHOW DATABASES exibe todos os banco de dados, não teria que me retornar tudo, conforme resultado abaixo?:

mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| familia |
| mysql |
| performance_schema |
| teste |
+--------------------+
5 rows in set (0.00 sec)


  


2. Re: Privilégios [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 26/01/2014 - 14:25h

edertux escreveu:

Olá comunidade!

Estudando MySQL me deparei com a seguinte dúvida:

Segundo a documentação, SHOW DATABASES exibe todos os banco de dados.

Então concedi esse direito ao usuário teste:

--------------------------------------------
mysql> GRANT SHOW DATABASES on *.* to teste;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
--------------------------------------------

Mas aí quando tento exibir todos os banco de dados com o usuário teste, só me retorna isso:

-----------------------
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
-----------------------

Ora, se SHOW DATABASES exibe todos os banco de dados, não teria que me retornar tudo, conforme resultado abaixo?:

mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| familia |
| mysql |
| performance_schema |
| teste |
+--------------------+
5 rows in set (0.00 sec)


como vc pode observar no seu resultado
mysql> GRANT SHOW DATABASES on *.* to teste;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

o rows affected ou seja nada mudou, o usuario teste ja tinha o show database liberado

no mysql todos os usuarios podem mostrar as databases

o que acontece e o seguinte, ele pode mostrar todas as databases na qual ele tem acesso


3. Re: Privilégios [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 26/01/2014 - 14:27h

me corrijam se estiver errada, mas acho que nao e possivel ele saber das databases que nao pertencem a ele, e o mesmo que vc querer liberar um usuario comum pra ver que pastas tem dentro do root do linux, como essa pasta pertence ao root nao fara sentido o usuario comum ver, acho que e a mesma coisa no banco de dados


4. Re: Privilégios [RESOLVIDO]

Éder
edertux

(usa Debian)

Enviado em 26/01/2014 - 17:33h

Shoujo:

Fiz alguns testes aqui...

No que diz respeito a privilégios, o retorno "0 rows affected" não quer dizer que nada mudou.
Significa que o privilégio foi aplicado com sucesso, caso contrário ele retorna erro.

No MySQL o único usuário que pode visualizar todas as bases de dados, é o root.
Qualquer usuário pode visualizar a existência de bases de dados que não pertençam a ele, desde o administrador conceda tal privilégio.

...e parece que matei a charada...

Faltou executar 1 passo.

Concedi o privilégio "GRANT SHOW DATABASES on *.* to teste;" atualizei a tabela de privilégios "FLUSH PRIVILEGES;" mas no que diz respeito a privilégios globais, só passam a valer à partir da próxima sessão.
Então, é necessário realizar logout/login para que os novos privilégios entrem em vigor.

Já no caso de privilégios dos níveis banco de dados, tabelas e colunas, não é necessário fazer logout/login pois eles são aplicados na mesma sessão que o usuário está logado.

Obrigado por contribuir!


5. Re: Privilégios [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 26/01/2014 - 23:26h

entendi, ao dar esse comando vc pediu pra liberar todas as databases pro usuario independente se ele podia abrir ou nao a tabela, entendo, achei que o usuario so poderia listar se ele pudesse tambem abrir.
que bom que deu certo entao


6. Re: Privilégios [RESOLVIDO]

Éder
edertux

(usa Debian)

Enviado em 27/01/2014 - 12:27h

No meu caso, eu estava logado em dois terminais no mesmo servidor.
Um terminal com o usuário "root" e outro terminal com o usuário "teste".
O que eu esperava do comando "SHOW DATABASES;" é que o usuário teste pudesse [somente] listar todas as bases de dados existentes no servidor.
Então eu concedi o privilégio mas, testei na mesma sessão.
Como os privilégios dos níveis banco de dados, tabelas e colunas são aplicados na mesma sessão, pensei que o mesmo ocorresse com os privilégios do nível global e então, cogitei a possibilidade do comando "SHOW DATABASES;" não cumprir o que promete.
Ainda bem que não foi o caso.
Só faltou a documentação ser mais transparente.
Só se a gente tiver bola de cristal pra adivinhar que apenas para 1 nível a aplicação dos privilégios só ocorre à partir da próxima sessão? Froid.


7. Re: Privilégios [RESOLVIDO]

shoujo
shoujo

(usa Slackware)

Enviado em 27/01/2014 - 14:19h

pois é interessante mesmo



  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts