Criar e conceder permissões no Mysql
Para começar devemos nos conectar com o banco de dados, no Linux podemos utilizar o comando mysql:
mysql -p
Este comando abre a ferramenta de linha de comando. O parâmetro -p serve para a senha ser pedida. Por padrão se o usuário não for informado, o nome de usuário que está “logado” vai ser utilizado como login. Para “entrar” como outro usuário podemos utilizar o parâmetro -u.
mysql -u rodrigo -p
Uma vez na linha de comando podemos executar os comando SQL de criação de usuários:
CREATE USER 'novousuario'@'localhost' IDENTIFIED BY 'password';
Onde “novousuario” é o usuário que queremos criar, password é a senha deste usuário e “localhost” é a parte da origem de onde o usuário tem permissão para conectar ao banco. Pode ser colocado um “%” para permitir acesso de qualquer origem(embora possa ser um pouco inseguro) e também pode ser utilizado o ip de origem. Ex.:
CREATE USER 'novousuario'@'%' IDENTIFIED BY 'password';
CREATE USER 'novousuario'@'192.168.1.84' IDENTIFIED BY 'password';
Para remover um um usuário utilizamos o comando ‘DROP USER’ utilizando o mesmo mecanismo de origem da criação de usuário.
DROP USER 'usuario'@'localhost';
Com o usuário criado, este ainda não tem acesso a nenhum banco de dados, então devemos conceder permissão de acesso aos banco de dados, vejamos um exemplo:
GRANT ALL PRIVILEGES ON * . * TO 'novousuario'@'localhost';
O comando acima concede permissão total ao usuário “novousuario”. Vamos entender um pouco melhor as partes deste comando:
GRANT [tipo de permissão] ON [nome da base de dados].[nome da tabela] TO '[nome do usuário]'@'[origem'];
A opção “tipo de permissão” informa quais operações que o usuário poderá executar no banco, ele pode aceitar as seguintes opções:
- ALL PRIVILEGES – Como mostrado no exemplo anterior, esta opção dá acesso total a um banco de dados ou a todo o sistema se nenhum banco de dados for selecionado.
- CREATE – permite criar novas tabelas ou bases de dados
- DROP – permite deletar tabelas ou bases de dados
- DELETE – permite deletar linhas das tabelas
- INSERT – permite inserir linhas nas tabelas
- SELECT – permite utilizar o comando SELECT para ler bases de dados
- UPDATE – permite atualizar linhas das tabelas
- GRANT OPTION – permite conceder ou revogar privilégios de outros usuários
Na opção “nome da base de dados” e “nome da tabela” é onde informamos a qual banco de dados e tabela queremos permitir o acesso do “tipo de permissão”. Podemos substitui-los por “*” para simbolizar todos. Por exemplo se colocarmos “sistema.*” estaremos dando ao usuário permissão a todas as tabelas do banco de dados “sistema”, se utilizarmos “sistema.produtos” estaremos dando permissão somente a tabela “produtos”. Se utilizarmos “*.*” estaremos dando permissão a todos os banco de dados e a todas as tabelas.
As opções “nome do usuário” e “origem” funcionam com o mesmo mecanismo da criação de usuários.
Uma vez finalizadas as permissões é sempre bom recarregar todos os privilégios com o comando:
FLUSH PRIVILEGES;
Caso seja desejar remover alguma permissão devemos utilizar o comando REVOKE
REVOKE [tipo de permissão] ON [nome da base de dados].[nome da tabela] FROM '[nome do usuário]'@'[origem]';
Vamos agora a alguns exemplos de permissão que podem ser concedidas.
GRANT SELECT , INSERT ON sistema.* TO 'rodrigo'@'localhost';
Concede permissão ao usuário “rodrigo” conectado a partir de “localhost” de executar os comando “select” e “insert” em todas as tabelas do banco “sistema”.
GRANT ALL PRIVILEGES ON sistema.produtos TO 'rodrigo'@'192.168.1.85';
Concede permissão ao usuário “rodrigo” conectado a partir do ip “192.168.1.85” executar todos os comando na tabela “produtos” do banco “sistemas”.
GRANT GRANT OPTION ON sistema.* TO 'rodrigo'@'localhost';
Concede permissão ao usuário “rodrigo” de conceder permissão a outros usuários.
Para verificar os privilégios de um determinado usuário podemos utilizar o comando:
show grants for rodrigo;
Era isso T+