segunda-feira, 30 de janeiro de 2012

Segurança - Roles e Grants


Protegendo a conta do usuário raiz
MYSQL> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD (‘digite a senha’);

ORACLE> ALTER USER root identified by digite a senha;

Adicionando um novo usuário.
Não há nenhum comando atual para criar usuário, mas a maioria dos sistemas utilizará algo mais ou menos assim.

CREATE USER nome_usuario IDENTIFIED BY ‘digite a senha’;

 
Comando GRANT
Você pode controlar exatamente o que os usuários podem fazer às tabelas e colunas com o comando GRANT.
   
Variações do comando GRANT
Você pode nomear múltiplos usuários no mesmo comando GRANT.
WITH GRANT PTION dá permissão aos usuários para dar a outros usuários a permissão que a eles foi concedida.
 
Uma coluna, ou colunas especifica em uma tabela, pode ser utilizada ao invés da tabela inteira.
Você pode especificar mais de uma permissão para um tabela.
GRANT ALL dá permissão ao usuário para utilizar SELECT, UPDATE, INSERT e DELET daquela tabela especifica.
Você pode especificar a todas as tabelas em um banco de dados com o nome_bancodedados.*.


Permite ao usuário utilizar SELECT na tabela mencionada:
GRANT SELECT ON tabela TO nome_usuario;

Permite a dois usuários de uma só vez utilizar DELETE na tabela mencionada:
GRANT DELETE ON tabela TO usuario1, usuario2;

Permite dois ou mais usuários utilizarem o DELETE na tabela mencionada e também para dar a outros a mesma permissão:
GRANT DELETE ON tabela TO usuario1, usuario2 WITH GRANT OPTION;

Permite um usuario fazer um SELECT apenas emu ma coluna da tabela mencionada:
GRANT SELECT (nome_coluna) ON tabela TO usuário;

Permite usuário utilizar INSERT E DELETE na tabela mencionada:
 GRANT INSERT, SELECT ON tabela TO usuário;

Permite ao usuario utilizar INSERT, DELETE, SELECT e UPDATE na tabela mencionada:
GRANT ALL ON tabela TO usuário;

Permite ao usuário utilizar SELECT em todas as tabelas do banco de dados, onde o ‘*’ representa todas as tabelas .
GRANT SELECT ON banco_dados.*;

REVOKE (REVOGUE) privilégios

Suponha que decidimos remover um privilegio de utilizar o SELECT dado a um usuario. Para fazer isto precisamos do comando REVOKE:
REVOKE SELECT ON tabela FROM usuario;

A para o REVOKE é quase idêntica a do comando GRANT. Ao invés de utilizar a palavra “grant”, utiliza-se “revoke”, e ao invés de utilizar o “to”, utiliza-se “from”.

REVOGANDO uma GRANT OPTION

Você pode revogar parte do privilégio como “WITH GRANT OPTION” mas deixa o privilegio intacto.

No exemplo abaixo o usuario1 e usuario2 ainda poderão utilizar o DELETE na tabela tarefas, mas não poderão dar a mais ninguém.

REVOKE GRANT OPTION ON DELETE ON tabela FROM usuario1, usuario2;

 
REVOGANDO com mais precisão

Você pode utilizar a palavra-chave CASCADE e RESTRICT para direcionar quem mantém a quem perde os privilégios de forma precisa.

O primeiro, CASCADE remove o privilégio do usuário que você indicou da mesma forma que ninguém mais além daquele usuário deu permissão.
REVOKE DELETE ON tabela FROM usuario CASCADE;
 

Utilizando RESTRICT quando quiser remover um privilégio de um usuario que retornará um erro se o usuario tiver concedido privilegio a alguém.

REVOKE DELETE ON tabela FROM usuario RESTRICT;

Você pode conceder beneficios globais no MySQL da seguinte forma:
GRANT SELECT ON *.* TO usuário;

Você pode utilizar estes comandos com uma view da mesma forma que faria com uma tabela, exceto se a view for do tipo não atualizável.

Roles
Uma role é uma forma de agrupar privilégios específicos e aplica-los a todos em um grupo.chegou

Obs.: Não existe ROLES no mysql.

Comando para criar uma role.
CREATE ROLE nome_role;

Para adicionar privilégios em uma role, trata-a como se fosse simplesmente um usuário:
GRANT SELECT, INSERT ON alguma_tabela TO nome_role;

Para adicionar  uma role à um usuário:
GRANT nome_role TO usuário;

Para eliminar uma ROLE:
DROP ROLE nome_role;

As roles em uso podem ser excluídas:
Um usuário pode ter mais que uma role ao mesmo tempo, apenas certifique-se que não tenha permissões conflitantes ou poderá causar alguns problemas. As permissões negadas prevalecem sobre aquelas que são concedidas.

Para revogar uma role:
REVOKE nome_role FROM usuário;

Utilizando sua role WITH ADMIN OPTION:
Da mesma forma que um GRANT possui WITH GRANT OPTION, uma role tem o comando similar WITH ADMIN OPTION. Esta opção permite que qualquer u m com aquela role concedê-la  a qualquer outra pessoa.
Exemplo:
GRANT nome_role TO usuário1 WITH ADMIN OPTION;
 
Agora o usuario1 já tem permissão de administrador e consegue dar permissão na role para o usuário2 conforme comando abaixo.
GRANT nome_role TO usuário;
 
Revogando uma role com o comando CASCADE:
REVOGUE nome_role FROM usuário CASCADE;

Revogando uma role com o comando RESTRICT:
REVOKE nome_role FROM usuário RESTRICT;


Combinando CREATE USER com GRANT:
Exemplo separado:
CREATE USER elsie
INDENTIFIED BY ‘gigite a senha’;


GRANT SELECT ON nome_tabela TO usuário;

Combinando os dois comand
GRANT SELECT ON nome_tabela TO usuario;
IDENTIFIED BY ‘Digite a senha’;