MySQL: Controle de Acesso Programação de Servidores Marx Gomes Van der Linden http://marx.vanderlinden.com.br/ Controle de Acesso MySQL tem um sistema de controle de acesso de usuários que é independente do sistema de usuários empregado pelo sistema operacional. Permite controle preciso de restrições e privilégios para uso, modificação e exclusão de dados. Em uma nova instalação de MySQL só há um usuário: root. http://marx.vanderlinden.com.br/ 2 CREATE USER Para criar um novo usuário no sistema, utilizase o comando CREATE USER. Sintaxe: CREATE USER conta [IDENTIFIED BY senha] http://marx.vanderlinden.com.br/ 3 Conta Um usuário em MySQL é especificado por uma conta, que define o nome do usuário e o servidor de acesso. Formato: 'usuário'[@'servidor'] No nome do servidor, pode ser usado um padrão, de acordo com a sintaxe de LIKE. Padrão para o nome do servidor: '%' http://marx.vanderlinden.com.br/ 4 Exemplos mysql> CREATE USER 'boris'@'localhost' -> IDENTIFIED BY 'frost'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE USER 'fred'@'ares.mars.net' -> IDENTIFIED BY 'steam'; Query OK, 0 rows affected (0.00 sec) http://marx.vanderlinden.com.br/ 5 Exemplos mysql> CREATE USER 'joe'@'%' -> IDENTIFIED BY 'tatu'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE USER 'mary'@'%.snake.net' -> IDENTIFIED BY 'fog'; Query OK, 0 rows affected (0.00 sec) http://marx.vanderlinden.com.br/ 6 Exemplos mysql> CREATE USER 'joe'@'192.168.128.3' -> IDENTIFIED BY 'water'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE USER 'ardis'@'192.168.128.%' -> IDENTIFIED BY 'snow'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE USER -> 'rex'@'192.168.128.0/255.255.255.0' -> IDENTIFIED BY 'ice'; Query OK, 0 rows http://marx.vanderlinden.com.br/ affected (0.01 sec) 7 DROP USER, RENAME USER Para remover um usuário do sistema: DROP USER nome Para renomear um usuário: RENAME USER nome_antigo TO nome_novo http://marx.vanderlinden.com.br/ 8 GRANT Para especificar os privilégios de uma conta de usuário, utiliza-se o comando GRANT. Sintaxe: GRANT privilégios (campos) ON nível TO conta [IDENTIFIED BY senha] [REQUIRE requerimentos de conexão] [WITH opções]; Se a conta especificada já não existir, ela é criada. http://marx.vanderlinden.com.br/ 9 Privilégios O controle específico de acesso em MySQL é definido por uma série de privilégios. Cada privilégio define um tipo de ação que um usuário pode executar. Cada usuário pode ter uma combinação de um ou mais privilégios. Há duas categorias principais de privilégios: Privilégios Administrativos. Privilégios de Bancos de Dados e Tabelas. http://marx.vanderlinden.com.br/ 10 Privilégios Administrativos CREATE USER Permite o uso dos comandos CREATE USER, DROP USER, RENAME USER, e REVOKE ALL PRIVILEGES. http://marx.vanderlinden.com.br/ 11 Privilégios Administrativos FILE Permite executar ações que acessam arquivos do servidor. Retrições: Só podem ser lidos arquivos com permissões de leitura para todos. Não é possível sobrescrever arquivos préexistentes. http://marx.vanderlinden.com.br/ 12 Privilégios Administrativos GRANT OPTION Possibilita passar para outros usuários os mesmos privilégios que o usuário tem, inclusive GRANT OPTION. Deve ser especificado na cláusula WITH. PROCESS Permite usar o comando SHOW PROCESSLIST, para ver todas as threads usadas por qualquer usuário conectado ao MySQL no momento. http://marx.vanderlinden.com.br/ 13 Privilégios Administrativos RELOAD Permite executar várias operações de controle administrativo, como FLUSH (usado para limpar caches) e RESET (usado para limpar caches e excluir logs) SHOW DATABASES Permite usar o comando SHOW DATABASES, para ver os nomes de todos os bancos de dados instalados no sistema. http://marx.vanderlinden.com.br/ 14 Privilégios Administrativos SHUTDOWN Permite desligar o servidor (comando mysqladmin shutdown) SUPER Permite terminar threads de outros usuários utilizando o comando KILL. http://marx.vanderlinden.com.br/ 15 Privilégios de BDs e Tabelas ALTER Permite usar ALTER TABLE. CREATE Permite usar CREATE TABLE. CREATE TEMPORARY TABLES CREATE VIEW DELETE http://marx.vanderlinden.com.br/ 16 Privilégios de BDs e Tabelas DROP Permite o uso de DROP DATABASE e DROP TABLE Não permite o uso de DROP INDEX INDEX Permite o uso de CREATE INDEX e DROP INDEX INSERT SELECT SHOW VIEW Permite o uso de SHOW CREATE VIEW http://marx.vanderlinden.com.br/ 17 Privilégios Especiais ALL [PRIVILEGES] Todos os privilégios USAGE Nenhum privilégio http://marx.vanderlinden.com.br/ 18 Nível do Privilégio ON *.* Todos os objetos, em todos os bancos de dados ON * Se não há um BD selecionado, mesmo que *.* Se há um BD selecionado, privilégio global para este BD apenas. http://marx.vanderlinden.com.br/ 19 Nível do Privilégio ON nomebd.* Privilégio global para o BD especificado. ON nomebd.nometabela ON nometabela Privilégio para a tabela especificada. http://marx.vanderlinden.com.br/ 20 Exemplos Superusuário: mysql> GRANT ALL ON *.* TO -> 'jacob'@'localhost' -> WITH GRANT OPTION; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 21 Exemplos Usuário limpador de logs e caches. mysql> GRANT RELOAD ON *.* TO -> 'flush'@'localhost'; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 22 Exemplos Usuário com totais poderes, restritos a um BD. mysql> GRANT ALL ON webdb.* TO -> 'fulano'@'provedor.com.br'; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 23 Exemplos Usuário com permissões de leitura em um BD: mysql> GRANT SELECT ON webdb.* TO -> 'leitor'@'%'; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 24 Exemplos Usuário com permissões específicas em um BD: mysql> GRANT SELECT,INSERT,DELETE,UPDATE -> ON webdb.* TO -> 'webdeveloper'@'%'; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 25 Exemplos Usuário com permissões específicas em tabelas e campos. mysql> GRANT SELECT, UPDATE -> (rua,numero,bairro,cep) -> ON webdb.endereco TO -> 'assistente'@'localhost'; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 26 Requerimentos de Conexão A opção REQUIRE permite especificar o tipo de conexão segura pela qual é aceitável que o usuário se conecte. http://marx.vanderlinden.com.br/ 27 Requerimentos de Conexão REQUIRE NONE Sem requerimentos especiais REQUIRE SSL Aceita apenas conexões seguras por SSL REQUIRE X509 Aceita apenas conexões em que o cliente possa se identificar por um certificado de chave pública X.509 http://marx.vanderlinden.com.br/ 28 Uso de Recursos A opção WITH pode ser usada para aplicar restrições adicionais ao usuário. Estas restrições limitam a quantidade de recursos que cada cliente pode utilizar no servidor. Para cada opção, 0=ilimitado http://marx.vanderlinden.com.br/ 29 Uso de Recursos MAX_QUERIES_PER_HOUR numero MAX_UPDATES_PER_HOUR numero Número máximo máximo de atualizações no BD por hora MAX_CONNECTIONS_PER_HOUR numero Número máximo de consultas por hora Número máximo de conexões realizadas ao BD por hora. MAX_USER_CONNECTIONS numero Número máximohttp://marx.vanderlinden.com.br/ de conexões simultâneas. 30 Exemplos mysql> GRANT SELECT, UPDATE -> (rua,numero,bairro,cep) -> ON webdb.endereco TO -> 'assistente'@'localhost' -> REQUIRE SSL -> WITH MAX_QUERIES_PER_HOUR 1000 -> MAX_USER_CONNECTIONS 5; Query OK, 0 rows affected (0.06 sec) http://marx.vanderlinden.com.br/ 31 Mudando a senha Para mudar a senha de um usuário, é possível usar o comando SET PASSWORD. Sintaxe: SET PASSWORD FOR usuário = PASSWORD(senha) http://marx.vanderlinden.com.br/ 32