| <<< Voltar | Avançar >>> |
5. 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 é:
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:
PRIVILÉGIO PERMITE OBSERVAÇÃO 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 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. 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;
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;
- 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.
| <<< Voltar | Avançar >>> |