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.
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.
As roles’s são ajustadas de modo DEFAULT ou NÃO DEFAULT através do comando ALTER USER conforme imagem abaixo:
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.
As roles’s são ajustadas de modo DEFAULT ou NÃO DEFAULT através do comando ALTER USER conforme imagem abaixo:
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 NO1 – 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
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 YES2 – 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
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 NOA 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 YESFique 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.
0 comentários:
Postar um comentário