SET ROLE ALL (para que serve?)

Este forum é destinado a perguntas relacionadas a Oracle, mas que não se enquadram nos forums acima. Aqui serão tratadas também sobre outras tecnologias da oracle, como o Workflow, BPEL, Spatial, OCS, etc.
Responder
Laninha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 68
Registrado em: Qua, 24 Out 2007 3:06 pm
Localização: Nilópolis - Rio de Janeiro

Oi pessoal,

Tenho mais uma pergunta:
Poderiam me explicar para que serve o comando Set role all?

Obrigada mais uma vez,
Laninha :)
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Laninha,

Estou respondendo este tópico antigo ainda em aberto no caso de outros usuários se depararem com a mesma dúvida que você.

Uma role corresponde a uma lista de permissões à objetos de banco de dados. Ela facilita à admnistração dos privilégios junto aos usuários de banco.

Digamos que você disponha de um usuário XPTO que precise acessar (SELECT) 200 tabelas do schema XYZ.

Você poderia atribuir as permissões direto ao usuário XPTO, como nos comandos abaixo:

Selecionar tudo

GRANT SELECT ON XYZ.TABELA_001 TO XPTO;
GRANT SELECT ON XYZ.TABELA_002 TO XPTO;
GRANT SELECT ON XYZ.TABELA_003 TO XPTO;
...
GRANT SELECT ON XYZ.TABELA_200 TO XPTO; 
Só que administrar as permissões de acesso neste caso fica mais trabalhoso. Imagine que você precisar atribuir estas mesmas permissões aos usuários QWERT, POIUY, etc. Imagine depois que você precise revogar o acesso as 200 tabelas de XYZ do usuário XPTO.

Com o tempo, você pode perder o controle destas permissões. Sua administração se torna trabalhosa e cansativa. Provavelmente você vai precisar ficar anotando estas permissões à parte.

Por este motivo, o banco de dados ORACLE dispoe das ROLES.

Resumindo o nosso problema acima, a administração de permissões ficaria mais tranquila se você trabalhasse com ROLES;

Selecionar tudo

CREATE ROLE_XYZ;

GRANT SELECT ON XYZ.TABELA_001 TO ROLE_XYZ;
GRANT SELECT ON XYZ.TABELA_002 TO ROLE_XYZ;
GRANT SELECT ON XYZ.TABELA_003 TO ROLE_XYZ;
...
GRANT SELECT ON XYZ.TABELA_200 TO ROLE_XYZ;

CREATE ROLE_RIA;
GRANT SELECT ON RIA.TABELA_XP TO ROLE_RIA;

GRANT ROLE_XYZ TO XPTO, QWERT, POIUY;
GRANT ROLE_RIA TO XPTO, QWERT, POIUY;
REVOKE  ROLE_XYZ FROM XPTO;

Perceba que um usuario de banco pode dispor de várias roles associadas a ele. No exemplo acima, XPTO recebeu as roles ROLE_XYZ e ROLE_RIA.

Durante uma sessão de banco de dados deste, você pode definir se as roles atribuidas ao usuário ficam ativas ou devem ser inativadas temporariamente.
Com o comando "SET ROLE ALL", você informa que "todas as roles" - atribuidas à um usuário- devem se encontrar ativas durante a sessão deste usuário.

Maiores informações podem ser obtidas neste link: http://docs.oracle.com/cd/B19306_01/ser ... _10004.htm

Abraços,

Sergio Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes