Exportando e Importando Fixed-User Database Links

Por Tércio Silva Costa Oracle Associate e Skant Gupta Oracle ACE
Publicado em Fevereiro 2019

Revisado por Francisco Riccio




Database link é um objeto do esquema que permite que os DBAs acessem objetos em bancos diferentes. Em versões anteriores,  a senha do DB link era ofuscado o que podia certas vezes ser comprometida. Iniciando com o 18c, o Oracle habilita a criptografia de credenciais da senha do DB link no PDB bem como no arquivo de dump do dicionário do CDB root. Aqui, a senha real pode ser substituída por “x” em vez de ofuscá-la. Isso reduz as chances da senha do DB link ser hackeada.

A seção a seguir demonstra a implementação do recurso mencionado acima.




Exporting and Importing Fixed-User Database Links: Exemplo

Este exemplo fornece uma demonstração do passo a passo das tarefas necessárias para criar tipos de PTTs no banco Oracle 18c.

Requisitos:

  • Oracle 18c Container Database (CDB18C) instaldo
  • Three PDBs (PDB$SEED, PDB18C1, & PDB18C2) configurados
  • Tabela DBLTEST e keystore configurado em ambos PDBs.


1. Logue no PDB18C1 com o usuário SYSTEM e crie um DB link com um usuário fixo apontando para o PDB18C2.

Code
[oracle@oracle18c ~]$ sqlplus system/password@PDB18C1

SQL> CREATE DATABASE LINK db_link_user CONNECT TO system IDENTIFIED BY oracle USING 'PDB18C2'; 
Database link created.
SQL> SELECT * FROM dual@db_link_user; D - X

 


2. Teste o DB link fazendo uma consulta na tabela DBLTEST e verifique o enforcement status no dicionário.

Code
SQL> SELECT count FROM system.dbltest@db_link_user;
  
COUNT (*)
----------
       100

SQL> SELECT enforcement FROM dictionary_credentials_encrypt;

ENFORCEM
--------
DISABLED

 

3. Crie um diretório para exportar o arquivo de dump e saia da seção.

Code
SQL> CREATE OR REPLACE DIRECTORY dpump AS '/tmp';
Directory created.

SQL> EXIT
      

 

4. Execute a exportação(expdp) que irá conter o DB link com o usuário fixo.

Code
[oracle@oracle18c ~]$ expdp system@PDB18C1 directory=dpump dumpfile=dptest

Export: Release 18.0.0.0.0 - Production on Thu Jul 19 19:57:29 2018
Version 18.1.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.
Password:
Connected to: Oracle Database 18c EE Extreme Perf Release 18.0.0.0.0 - Production
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/********@PDB18C1 directory=dpump 
dumpfile=dptest
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/DB_LINK
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /tmp/dptest.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Jul 19 19:58:26 
2018 elapsed 0 00:00:47

 

5. Agora, podemos dropar(remover) o DB link e importá-lo de volta com o arquivo de dump.

Code
[oracle@oracle18c ~]$ sqlplus system@PDB18C1

SQL> DROP DATABASE LINK db_link_user;
Database link dropped.

SQL> EXIT

[oracle@oracle18c ~]$ impdp system@PDB18C1 directory=dpump dumpfile=dptest

Import: Release 18.0.0.0.0 - Production on Thu Jul 19 19:59:58 2018
Version 18.1.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 18c EE Extreme Perf Release 18.0.0.0.0 - Production
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/********@PDB1 directory=dp_dump 
dumpfile=dp_test
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/DB_LINK
Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at Thu Jul 19 20:00:10 
2018 elapsed 0 00:00:06

[oracle@oracle18c ~]$

 

6. Logue no PDB e teste se o DB link esta funcionando ou não.

Code
SQL> SELECT count FROM system.dbltest@db_link_user;
  
COUNT (*)
----------
       100

 

7. Para evitar esse risco de segurança precisamos ativar a criptografia de credenciais no nível do banco. Para habilitar, vamos criar um usuário e atribuir o privilégio SYSKM.

Code
SQL> CONNECT sys@PDB18C1 AS SYSDBA
Enter password:
Connected.

SQL> ALTER DATABASE dictionary encrypt credentials;
ALTER DATABASE dictionary encrypt credentials
*
ERROR at line 1:
ORA-28447: insufficient privilege to execute ALTER DATABASE
DICTIONARY statement


SQL> CREATE USER enc IDENTIFIED BY password;
User created.

SQL> GRANT create session, syskm TO enc;
Grant succeeded.

Nota: Pode acontecer um erro ao tentar ativar a criptografia de credenciais, mesmo logando com a role SYSDBA. Então, para esta demonstração, foi criado um usuário com a role SYSKM.

 

8. Logue como SYSKM e ative a criptografia de credenciais

Code
SQL> CONNECT enc@PDB18C1 AS SYSKM
Enter password:

SQL> ALTER DATABASE dictionary encrypt credentials;
Database dictionary altered.

SQL> SELECT enforcement FROM dictionary_credentials_encrypt;

ENFORCEM
--------
ENABLED

 

9. Faça um novo dump(expdp) que contenha o DB Link com o usuário fixo.

Code
[oracle@oracle18c ~]$ expdp system@PDB18C1 directory=dpump dumpfile=dptest1 
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /tmp/dptest1.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu 
Jul 19 20:05:26 2018 elapsed 0 00:00:47

 

10. Agora podemos dropar o DB link e importar novamente com o arquivo de dump.

Code
[oracle@oracle18c ~]$ sqlplus system@PDB18C1

SQL> DROP DATABASE LINK db_link_user;
Database link dropped.
SQL> EXIT

[oracle@oracle18c ~]$ impdp system@PDB18C1 directory=dpump dumpfile=dptest1
Import: Release 18.0.0.0.0 - Production on Thu Jul 19 20:08:00 2018
Version 18.1.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 18c EE Extreme Perf Release 18.0.0.0.0 - Production
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/********@PDB1 directory=dp_dump 
dumpfile=dp_test
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/DB_LINK
ORA-39395: Warning: object SYSTEM.DB_LINK_USER requires password reset after import

Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Thu 
Jul 19 20:08:09 2018 elapsed 0 00:00:05

Nota: Durante a importação do DB link, você poderá ver a mensagem de aviso dizendo que será necessário resetar a senha do DB link.

 

11. Logue no PDB e teste se o DB link está funcionando ou não.

Code
SQL> SELECT * FROM system.dbltest@db_link_user;
SELECT * FROM system.dbltest@db_link_user
                          *
ERROR at line 1:
ORA-28449: cannot use an invalidated database link

 

12. Será necessário alterar o DB link para fazê-lo funcionar.

Code
SQL> ALTER DATABASE LINK test CONNECT TO system IDENTIFIED BY oracle;
Database link altered.

SQL> SELECT * FROM system.dbltest@db_link_user;
  COUNT(*)
----------
      100

 


Conclusão

No exemplo acima, foi ativada a criptografia de credenciais no banco. Além disso, é importante notar que o Data Pump Export(expdp) armazena uma senha inválida para o DB link no arquivo de dump.




Tércio Costa Formado em Ciências da Computação pela UFPB com experiência em Servidores Windows Server e Linux e banco de dados Oracle desde 2008 juntamente com os seus serviços. Desenvolvimento de Sistemas em Java SE com banco de dados Oracle e MySQL. Certificado Oracle Certified SQL Expert, mantendo o blog https://oraclepress.wordpress.com/ reconhecido pela OTN e articulista no portal http://www.profissionaloracle.com.br/gpo

Skant Gupta é um Oracle Certified Cloud Professional 12c, OCE RAC 11g and Oracle Certified Professional (10g, 11g, 12c). Atualmente trabalha na Vodafone no Reino Unido e trabalhava anteriormente como DBA Sênior na Etisalat em Dubai. Tem 6 anos de experiência em diferentes tecnologias Oracle, focando principalmente em banco de dados, nuvem, soluções de alta disponibilidade, WebLogic e GoldenGate. Elejá esteve presente em vários grupos de usuários Oracle ao redor do mundo e maisrecentemente nos EUA, Emirados Árabes e Índia. Perfil de Skant Gupta no LinkedIn - https://www.linkedin.com/in/ skantali, Blog: http://oracle-help.com/

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.