segunda-feira, 10 de fevereiro de 2014

Default Role

Proporcionado por necessidades distintas de aplicação, segurança e até mesmo alterações incorretas ou desnecessárias é comum nos depararmos com usuários de banco de dados que contenham roles de forma não default (DEFAULT_ROLE = NO).

*Muitos casos com roles não default são constatados quando liberamos uma role a um usuário e ele retorna informando que ainda não possui as permissões esperadas pela role, ao verificar nos deparamos com DEFAULT_ROLE = NO na DBA_ROLE_PRIVS.

open ac DEFAULT ROLE


SQL> select granted_role, default_role from dba_role_privs where grantee='EXEMPLO';
 
GRANTED_ROLE                   DEF
------------------------------ ---
CONNECT                        YES
RESOURCE                       NO
Quando uma role não é uma DEFAULT ROLE, para que o usuário possa utilizar das permissões a ela atribuídas é preciso “habilitá-la” utilizando o comando SET ROLE.
set role DEFAULT ROLE

As roles’s são ajustadas de modo DEFAULT ou NÃO DEFAULT através do comando ALTER USER conforme imagem abaixo:

alter user role DEFAULT ROLE

Quando criamos um usuário, implicitamente ele contém um DEFAULT ROLE ALL, ou seja, as roles atribuídas a este usuário serão automaticamente DEFAULT ROLE (DEFAULT_ROLE = YES). Contudo se um “alter user default role” for executado e a role for alterada de ALL, as novas roles atribuídas ao usuário serão automaticamente não default o que nos submete ao caso apresentado acima(*) do usuário que contem a role mas não consegue utilizar as permissões. 

Para identificarmos estes casos onde uma nova role concedida será NÃO DEFAULT podemos utilizar a SYS.USER$ 

A coluna DEFROLE da SYS.USER$ representa um “status geral” das roles podendo ser 0, 1 ou 2 conforme abaixo: 

0 – Nenhuma. As roles atribuídas ao usuário são todas NÃO DEFAULT. Este valor é setado através de um “ALTER USER DEFAULT ROLE NONE”


SQL> create user exemplo identified by exemplo;
 
User created.
 
SQL> grant connect, resource to exemplo;
 
Grant succeeded.
 
SQL> select name, defrole from sys.user$ where name='EXEMPLO';
 
NAME                              DEFROLE
------------------------------ ----------
EXEMPLO                                 1
 
SQL> alter user exemplo default role none;
 
User altered.
 
SQL> select name, defrole from sys.user$ where name='EXEMPLO';
 
NAME                              DEFROLE
------------------------------ ----------
EXEMPLO                                 0
 
SQL> select granted_role, default_role from dba_role_privs where grantee='EXEMPLO';
 
GRANTED_ROLE                   DEF
------------------------------ ---
CONNECT                        NO
RESOURCE                       NO
1 – As roles atribuidas ao usuários serão sempre DEFAULT ROLE(padrão de criação do usuário). Este valor é setado através de um “ALTER USER DEFAULT ROLE ALL”


SQL> alter user exemplo default role all;
 
User altered.
 
SQL> select name, defrole from sys.user$ where name='EXEMPLO';
 
NAME                              DEFROLE
------------------------------ ----------
EXEMPLO                                 1
 
SQL> select granted_role, default_role from dba_role_privs where grantee='EXEMPLO';
 
GRANTED_ROLE                   DEF
------------------------------ ---
CONNECT                        YES
RESOURCE                       YES
2 – Aponta que existem roles específicas com DEFAULT ROLE (YES). As novas roles concedidas serão sempre NÃO DEFAULT, se precisa ser DEFAULT necessita ser ajustada. Este valor é setado através de um “ALTER USER DEFAULT ROLE


SQL> alter user exemplo default role connect;
 
User altered.
 
SQL> select name, defrole from sys.user$ where name='EXEMPLO';
 
NAME                              DEFROLE
------------------------------ ----------
EXEMPLO                                 2
 
SQL> select granted_role, default_role from dba_role_privs where grantee='EXEMPLO';
 
GRANTED_ROLE                   DEF
------------------------------ ---
CONNECT                        YES
RESOURCE                       NO
 
SQL> grant dba to exemplo;
 
Grant succeeded.
 
SQL> select granted_role, default_role from dba_role_privs where grantee='EXEMPLO';
 
GRANTED_ROLE                   DEF
------------------------------ ---
DBA                            NO
CONNECT                        YES
RESOURCE                       NO
A lista das DEFAULT ROLES (YES) podem ser obtidas na SYS.KU$_DEFROLE_LIST_VIEW:


SQL> set lines 200
SQL> select * from sys.KU$_DEFROLE_LIST_VIEW where user_name='EXEMPLO';
 
   USER_ID USER_NAME                      ROLE                              ROLE_ID
---------- ------------------------------ ------------------------------ ----------
      1422 EXEMPLO                        CONNECT                                 2
 
SQL> alter user exemplo default role connect,resource;
 
User altered.
 
SQL> select * from sys.KU$_DEFROLE_LIST_VIEW where user_name='EXEMPLO';
 
   USER_ID USER_NAME                      ROLE                              ROLE_ID
---------- ------------------------------ ------------------------------ ----------
      1422 EXEMPLO                        CONNECT                                 2
      1422 EXEMPLO                        RESOURCE                                3
 
SQL> select granted_role, default_role from dba_role_privs where grantee='EXEMPLO';
 
GRANTED_ROLE                   DEF
------------------------------ ---
DBA                            NO
CONNECT                        YES
RESOURCE                       YES
Fique atento! Como mencionado no inicio deste artigo (necessidades distintas de aplicação e segurança) podem fazer com que realmente seja preciso a existência de roles NÃO DEFAULT e alterando-as para DEFAULT pode gerar problemas. 

Referências: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10004.htm#SQLRF55312 http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_4003.htm#SQLRF53554
Postagem mais recente Postagem mais antiga Página inicial

0 comentários:

Postar um comentário

Translate

# Suporte

# ACE Program

#Oracle

#Oracle
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

#Blog reconhecido

#ARTICULISTA

Marcadores

Postagens populares