Mysql: Como evitar que os usuários tenham acesso somente leitura a todas as tabelas de bancos de dados?

1

Eu tenho o mysql 5.0.82sp1 em execução e notei que todos os usuários podem invocar o comando select em todas as tabelas de bancos de dados. Eles não têm privilégios para fazer isso, então não há nada que eu possa revogar. Existe alguma configuração do mysql concedendo este acesso somente leitura por padrão?

isso parece sempre dar resultado

select * from some_database_name.some_table_name

e mostra o que está nele.

funciona mesmo se eu revogar todos os privilégios emitindo o comando

revoke all privileges, grant option from 'username'@'localhost';

e eu verifico emitindo o comando

show grants;

mostra

GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD '...'

o que significa que não tem privilégios para selecionar

    
por user398140 05.09.2011 / 17:23

3 respostas

3

Como você altera os privilégios globais , é necessário fazer o seguinte para que os efeitos sejam aceitos:

  1. emite uma instrução FLUSH PRIVILEGES; para recarregar as tabelas de permissões
  2. desconecte o cliente atual e reconecte

Leia mais ...

    
por 05.09.2011 / 17:39
0

Há algo de perturbador nesse comportamento.

Eu só consigo pensar em duas circunstâncias quando os SELECTs podem ser executados sem restrições assim:

SITUAÇÃO # 1: ignorar tabelas de concessão em /etc/my.cnf

Por favor, verifique se /etc/my.cnf não tem isto:

[mysqld]
skip-grant-tables

Se isso acontecer, remova a linha skip-grant-tables e reinicie o mysql imediatamente.

SITUAÇÃO # 2: ignorar tabelas de concessão da linha de comando

É possível iniciar o mysql com a opção skip-grant-tables sem tocar em my.cnf. No Linux OS, por favor, execute isto:

$ service mysql start --skip-grant-tables

Na linha de comando do Linux, para descobrir se skip-grant-tables está ativado, por favor execute:

$  mysqld --help --verbose | grep -C 3 "skip-grants"

Você verá linhas semelhantes a esta:

secure-file-priv                                  (No default value)
server-id                                         106451130
show-slave-auth-info                              FALSE
skip-grant-tables                                 FALSE
skip-name-resolve                                 TRUE
skip-networking                                   FALSE
skip-show-database                                FALSE

Se skip-grant-tables for TRUE, apenas reinicie o mysql como normal. Então deve desaparecer.

Experimente!

CAVEAT: Se este é um problema do MySQL / Windows, por favor inspecione my.ini

Além disso, não há variável global para alterar esse recurso. Esta opção aplica-se apenas ao arranque do mysql.

ATUALIZAÇÃO 2011-09-09 12:56 EDT

Tente usar este comando SQL quando fizer login:

SELECT USER(),CURRENT_USER();

Essas funções informam a maneira como você autentica

USER () relata como você tentou autenticar no MySQL

CURRENT_USER () informa como você pode autenticar no MySQL

Atualize sua pergunta com essas descobertas !!!

    
por 07.09.2011 / 18:53
0

A partir do comando grant ( USAGE ON *. * ), parece que você concedeu acesso a todos os bancos de dados. Atualize o privilégio, restringindo o acesso apenas ao banco de dados específico para o usuário correspondente. isto é, USAGE ON databasename. * em vez de *. *

    
por 09.09.2011 / 19:15

Tags