ustify>

Capa SQl 33

Clique aqui para ler todos os artigos desta edição

­­Gerenciamento de usuários, privilégios e controle de acessos em MySQL

  

O MySQL apresenta uma estratégia para controle de acessos bastante flexível e robusta que permite controlar as ações de cada usuário em diversos níveis dentro do sistema. Portanto, é possível controlar quais os comandos cada usuário pode executar, bem como em qual nível de dados: em apenas um banco de dados, tabela ou coluna. Além disto, pode-se fazer um controle apurado levando-se em conta o host (máquina cliente) de onde a conexão com o servidor MySQL foi estabelecida. Desta forma, é factível que a partir do host local o usuário possua privilégios distintos dos que estão disponíveis quando o acesso é feito a partir de um host remoto.

Assim, torna-se viável uma definição de privilégios de forma a conceder apenas os acessos necessários a cada aplicação que utiliza o MySQL, evitando que sejam feitos acessos indevidos aos dados. Ao longo deste artigo serão apresentados todos os aspectos relacionados à manipulação de usuários, bem como determinadas dicas para resolução de problemas comuns envolvendo o controle de privilégios. Inicialmente será abordada a forma de criação de um novo usuário, e a seguir os tipos de privilégios definidos no MySQL, bem como os comandos para a concessão e remoção dos mesmos. Finalmente, serão apresentados os comandos para visualização e exclusão de usuários, bem como os métodos para exibição de seus privilégios.

Em última análise, será dada uma visão geral de como são armazenados os dados dos usuários e como o MySQL realiza a autenticação e o controle de acesso dos seus clientes.

Vale ressaltar que este artigo tem como base o MySQL 5.0, portanto alguns comandos e comportamentos aqui apresentados podem não se aplicar às versões anteriores deste SGBD.

Criação de usuários

No MySQL, um usuário é definido a partir de duas informações, seu nome e o host de onde ele poderá se conectar ao servidor MySQL. Neste caso, toda manipulação de usuários dentro do SGBD levará em consideração estas duas informações.

O comando para a criação de usuários é o CREATE USER, que é ilustrado na Listagem 1.

 

Listagem 1. Criação do usuário sqlmagazine com acesso do host local

eber@linux:~/sqlMagazine> mysql -u root

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 5.0.20-standard

 

mysql> CREATE USER sqlmagazine@localhost IDENTIFIED BY "senhasecreta";

Query OK, 0 rows affected (0.04 sec)

 

O comando apresentado na Listagem 1 cria um usuário chamado sqlmagazine, que pode se conectar apenas do host local, isto é, o cliente deve estar instalado na mesma máquina em que se encontra o servidor MySQL. O comando ainda atribui uma senha, senhasecreta, para este usuário. Vale ressaltar que a senha é opcional, mas é recomendado sempre informar uma senha para os usuários, de forma a eliminar acessos não autorizados.

Um usuário que tenha sido criado com o comando CREATE USER não possui nenhum privilégio. Ele pode apenas se conectar e executar alguns comandos básicos do sistema, tais como exibir a data e hora do sistema. 

O usuário ilustrado pelo exemplo anterior está limitado a se conectar apenas do host local, mas em situações práticas, é usual que as pessoas possam se conectar a partir de vários hosts. Por exemplo, em uma empresa é bastante conveniente que os funcionários tenham acesso ao MySQL a partir de qualquer host dentro da sua rede ou domínio, mas não fora deste universo. O MySQL possui recurso para a definição de usuários com acessos a diversos hosts, para isto deve-se utilizar o caractere '%' (percentual) para determinar uma faixa de hosts.

Supondo uma empresa onde todas as máquinas estão no domínio exemplo.com.br e que utilizam endereços IP inválidos no formato 192.168.1.xxx, a Listagem 2 apresenta dois comandos para a criação de usuários que possam se conectar a partir de qualquer host dentro desta empresa.

 

Listagem 2. Definição de dois usuários com acesso remoto ao servidor MySQL

mysql> CREATE USER remoto1@'%.exemplo.com.br' IDENTIFIED BY "senharemoto1";

Query OK, 0 rows affected (0.00 sec)

 

mysql> CREATE USER remoto2@'192.168.1.%' IDENTIFIED BY "senharemoto2";

Query OK, 0 rows affected (0.00 sec)

 

Os usuários remoto1 e remoto2 são equivalentes, e podem acessar o MySQL a partir de qualquer host dentro do domínio desta empresa fictícia. No primeiro exemplo, foi utilizada uma faixa de DNS para controlar os hosts do qual ele pode acessar o sistema, enquanto no segundo foi utilizada uma faixa de IPs. A escolha da abordagem fica a cargo do administrador do sistema, que deverá considerar os aspectos de segurança e facilidades de manutenção existentes em ambos os casos. O uso do nome do host (DNS) é menos seguro que o uso do endereço IP, uma vez que o cliente pode forjar o seu DNS para tentar invadir o sistema. Por outro lado, a utilização de endereços IP pode ser trabalhosa para o administrador uma vez que havendo mudanças nos endereços da rede, os usuários do MySQL deverão ser reconfigurados para terem acesso a partir destes novos endereços.

Vale ressaltar que o '%' pode ser utilizado sozinho na definição de um host, e neste caso, o usuário poderá acessar o sistema a partir de qualquer local que tenha acesso à porta TCP/IP utilizada pelo MySQL, lembrando que configurações de firewall podem inibir o acesso remoto, mesmo tendo o acesso com '%'. Não se recomenda criar usuários que possam acessar o sistema de qualquer host, pois isto pode introduzir vulnerabilidades de segurança ao sistema desnecessariamente.

Caso exista a necessidade de acesso remoto, recomenda-se criar dois usuários com o mesmo nome, mas com privilégios diferentes. Ou seja, o usuário com acesso remoto teria privilégios restritos em relação ao seu correspondente que possui acesso apenas do host local. Este metodologia elimina problemas de segurança sem restringir a criação de usuários com acesso a partir de qualquer host.

Uma observação importante é que o MySQL fornece um usuário chamado root que possui todos os privilégios e acessa o servidor apenas do host local. Este é o administrador do sistema, e pode executar quaisquer comandos dentro do MySQL. Esse usuário é criado automaticamente durante a instalação do MySQL. Além disso, há um outro usuário anônimo também com acesso apenas do host local, mas que possui privilégios apenas no banco de dados test. Para criar um usuário anônimo, basta utilizar um nome de usuário vazio, conforme ilustra a Listagem 3. Este usuário anônimo é criado pelo processo de instalação do MySQL, e serve apenas para permitir o acesso de qualquer pessoa ao servidor. ...

Quer ler esse conteúdo completo? Tenha acesso completo