Skip to main content

Command Palette

Search for a command to run...

Oracle Database Vault: Uma verdadeira "Muralha" para seu banco de dados

Updated
5 min read
Oracle Database Vault: Uma verdadeira "Muralha" para seu banco de dados

Até aqui, tínhamos liberdade para fazer qualquer coisa com o usuário SYS, com certeza podíamos dizer que ele era o 'Zeus' do banco de dados Oracle. Só que, no momento em que ativamos o Database Vault, algumas regras mudam. Vamos habilitar o Database Vault e observar na prática como ele se comporta no banco de dados.

Primeiro vamos verificar se o Database Vault e o Label Security estão "instalados" no banco de dados.

 SQL> SELECT  comp_name, version, status FROM dba_registry WHERE comp_name in( 'Oracle Database Vault', 'Oracle Label Security');

Component                                    Version           Status
-------------------------------------------- ----------------- -----------------
Oracle Label Security                        19.0.0.0.0        VALID
Oracle Database Vault                        19.0.0.0.0        VALID

Já que os componentes estão instalados podemos prosseguir...

Mas antes gostaria de colocar uma observação, nem todo o banco tem o DBV e Label security instalados, principalmente aqueles bancos que foram migrados do 11G para o 19C. Em breve disponibilizarei um link nesse artigo demonstrando como instalar esses componentes "do zero".

Sem delongas, vamos para a parte boa.

O Database Vault precisa de 2 usuários, de forma macro, esses usuários são o de administração e o de gerenciamento. "NAO PERCA A SENHA DESSES USUÁRIOS, ISSO PODE TE DAR UMA GRANDE DOR DE CABEÇA".

Vamos la:

CREATE PROFILE PRF_DATABASE_VAULT LIMIT password_life_time UNLIMITED;

CREATE USER DBV_ADMIN IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

CREATE USER DBV_ADMIN_BACKUP IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

CREATE USER DBV_MGR IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

CREATE USER DBV_MGR_BACKUP IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

GRANT DV_OWNER TO DBV_ADMIN;
GRANT DV_ADMIN TO DBV_ADMIN;
GRANT CONNECT TO DBV_ADMIN;
GRANT CREATE SESSION TO DBV_ADMIN;

GRANT DV_ACCTMGR TO DBV_MGR;
GRANT CONNECT TO DBV_MGR;
GRANT CREATE SESSION TO DBV_MGR;


GRANT DV_OWNER TO DBV_ADMIN_BACKUP;
GRANT DV_ADMIN TO DBV_ADMIN_BACKUP;
GRANT CONNECT TO DBV_ADMIN_BACKUP;
GRANT CREATE SESSION TO DBV_ADMIN_BACKUP;

GRANT DV_ACCTMGR TO DBV_MGR_BACKUP;
GRANT CONNECT TO DBV_MGR_BACKUP;
GRANT CREATE SESSION TO DBV_MGR_BACKUP;

Anteriormente disse que são 2 usuários para o Database Vault, um admin e outro de MGR, por precaução criamos um usuário backup, para caso algo ocorra com os principais usuários.

SQL> CREATE PROFILE PRF_DATABASE_VAULT LIMIT password_life_time UNLIMITED;

Profile created.

SQL> 
SQL> CREATE USER DBV_ADMIN IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

User created.

SQL> 
SQL> CREATE USER DBV_ADMIN_BACKUP IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

User created.

SQL> 
SQL> CREATE USER DBV_MGR IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

User created.

SQL> 
SQL> CREATE USER DBV_MGR_BACKUP IDENTIFIED BY WElcome1#_ PROFILE PRF_DATABASE_VAULT;

User created.

SQL> GRANT DV_OWNER TO DBV_ADMIN;

Grant succeeded.

SQL> GRANT DV_ADMIN TO DBV_ADMIN;

Grant succeeded.

SQL> GRANT CONNECT TO DBV_ADMIN;

Grant succeeded.

SQL> GRANT CREATE SESSION TO DBV_ADMIN;

Grant succeeded.

SQL> 
SQL> GRANT DV_ACCTMGR TO DBV_MGR;

Grant succeeded.

SQL> GRANT CONNECT TO DBV_MGR;

Grant succeeded.

SQL> GRANT CREATE SESSION TO DBV_MGR;

Grant succeeded.

SQL> 
SQL> 
SQL> GRANT DV_OWNER TO DBV_ADMIN_BACKUP;

Grant succeeded.

SQL> GRANT DV_ADMIN TO DBV_ADMIN_BACKUP;

Grant succeeded.

SQL> GRANT CONNECT TO DBV_ADMIN_BACKUP;

Grant succeeded.

SQL> GRANT CREATE SESSION TO DBV_ADMIN_BACKUP;

Grant succeeded.

SQL> 
SQL> GRANT DV_ACCTMGR TO DBV_MGR_BACKUP;

Grant succeeded.

SQL> GRANT CONNECT TO DBV_MGR_BACKUP;

Grant succeeded.

SQL> GRANT CREATE SESSION TO DBV_MGR_BACKUP;

Grant succeeded.

Agora vamos ativar o DBV, como eu disse no início desse artigo o Database Vault vai mudar completando as permissões no banco, um exemplo que o SYS vai se tornar "um usuário mortal apenas", nenhum usuário terá mais super poderes, então homologue bastante o Database Vault

Antes de ativar em produção. Avisos feitos. Vamos la!

verificando status atual:


select * from cdb_dv_status where name in ('DV_CONFIGURE_STATUS','DV_ENABLE_STATUS') ; 
NAME                Status                CON_ID
------------------- ----------------- ----------
DV_CONFIGURE_STATUS FALSE                      0
DV_ENABLE_STATUS    FALSE                      0
Criando um restore point que nunca é demais:

SQL> create restore point PRE_DBV guarantee flashback database;

Restore point created.
configurando DBV:

BEGIN
 DVSYS.CONFIGURE_DV (
   dvowner_uname         => 'DBV_ADMIN',
   dvacctmgr_uname       => 'DBV_MGR');
 END;
/
 SQL> select * from cdb_dv_status where name in ('DV_CONFIGURE_STATUS','DV_ENABLE_STATUS') ; 

NAME                                            STATUS        
-------------------                  --------------
DV_CONFIGURE_STATUS            TRUE          
DV_ENABLE_STATUS                    FALSE

O configure esta como true, vamos ativar o dbv.

ativando dbv:

conn dbv_admin/WElcome1#_

EXEC DBMS_MACADM.ENABLE_DV;

SQL> conn dbv_admin/WElcome1#_
Connected.
SQL> 
SQL> 
SQL> 
SQL> show user
USER is "DBV_ADMIN"
SQL> EXEC DBMS_MACADM.ENABLE_DV;

PL/SQL procedure successfully completed.

SQL>  select * from cdb_dv_status where name in ('DV_CONFIGURE_STATUS','DV_ENABLE_STATUS') ; 

NAME                STATUS          CON_ID
------------------- ----------- ------------------
DV_CONFIGURE_STATUS TRUE              0
DV_ENABLE_STATUS    FALSE             0

Mesmo depois do "activate" DBV status está como FALSE, para ativarmos precisamos reiniciar a instância...

Estamos vamos la:

SQL> shut immediate ; 
startup ; 
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> ORACLE instance started.

Total System Global Area 2365584096 bytes
Fixed Size                  8942304 bytes
Variable Size             520093696 bytes
Database Buffers         1828716544 bytes
Redo Buffers                7831552 bytes
Database mounted.
Database opened.

SQL> select * from cdb_dv_status where name in ('DV_CONFIGURE_STATUS','DV_ENABLE_STATUS') ; 

NAME                STATUS                   CON_ID
------------------- -------------------- ----------
DV_CONFIGURE_STATUS TRUE                          0
DV_ENABLE_STATUS    TRUE                          0

Pronto, DBV ativado.

Antes, podíamos criar usuários normalmente:

SQL> show user      
USER is "SYS"
SQL> create user dbv_teste_sys identified by WElcome1#_ ; 

User created.

SQL> drop user dbv_teste_sys ;

User dropped.

Agora vamos tentar criar um usuário com o DBV ativado:

SQL> show user
USER is "SYS"
SQL> create user dbv_teste_sys identified by WElcome1#_ ;      
create user dbv_teste_sys identified by WElcome1#_
*
ERROR at line 1:
ORA-01031: insufficient privileges

para criar usuários agora apenas com o usuário DBV_MGR

conn DBV_MGR/WElcome1#_

SQL> show user
USER is "DBV_MGR"
SQL>  create user dbv_teste_sys identified by WElcome1#_ ; 

User created.

Antes de ativar o DBV, homologue profundamente no seu ambiente e fique atento as permissões que serão revogadas das roles. Nesse link você conseguirá ver todas as roles e as melhores praticas para o mesmo.

More from this blog

D

Diogo Fernandes

22 posts

Oracle Database Vault: Uma verdadeira "Muralha" para seu banco de dados