gerenciamento de usuários e controle de acessos do mysql
TRANSCRIPT
-
15/05/13 Gerenciamento de Usurios e Controle de Acessos do MySQL
www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898 1/5
Gostei (2) (1)
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.
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
1 Curtir 11
Bem vindo a DevMedia!LOGIN: SENHA:
Esqueci minha senha Cadastre-se
Entenda o site Tecnologias Revistas Cursos Pocket vdeos Frum Servios Publicar Compre Crditos Loja Virtual Assine
-
15/05/13 Gerenciamento de Usurios e Controle de Acessos do MySQL
www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898 2/5
ALTER 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)
FILEPermite executar SELECT ... INTO OUTFILE e LOAD DATA
INFILE
INDEX Permite executar CREATE INDEX e DROP INDEX
INSERT Permite executar INSERT
LOCK TABLESPermite 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
CLIENTPermite 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
DATABASESexibe todos os bancos de dados
SHUTDOWN Permite executar mysqladmin shutdown
SUPER
Permite executar CHANGE MASTER, KILL , PURGE MASTER
LOGS e SET GLOBAL. Permite conectar-se ao servidor uma
vez, mesmo que o max_connections tenha sido atingido
UPDATE Permite executar UPDATE
-
15/05/13 Gerenciamento de Usurios e Controle de Acessos do MySQL
www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898 3/5
USAGE 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
db.tb
Apenas a tabela tb do banco de dados db. Para
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";
-
15/05/13 Gerenciamento de Usurios e Controle de Acessos do MySQL
www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898 4/5
Gostei (2) (1)
Feito isto, voc ter que executar um comando FLUSH PRIVILEGES para que o MySQL possa atualizar os privilgios que esto em
memria.
mysql>FLUSH PRIVILEGES;
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 Certif ied. 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 voc achou deste post?
-
15/05/13 Gerenciamento de Usurios e Controle de Acessos do MySQL
www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-mysql/1898 5/5
0 COMENTRIO
Nenhum comentrio foi postado - seja o primeiro a comentar!
Cursos relacionados
Administrao do Firebird/InterBase
Curso 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 (ajuda)
Verso para impresso
DevMedia | Anuncie | Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03
DevMedia
Curtir Voc curtiu isso.
Voc e outras 8.532 pessoas curtiram DevMedia.
Plug-in social do Facebook