Protegendo a base de dados através do Oracle Connection Manager

Por Rogerio Eguchi
Publicado em Outubro 2018
Revisado por Francisco Riccio

Nesse artigo vou demonstrar como implementar o Oracle Connection Manager (CMAN) para proteger o banco de dados.

Quando digo proteger, significa que as conexões clientes não chegarão diretamente à base, mas sim através do CMAN, que funcionará como um proxy/firewall entre a camada cliente e os servidores de banco.

Ambiente

O ambiente instalado para os testes com o CMAN consiste em:

Servidor Função Oracle Software Rede
rmlab - Windows 2012 R2 Estação cliente Oracle Client 12.2 172.24.33.0
oralab1/oralab2 – Oracle Linux 6.10 Servidores CMAN Oracle Client 18.0 172.24.33.0
raclab1/raclab2 - Oracle Linux 6.10 Servidores Oracle RAC Oracle RAC 12.2 172.24.48.0

Introdução

O CMAN é um servidor proxy que encaminha as requisições de conexão para o banco de dados ou para outro servidor CMAN. Normalmente o CMAN reside em um servidor separado do servidor de banco de dados ou das estações clientes. O CMAN está disponível para instalação no Oracle 12c Enterprise Edition ou superior, através da instalação customizada do disco client.

As principais funções do CMAN são:

  • Controle de acesso: utiliza-se regras de configuração para filtrar requisições dos clientes
  • Controle de acesso: utiliza-se regras de configuração para filtrar requisições dos clientes

Importante: A utilização do CMAN é completamente transparente para aplicação.

Instalação do CMAN

Utilize o link ao lado para realizar o download do disco de instalação do Oracle Client:

Descompacte o arquivo e rode o runInstaller.

Escolha a opção custom de instalação:

Defina o Oracle Home:

E selecione, no mínimo, o Oracle Connection Manager e o Oracle Net Listener.

Prossiga e espere terminar a instalação.

Arquitetura do CMAN

O CMAN consiste em 3 componentes:
Listener
CMGW (Oracle Connection Manager Gateway)
CMADMIN (Oracle Connection Manager Administration)

O listener recebe as conexões dos clientes e avalia as regras para aceitar/negar o acesso. Se o acesso for permitido, encaminha a requisição para o processo gateway, escolhendo aquele com o menor número de conexões.
O processo CMGW então encaminha a requisição para outro CMAN ou diretamente para um servidor de banco de dados, retransmitindo os dados até que a conexão termine.
O processo CMADMIN monitora a saúde do listener e dos processos CMGW, parando e iniciado processos quando necessário. O CMADMIN registra a informação sobre os processos CMGW no listener e processa os comandos iniciados pelo utilitário cmctl.

Configurando o CMAN

A configuração completa do CMAN pode ser dividida em três partes:

1) Configuração do CMAN.ORA

Após a instalação do Oracle Client, crie o arquivo cman.ora no diretório $ORACLE_HOME/network/admin/

Exemplo de arquivo de configuração cman.ora:



cman_oralab1.cp.totvs.com.br =
  (CONFIGURATION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=oralab1.cp.totvs.com.br)(PORT=1521))
    (RULE_LIST=
      (RULE=(SRC=172.24.33.81)(DST=172.24.48.0/24)(SRV=pdb_rm_cus1.cp.totvs.com.br)(ACT=accept))
      (RULE=(SRC=oralab1)(DST=127.0.0.1)(SRV=cmon)(ACT=accept))
    )
  )
REGISTRATION_INVITED_NODES_cman_oralab1.cp.totvs.com.br=(172.24.48.0/24)

Da lista de regras:

A primeira libera o acesso da rede entre a origem (SRC) e o destino (DST) para o serviço (SRV) especificado.

A segunda regra é necessária para permitir a inicialização do CMAN no servidor.

Utilize o CMCTL para iniciar o CMAN:

Para a implementação em produção, faça a instalação de pelo menos dois servidores CMAN para não haver um ponto único de falha da arquitetura. Nesse caso, repita o mesmo procedimento de instalação realizado para o servidor oralab1 em um novo servidor, por exemplo o oralab2.

2) Configuração no Servidor de Banco Oracle RAC

Nessa etapa são necessárias duas ações:

Configurar o tnsnames.ora. Exemplo:



oralab1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oralab1)(PORT = 1521))
    (CONNECT_DATA =
    )
  )

Alterar o parâmetro remote_listener para registrar os bancos e serviços no CMAN. Exemplo:



ALTER SYSTEM SET remote_listener='TTVLAB-scan:1521','oralab2:1521','oralab1:1521' 
SCOPE=BOTH SID='*';

ALTER SYSTEM REGISTER;

Confirme que o CMAN passou a ter os bancos registrados no listener:

Ou via cmctl:

3) Configuração do tnsnames.ora na estação cliente

Vamos configurar o tnsnames.ora para acessar o banco através do CMAN.



RM =
  (description =
    (load_balance = on)
    (failover = on)
    (address_list =                   
      (source_route = yes)
      (address = (protocol = tcp)(host = oralab1)(port = 1521))
      (address=(protocol=tcp)(host=TTVLAB-scan)(port=1521))
    )
    (address_list =                   
      (source_route = yes)
      (address = (protocol = tcp)(host = oralab2)(port = 1521))
      (address=(protocol=tcp)(host=TTVLAB-scan)(port=1521))
    )
    (connect_data =
      (service_name = pdb_rm_cus1.cp.totvs.com.br)
      (server = dedicated)
    )
  )

Teste de acesso via SQLPlus

Acessando um servidor e serviço liberados:

Caso o servidor ou serviço não esteja liberado nas regras do CMAN um erro é retornado, exemplo:

Referências

Configuring Oracle Connection Manager - https://docs.oracle.com/en/database/oracle/oracle-database/18/netag/configuring-oracle-connection-manager.html Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)

Rogerio Bacchi Eguchi é um DBA Oracle Sênior com extensa experiência em ambientes OLTP de missão crítica e que empregam as tecnologias da "Oracle Maximum Availability Architecture". Atuou como DBA em empresas como Oracle, UOL, UOLDiveo, PagSeguro e atualmente atua como DBA/DMA na TOTVS. Possui as certificações Oracle OCP 8i, 9i, 10g, 11g, 12c e OCE Exadata. Atua também como SysAdmin/DEVOPS onde é certificado Linux RHCE. Entusiata de novas tecnologias como big data, automações e cloud computing. Compartilha conhecimento no blog reguchi.wordpress.com e twitter @reguchi_br.

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.