Tutorial MySQL: Criando usuários e concedendo privilégios
O MySQL possui um sistema de privilégios que é semelhante ao sistema de permissões de arquivos. Os usuários do MySQL não precisam ter os mesmos nomes e senhas dos usuários do sistema. Por motivos de segurança é até melhor que sejam diferentes. Lembre-se que, sempre, um usuário ou processo deve ter o menor nível de permissões ou privilégios para executar suas tarefas. Se ele só precisa ler, dê a ele só permissão de leitura. Se ele precisa escrever naquela tabela, só dê privilégios de escrita naquela tabela, e assim por diante… Quanto menos privilégios o usuário tiver para executar sua tarefa, melhor para a segurança.
Para criar usuários e conceder privilégios você usa o comando GRANT. Sua sintaxe é:
Para criar usuários e conceder privilégios você usa o comando GRANT. Sua sintaxe é:
GRANT privilégios [colunas] ON item TO usuário [IDENTIFIED BY senha] [WITH GRANT OPTION]
Onde:
- privilégios – pode ser uma ou mais das seguintes opções separadas por vígula:
- SELECT – selecionar linhas (registros), aplicado a tabelas e colunas;
- INSERT – inserir linhas, aplicado a tabelas e colunas;
- UPDATE – alterar valores em linhas, aplicado a tabelas e colunas;
- DELETE – apagar linhas, aplicado a tabelas;
- INDEX – criar e excluir índices, aplicado a tabelas;
- ALTER – alterar tabelas(adicionar colunas, renomear colunas ou tabelas, alterar tipos de dados de colunas), aplicado a tabelas;
- CREATE – criar banco de dados ou tabela, aplicado a banco de dados e tabelas. Se o comando GRANT for especificado com um banco de dados ou tabela em particular, você só poderá criar esse banco ou tabela, o que significa que eles terão que ser excluídos primeiro (DROP);
- DROP – apagar banco de dados ou tabela, aplicado a banco de dados e tabelas;
- RELOAD – recarregar tabelas grant e revogar privilégios, hosts, logs e tabelas, deve ser concedido apenas a administradores;
- SHUTDOWN – desligar o servidor MySQL, deve ser concedido apenas a administradores;
- PROCESS – visualizar processos do servidor e eliminá-los, deve ser concedido apenas a administradores;
- FILE – ler e transferir dados entre tabelas e arquivos, deve ser concedido apenas a administradores;
- ALL – concede tudo, deve ser concedido apenas a administradores;
- USAGE – nada, isto apenas cria um usuário e o permite efetuar o logon, mas não permite nada.
- colunas – é opcional e especifica as colunas a que os privilégios se aplicam. Pode ser uma única coluna ou várias separadas por vírgula;
- item – é o banco de dados ou tabela a que os privilégios se aplicam (observação: se você estiver usando um banco de dados em particular, apenas o nome da tabela será suficiente para item; a tabela será interpretada com sendo do banco de dados atual). Pode ser especificado como:
- *.* – neste caso os privilégios aplicam-se a todos os bancos de dados;
- * – idem se não estiver utilizando nenhum banco de dados em particular;
- BANCO.* – neste caso os privilégios aplicam-se a todas as tabelas do banco;
- BANCO.TABELA – neste caso os privilégios aplicam-se a uma determinada tabela. Você pode, ainda, especificar alguma(s) coluna(s) em particular inserindo esta(s) em colunas;
- usuário – especifica um usuário do MySQL. Por motivos de segurança este usuário não deve ser o mesmo usuário do sistema. Este nome também pode ser um nome de host (computador da rede);
- senha é a senha do usuário para acessar o servidor MySQL;
- WITH GRANT OPTION. Se isto for especificado, o usuário pode conceder seus privilégios a outros.
Os privilégios são armazenados em quatro tabelas internas, no banco mysql, a saber:
mysql.user mysql.db mysql.tables_priv mysql.columns_priv
Você pode editar estas tabelas diretamente para manipular os privilégios.
Para remover privilégios você usa o comando REVOKE. Sua sintaxe é:
REVOKE privilégios [colunas] ON item FROM usuário
Se você permitiu ao usuário a concessão de privilégios com WITH GRANT OPTION, pode revogar isto com:
REVOKE GRANT OPTION ON item FROM usuário
Exemplos:
mysql> grant all
-> on CC.*
-> to sam identified by '1234';
Query OK, 0 rows affected (0.15 sec)
mysql> revoke all
-> on CC.*
-> from sam
-> ;
Query OK, 0 rows affected (0.03 sec)
mysql> grant select,insert,update,delete,index,alter,create,drop
-> on CC.*
-> to sam identified by '1234'
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql>
Agora vamos sair do MySQL (usando o comando quit) e entrar como o novo usuário sam para ver se tudo funcionou corretamente:
mysql> quit Bye aranha:/home/samuel# mysql -u sam -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 4.1.11-Debian_4-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; +----------+ | Database | +----------+ | CC | +----------+ 1 row in set (0.00 sec) mysql>
Observe que ao usuário sam só é mostrado o banco que ele tem permissão de manipular.
Autor: Samuel Dias Neto
Fonte: http://www.htmlstaff.org



