Você está na página 1de 5

15/05/13

Gerenciamento de Usurios e Controle de Acessos do MySQL

Entenda o site

Tecnologias

Revistas LO GIN:

Cursos

Pocket vdeos SENHA:

Frum

Servios

Publicar

Compre Crditos

Loja Virtual

A ssine

Bem vindo a DevMedia!

Esque ci m inha se nha

C adastre -se

post favorito

comentrios

Gerenciamento de Usurios e Controle de Acessos do MySQL


Veja neste artigo uma descrio dos mecanismos de controles de acessos do MySQL, uma apresentao das rotinas para criao de usurios e gerenciamento de seus privilgios.

Go s t ei (2)

(1)

Curtir

Gerenciamento de Usurios e Controle de Acessos do MySQL


O objetivo principal deste artigo descrever os mecanismos de controles de acessos do MySQL, bem como apresentar as rotinas para criao de usurios e gerenciamento de seus privilgios. O MySQL possui um mecanismo que permite limitar o acesso de um usurio a apenas um banco, tabela ou coluna, alm de poder controlar o acesso de acordo com o host a partir de onde est sendo feita a conexo com o servidor. Pode-se ainda, conceder privilgios diferentes para cada host de onde o usurio possa estabelecer a conexo. Assim, possvel que determinados comandos possam ser executados somente quando o usurio estiver em um host especfico, por exemplo o mesmo host do servidor MySQL (localhost). O MySQL armazena as informaes dos seus usurios em 4 tabelas que esto localizadas no banco de dados mysql. Estas tabelas so a user, db, tables_priv e columns_priv . A tabela user armazena as informaes de todos os usurios do banco e os privilgios globais deste usurio. A tabela db armazena os privilgios dos usurios especficos de um banco de dados. Finalmente, as tabelas tables_priv e columns_priv armazenam os privilgios associados a tabelas e colunas, respectivamente. Como estas tabelas possuem as informaes dos usurios, bem como os seus privilgios, recomenda-se que apenas o administrador do banco de dados tenha acesso ao banco mysql (usurio root). Para criar usurios e conceder privilgios no MySQL, utiliza-se o comando GRANT. Ao executar um comando GRANT para um usurio que no existe, o mesmo ser criado. Um GRANT para um usurio j existente adicionar os novos privilgios aos j concedidos anteriormente. A sintxe resumida do comando GRANT exibida a seguir: GRANT priv [(colunas)] [, priv [(colunas)]] ... ON {*.* | db.* | db.tabela} TO usuario [IDENTIFIED BY 'senha'] [, usuario [IDENTIFIED BY 'senha']] ... [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR contador | MAX_UPDATES_PER_HOUR contador | MAX_CONNECTIONS_PER_HOUR contador]] No comando acima os [ ] indicam que o comando opcional. O primeiro item a ser informado (so) o(s) privilgio(s) a ser(em) concedido(s) ao(s) usurio(s). A lista de privilgios existentes no MySQL descrita abaixo:

Privilgio

Descrio

ALL [PRIVILEGES]

Todos os privilgios exceto GRANT OPTION

www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898

1/5

15/05/13
ALTER

Gerenciamento de Usurios e Controle de Acessos do MySQL


Permite executar ALTER TABLE

CREATE

Permite executar CREATE TABLE

CREATE TEMPORARY TABLES Permite executar CREATE TEMPORARY TABLE

DELETE

Permite executar DELETE

DROP

Permite executar DROP TABLE

EXECUTE

Permite executar stored procedures (MySQL 5.0)

FILE

Permite executar SELECT ... INTO OUTFILE e LOAD DATA INFILE

INDEX

Permite executar CREATE INDEX e DROP INDEX

INSERT

Permite executar INSERT

LOCK TABLES

Permite executar LOCK TABLES em tabelas que voc tenha o privilgio SELECT

PROCESS

Permite executar SHOW FULL PROCESSLIST

REFERENCES

Ainda no est implementado

RELOAD

Permite executar FLUSH

REPLICATION CLIENT

Permite ao usurio obter a localizao do Master ou Slave

REPLICATION SLAVE

Necessrio para a replicao Slave (leitura dos eventos do log binrio do Master)

SELECT

Permite executar SELECT

SHOW DATABASES

exibe todos os bancos de dados

SHUTDOWN

Permite executar mysqladmin shutdown

Permite executar CHANGE MASTER, KILL , PURGE MASTER SUPER LOGS e SET GLOBAL. Permite conectar-se ao servidor uma vez, mesmo que o max_connections tenha sido atingido

UPDATE

Permite executar UPDATE

www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898

2/5

15/05/13
USAGE

Gerenciamento de Usurios e Controle de Acessos do MySQL


Sinnimo para "no privileges''

GRANT OPTION

Permite ao usurio repassar os seus privilgios

Uma vez informados os privilgios do usurio, voc dever indicar o nvel ao qual o privilgio se aplica, sendo possvel especificar trs nveis:

*.*

Privilgio global

db.*

Qualquer tabela do banco db

Apenas a tabela tb do banco de dados db. Para db.tb especificar apenas algumas colunas de uma determinada tabela, estas devero ser listadas ao lado do privilgio (priv (colunas))

Depois do nvel voc dever indicar o usurio, ou a lista de usurios, para os quais os privilgios se aplicam. No MySQL o usurio constitudo de um nome mais o host de onde ele poder acessar o servidor (user@host). Caso voc no informe o host para o usurio, o MySQL assumir "%", isto , todos os hosts. A senha do usurio opcional, mas recomendado sempre inform-la no momento de criao do usurio, por questes de segurana. Para adicionar privilgios a um usurio existente o IDENTIFIED BY poder ser omitido. No exemplo a seguir criado um usurio com o nome teste que pode se conectar somente do host onde o servidor est em execuo (localhost), o usurio s poder fazer SELECT nas colunas nome e idade da tabela pessoa, que se encontra no banco de dados rh. A senha do usurio 12345. mysql>GRANT SELECT (nome, idade) ON rh.pessoa TO teste@localhost IDENTIFIED BY "12345"; Para listar os privilgios deste usurio utilize o comando: mysql>SHOW GRANTS FOR teste@localhost; Voc pode especificar um conjunto de hosts utilizando o caracter "%", neste caso possvel dar acesso a um usurio dentro de uma faixa de IPs ou DNS. Usurios annimos tambm podem ser criados informando um nome com o caracter espao (" "). No exemplo a seguir, o usurio remoto poder executar UPDATE e INSERT em qualquer tabela do banco de dados rh, sendo possvel a conexo ao servidor a partir de qualquer mquina no domnio mysqlbrasil.com.br: mysql>GRANT UPDATE, INSERT ON rh.* TO remoto@"%.mysqlbrasil.com.br" IDENTIFIED BY "remoto"; Ou utilizando IP: mysql>GRANT UPDATE, INSERT ON rh.* TO remoto@"200.236.13.%" IDENTIFIED BY "remoto"; Um usurio annimo com os mesmos privilgios do usurio remoto seria criado da seguinte forma: mysql>GRANT UPDATE, INSERT ON rh.* TO " "@"%mysqlbrasil.com.br" IDENTIFIED BY "anonimo"; Finalmente, a opo GRANT OPTION utilizada para que o usurio possa conceder os seus privilgios para outros usurios do banco. Alm disto, voc poder limitar os recursos do usurio com as opes MAX_QUERIES_PER_HOUR, MAX_UPDATES_PER_HOUR ou MAX_CONNECTIONS_PER_HOUR. Para remover um privilgio do usurio utilize o comando REVOKE mostrado abaixo: REVOKE priv [(colunas)] [, priv [(colunas)]] ... ON {*.* | db.* | db.tabela} FROM usuario [, usuario] ... Lembre-se de que a parte ON do REVOKE dever coincidir com a parte ON do GRANT que voc deseja remover, caso isto no se verifique o comando REVOKE no ter efeito algum. Alm disto, o comando REVOKE remove apenas os privilgios do usurio, mas o usurio continuar existindo. A remoo do usurio dever ser feita com um DELETE explcito na tabela de usurios do MySQL, aps terem sido Removidos todos os seus privilgios com o comando REVOKE. Observe que para remover o usurio voc dever ter privilgio para executar DELETE na tabela user do mysql. Geralmente, esta tarefa executada pelo administrador do banco (root). mysql>DELETE FROM mysql.user WHERE user="teste" AND host="localhost";

www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898

3/5

15/05/13
memria. mysql>FLUSH PRIVILEGES;

Gerenciamento de Usurios e Controle de Acessos do MySQL

Feito isto, voc ter que executar um comando FLUSH PRIVILEGES para que o MySQL possa atualizar os privilgios que esto em

Aqui estamos descrevendo os comandos para a manipulao de usurios, sendo que esta a maneira de entendermos como funciona a criao de usurios no MySQL. Uma forma mais intuitiva para executar esta tarefa pode ser encontrada no MySQL Administrator, que foi apresentado no ltimo artigo. Problemas para a conexo com o MySQL a partir do localhost: Ao instalar o MySQL so criados o usurio root com todos os privilgios (administrador), podendo se conectar somente do host local sem senha, e o usurio annimo com privilgios apenas no banco de dados test, que pode se conectar apenas do host local sem senha. Para autentiticar um usurio durante a conexo com o servidor, o MySQL armazena em memria a listas de todos usurios, hosts e senhas cadastrados no banco e as ordena do host mais especfico para o menos especfico. Caso existam dois hosts iguais, os usurios mais especficos viro antes do usurio annimo. Feito isto, a cada conexo ser pesquisada nesta lista a primeira ocorrncia que coincida o host, usurio e senha informados no momento da tentativa de conexo. Tomemos o caso em que aps a instalao do MySQL, criamos um usurio que possa se conectar a partir de qualquer host dentro do domnio onde se encontra o servidor MySQL: mysql>GRANT ALL ON rh.* TO user@"192.168.0.%" IDENTIFIED BY "12345"; Neste caso, o MySQL cria em memria a lista dos usurios da seguinte forma: Usurio Senha root@localhost " "@localhost user@"192.168.0.%" 12345 Este usurio ser capaz de se conectar ao servidor MySQL a partir de qualquer mquina no domnio, exceto o host local, pois neste caso, ao pesquisar na lista pelo user@localhost, a primeira ocorrncia encontrada a do usurio annimo, j que qualquer usurio pode ser considerado annimo pelo MySQL. O detalhe que as senhas destes usurios no coincidem, o que gera um erro de "Acesso Negado". Para evitar a situao acima voc dever excluir o usurio annimo ou adicionar o mesmo usurio para se conectar remoto e a partir do host local, da seguinte forma: mysql>GRANT ALL ON rh.* TO user@"192.168.0.%" IDENTIFIED BY "12345", user@localhost IDENTIFIED BY "12345"; Assim a ordenao ficaria: Usurio Senha root@localhost user@localhost 12345 " "@localhost user@"192.168.0.%" 12345 Desta forma, o primeiro registro encontrado no mais o usurio annimo e sim o user@localhost, portanto a conexo ser estabelecida com sucesso. Para evitar este tipo de transtorno melhor remover o usurio annimo aps a instalao do servidor, eliminando tambm eventuais problemas de segurana. Abraos e at a prxima! Eber M. Duarte

Eber Duarte
Eber Duarte bacharel em Cincia da Computao, ps-graduado em Engenharia Eltrica e MySQL Professional Certified. Trabalha h 3 anos na EAC Softw are (BH/MG) como Analista e desenvolvedor de sistemas, atuando especialmente no desenvolvimento de sistemas Web. Atualmente, tambm consultor e instru...

O que vo c acho u des t e po s t ? Go s t ei (2) (1)

www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898

4/5

15/05/13
0 COMENTRIO

Gerenciamento de Usurios e Controle de Acessos do MySQL

Ne nhum com e ntrio foi postado - se ja o prim e iro a com e ntar!

Cursos relacionados
Administrao do Firebird/InterBase C urso de Administrao do Microsoft SQL Server Ferramentas Administrativas do MySQL PL/SQL Oracle Administrao do Firebird/InterBase [Ver todos]

+SQL
Publicidade

Servios
Inclua um comentrio Adicionar aos Favoritos Marcar como lido/assistido Incluir anotao pessoal Verso para impresso
(ajuda)

DevMedia
Curtir Voc curtiu isso.

Voc e outras 8.532 pessoas curtiram DevMedia. DevMedia | Anuncie | Fale conosco Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Dire itos R e se rvados a web-03
P lug-in social do F acebook

www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898

5/5