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.
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 |
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:
Importante: A utilização do CMAN é completamente transparente para aplicação.
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:
Prossiga e espere terminar a instalação.
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.
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)
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.
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 =
)
)
ALTER SYSTEM SET remote_listener='TTVLAB-scan:1521','oralab2:1521','oralab1:1521'
SCOPE=BOTH SID='*';
ALTER SYSTEM REGISTER;
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)
)
)
Acessando um servidor e serviço liberados:
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.