gerenciamento de usuários e controle de acessos do mysql

Upload: pedro-vinicius

Post on 30-Oct-2015

58 views

Category:

Documents


0 download

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