Protegendo o Oracle – Parte 1
outubro 10, 2012

Essa é o início de uma série de artigos sobre proteção e segurança no banco de dados Oracle. Hoje estaremos falando sobre o controle de acesso ao dicionário de dados através do parâmetro de inicialização O7_DICTIONARY_ACCESSIBILITY.

De acordo com a documentação Oracle, esse parâmetro controla as restrições no privilégio de sistema. Caso esse parâmetro esteja habilitado (true) o acesso aos objetos SYS (consequentemente ao dicionário de dados) é permitida.

Vamos a um exemplo, veja que o parâmetro O7_DICTIONARY_ACCESSIBILITY está definido como false (padrão), assim mesmo que o usuário tenha privilégio de SELECT ANY TABLE ele não consegue acessas as tabelas do SYS. O mesmo vale para o privilégio EXECUTE ANY PROCEDURE, que permite executar qualquer procedure exceto as do usuário SYS, caso o parâmetro O7_DICTIONARY_ACCESSIBILITY esteja como false.

FSOARES@dbtst> create user usr1 identified by oracle;

User created.

FSOARES@dbtst> grant connect, resource to usr1;

Grant succeeded.

FSOARES@dbtst> grant select any table to usr1;

Grant succeeded.

FSOARES@dbtst> show parameter o7
NAME                                            TYPE        VALUE
---------------------------------------------- ----------- -------
O7_DICTIONARY_ACCESSIBILITY                    boolean     FALSE

Veja que criamos um usuário chamado usr1 e definimos a ele a permissão de SELECT ANY TABLE, porém o parâmetro O7_DICTIONARY_ACCESSIBILITY está definido como false, veja o que acontece caso o usuário USR1 tente selecionar qualquer tabela do usuário SYS.


USR1@dbtst> select name, password from sys.user$;
select name, password from sys.user$
                               *
ERROR at line 1:
ORA-00942: table or view does not exist

Mesmo com o privilégio SELECT ANY TABLE o usuário USR1 não consegue acessar as informações do schema SYS.

Vamos agora, inverter os papéis agora. Com o parâmetro O7_DICTIONARY_ACCESSIBILITY como true vamos ver o que acontece com as permissões no dicionário de dados:

SQL> alter system set O7_DICTIONARY_ACCESSIBILITY=TRUE scope=spfile;

System altered.

SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area  845348864 bytes
Fixed Size		    1348216 bytes
Variable Size		  465571208 bytes
Database Buffers	  373293056 bytes
Redo Buffers		    5136384 bytes
Database mounted.
Database opened.

SQL> show parameter O7_DICTIONARY_ACCESSIBILITY

NAME				     TYPE	 VALUE
------------------------------------ ----------- -----
O7_DICTIONARY_ACCESSIBILITY	     boolean	 TRUE

USR1@dbtst> select name, password from sys.user$;

NAME                           PASSWORD
------------------------------ --------------------
SYS                            8A8F025737A9097A
PUBLIC
CONNECT
RESOURCE
DBA
SYSTEM                         2D594E86F93B17A1
SELECT_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
DELETE_CATALOG_ROLE
OUTLN                          4A3BA55E08595C81
EXP_FULL_DATABASE
IMP_FULL_DATABASE
LOGSTDBY_ADMINISTRATOR
DBFS_ROLE
DIP                            CE4A36B8E06CA59C
AQ_ADMINISTRATOR_ROLE
AQ_USER_ROLE
DATAPUMP_EXP_FULL_DATABASE
DATAPUMP_IMP_FULL_DATABASE
ADM_PARALLEL_EXECUTE_TASK
GATHER_SYSTEM_STATISTICS
JAVA_DEPLOY
ORACLE_OCM                     5A2E026A9157958C
..
HR                             6399F3B38EDF3288
OE                             9C30855E7E0CB02D
IX                             2BE6F80744E08FEB
SH                             9793B3777CD3BD1A
PM                             72E382A52E89575A
BI                             FA1D2B85B70213F3
FSOARES                        3B789FED9DDFE9B9
USR1                           8FFA74CCAD48CE21
USR2                           6102DC4A88E79D5A

Com a conclusão dos testes acima, fica claro a grande necessidade de deixar o parâmetro O7_DICTIONARY_ACCESSIBILITY sempre como false, permitindo que qualquer sessão não pode obter informações sigilosas que são destinadas apenas ao Oracle e do DBA.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*