Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:sqlnet_cman_connection_manager

SQL*Net Proxy und Firewall mit dem 12c CMAN, dem Oracle Connection Manager implementieren

Mit dem Oracle Connection Manager, dem Cman, kann das SQL*Net Protokoll über einen Rechner zwischen verschiedenem Netzwerk„geroutet“ werden.

Der Cman ist bereits sehr lange Bestandteil der Oracle Installation, heute kann das der CMan in der Oracle Client Installation gefunden werden. Ursprünglich war einer der Haupteinsatz Zwecke das Routen zwischen verschiedenen Netzwerk Protokollen, zum Beispiel in einer SPX/IPX Welt nach TCP/IP.

Heute ist der CMan sehr praktisch um Proxy Funktionalitäten zwischen verschiedenen TCP/IP Netzen zu realisieren.

 Oracle Connection Manager als Proxy zwischen verschiedenen Netzen

Leider unterstützt der Connection Manager ab der Version 10 das TCPS (SSL über SQL*Net siehe SSL - Secure Sockets Layer - für SQL*Net aktivieren) Protokoll nicht mehr!(siehe auch TCPS Support in Connection Manager (Doc ID 1195833.1) )

Damit entfällt leider ein interessanter Einsatzzweck, per Zertifikats Autorisierung den Zugriff auf Datenbanken einzuschränken.

Test einer Sway Präsentation zu diesem Thema ⇒ https://sway.com/qD3FgMoEBZkBu7oY

Die vollständige Präsentation finden Sie hier ⇒ http://www.pipperr.de/knowhow/cman/oracle_connection_manager_cman.html oder auf Slideshare.


Lizenz Überlegungen

Leider ist der Oracle Connection Manager nur zusammen mit der Oracle EE Edition verfügbar, siehe für 12c hier ⇒ http://docs.oracle.com/database/121/DBLIC/editions.htm#DBLIC116


Architektur

  • Bündelt SQL*Net-Verbindungen
  • Erweiterte Sicherheitsüberprüfungen
  • Protokoll-Wandlung (TCP/IP –> SPX/IPX )
  • Firewall-Architektur

Oracle Connection Manager Process Overview

Der Oracle Connection Manager wird über den cmctl gestartet, dieses Control Utility startet zuerst den Prozess cmadmin, dieser Prozess steuert den Listener und die Gateway Prozesse für das SQL*Net Routing.


Installation unter Linux 64bit

Ablauf:

  • Installationspacket für den Oracle Client auswählen und herunterladen
  • Client Software inkl. Cman installieren
  • Client Software mit letzten Patch ausstatten
    • Patch 18031528: DATABASE PATCH SET UPDATE 12.1.0.1.3 (Apr 2014) bzw. höher vom Support Portal laden (alternativ Oracle Grid Infrastructure System Patch - 18139660 )
    • OPatch Patch - Patch 6880880: OPatch patch of version 12.1.0.1.2 for Oracle software releases 12.1.0.x (OCT 2013)
  • Connection Manager konfigurieren und starten

Client mit Oracle Connection Manager installieren

Mit dem Oracle Connection Manager IMMER auch die Oracle Listener Komponente bei der Installation auswählen!

Oracle User auf dem System anlegen und Oracle Base Verzeichnis anlegen.

Im Prinzip kann die Client Installation auch gleich einer Basis Oracle Installation durchgeführt werden, siehe ⇒ Eine Oracle Linux 6 Umgebung für eine Oracle Installation vorbereiten

Als User root das Oracle Basisverzeichnis anlegen:

mkdir -p /opt/oracle
chown oracle:oinstall /opt/oracle
 
mkdir -p /opt/oraInventory
chown oracle:oinstall /opt/oraInventory/

Installationsquelle als User Oracle nach /home/oracle/install kopieren, auspacken und installieren.

Als User oracle:

# installationsverzeichnis
mkdir /home/oracle/install

 
# Testen ob die Checksum des Installationpackets auch stimmt!
# laut Oracle Website - 1620565981
cksum linuxamd64_12c_client.zip

1620565981 912923006 linuxamd64_12c_client.zip


# Auspacken
unzip linuxamd64_12c_client.zip


# Installation starten
cd client
./runInstaller

Installation durchführen:

Screenshottask
Installation CMAn Installation starten - Custom auswählen - weiter
Installation CMAn Skip Software update - weiter
Installation CMAn Sprache auswählen - weiter
Installation CMAn Oracle Base und Oracle Home auswählen - weiter
Installation CMAn Oracle Inventory bestätigen - weiter
Installation CMAn Notwendige Komponenten auswählen: \\SQL*Plus\\Oracle Connection Manager\\Oracle Net\\Oracle Listner\\ - weiter
Installation CMAn Vorrausetzungen werden geprüft - weiter
Installation CMAn Zusammenfassung - weiter
Installation CMAn Installation läuft - weiter
Installation CMAN Oracle Net Config Agent mit „Perform Typical“ - weiter
Installation CMAn OraInventory UND Oracle Home Root Script ausführen! /opt/oraInventory/orainstRoot.sh\\und\\/opt/oracle/product/12.1.0/client_1/root.sh - weiter
Installation CMAn Root Script als root ausführen - weiter
Installation CMAn Installation abschließen - finish

Mit dem letzten Patch versehen

Patch „18031528: DATABASE PATCH SET UPDATE 12.1.0.1.3 (Jun 2014)“ und „OPatch Patch - Patch 6880880: OPatch patch of version 12.1.0.1.2 for Oracle software releases 12.1.0.x (OCT 2013)“ auf den Server kopieren.

# Altes Opatch Sichern
mv /opt/oracle/product/12.1.0/client_1/OPatch /opt/oracle/product/12.1.0/client_1/OPatch_OLD

#Neu auspacken
unzip p6880880_121010_Linux-x86-64.zip -d /opt/oracle/product/12.1.0/client_1

#test mit:
/opt/oracle/product/12.1.0/client_1/OPatch/opatch version
OPatch Version: 12.1.0.1.2

#Patch auspacken:

unzip p18031528_121010_Linux-x86-64_database.zip


export ORACLE_HOME=/opt/oracle/product/12.1.0/client_1

cd ./18031528

/opt/oracle/product/12.1.0/client_1/OPatch/opatch apply

....

You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]:  Y
...

Is the local system ready for patching? [y|n]
y

...

#Testen mit:
/opt/oracle/product/12.1.0/client_1/OPatch/opatch lsinventory

...
Patch  18031528     : applied on Sun Jun 29 16:33:28 CEST 2014
Unique Patch ID:  17262469.1
Patch description:  "Database Patch Set Update : 12.1.0.1.3 (18031528)"
....

Umgebung des Users einrichten:

vi .bashrc
 
export ORACLE_HOME=/opt/oracle/product/12.1.0/client_1
export PATH=$ORACLE_HOME/bin:$PATH
 
. .bashrc

Oracle Connection Manager Konfiguration

Konfiguration erstellen

Die Konfiguration erfolgt über die Datei $ORACLE_HOME/network/admin/cman.ora.

Erste Start Konfiguration (siehe Support Node - Doc ID 733421.1) erstellen:

cman_gpi =
(configuration=
    (address=(protocol=tcp)(host=oradb12c01.pipperr.local)(port=1999))
    (parameter_list =
        (aso_authentication_filter=off)
        (connection_statistics=yes)
        (log_level=admin)
        (max_connections=256)
        (idle_timeout=0)
        (inbound_connect_timeout=10)
        (session_timeout=0)
        (outbound_connect_timeout=0)
        (max_gateway_processes=16)
        (min_gateway_processes=2)
        (remote_admin=on)
        (trace_level=off)
        (trace_timestamp=off)
        (trace_filelen=1000)
        (trace_fileno=1)
        (max_cmctl_sessions=4)
        (event_group=init_and_term,memory_ops)
    )
    (rule_list=
        (rule=
            (src=*)(dst=*)(srv=*)(act=accept)
            (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
        )
    )
)

Starten

Das administrative Utility ist das Programm cmctl. Nach dem Start des cmctl muss sich mit dem „administer <cman_name>“ an den Connection Manager angemeldet werden.

Start:

cd $ORACLE_HOME/bin
 
./cmctl
 
 
CMCTL> administer cman_gpi
 
Current instance cman_gpi is not yet started
Connections refer to (address=(protocol=tcp)(host=oradb12c01.pipperr.local)(port=1999)).
The command completed successfully.
 
 
CMCTL:cman_gpi> startup
 
Starting Oracle Connection Manager instance cman_gpi. Please wait...
TNS-04077: WARNING: No password set for the Oracle Connection Manager instance.
CMAN for Linux: Version 12.1.0.1.0 - Production
Status of the Instance
----------------------
Instance name             cman_gpi
Version                   CMAN for Linux: Version 12.1.0.1.0 - Production
Start date                29-JUN-2014 20:29:16
Uptime                    0 days 0 hr. 0 min. 9 sec
Num of gateways started   2
Average Load level        0
Log Level                 OFF
Trace Level               OFF
Instance Config file      /opt/oracle/product/12.1.0/client_1/network/admin/cman.ora
Instance Log directory    /opt/oracle/diag/netcman/oradb12c01/cman_gpi/alert
Instance Trace directory  /opt/oracle/diag/netcman/oradb12c01/cman_gpi/trace
The command completed successfully.

Nach dem Start kann das Logfile unter $ORACLE_BASE/diag/netcman/ eingesehen werden.

Über die PS Liste kann auch geprüft werden ob alle Connection Manager Prozesse auch laufen:

$ ps uafx | grep cm
 
.. /opt/oracle/product/12.1.0/client_1/bin/cmadmin cman_gpi -inherit
.. /opt/oracle/product/12.1.0/client_1/bin/tnslsnr ifile=/opt/oracle/product/12.1.0/client_1/network/admin/cman.ora cman_gpi -inherit -mode proxy
.. /opt/oracle/product/12.1.0/client_1/bin/cmgw cmgw0 0 16 cman_gpi SNLSM:99224000
.. /opt/oracle/product/12.1.0/client_1/bin/cmgw cmgw1 1 16 cman_gpi SNLSM:99224000

Test mit der Start Konfiguration

Mit der obigen Start cman.ora arbeitet der Connection Manager ohne Einschränkungen.

Erster Test mit folgenden tnsnames.ora Eintrag:

cman_gpi_db=
  (DESCRIPTION = 
    (SOURCE_ROUTE = YES)
    (ADDRESS = 
      (PROTOCOL = TCP)(HOST = 192.168.178.110 )(PORT = 1999)
    )
    (ADDRESS = 
      (PROTOCOL = TCP)(HOST = 192.168.178.57)(PORT = 1521)
    )
    (CONNECT_DATA = 
      (SERVICE_NAME=GPI)
    )
  )

Der Schlüssel zu diesem Eintrag ist der Parameter SOURCE_ROUTE, die Verbindung erfolgt zuerst an den CMan, der weiß dann über den zweiten ADRESS Eintrag wo hin die Verbindung geleitet werden soll.

Konfiguration "härten"

In der einfachen Basis Konfiguration darf jeder sich mit dem Connection Manager verbinden und wird je nach tnsnames Eintrag einfach weitergeleitet.

Access Rules einstellen

Nach folgenden Muster können die Regeln eingestellt werden:

(RULE_LIST=
  (RULE=
    (SRC=host)
    (DST=host)
    (SRV=service_name)
    (ACT={accept|reject|drop})
    (ACTION_LIST=AUT={on|off}
    ((CONN_STATS={yes|no})(MCT=time)(MIT=time)(MOCT=time)))
  (RULE= ...))
ParameterBeschreibung
SRCQuelle, kann als IP Subnet mit / Notation angegeben werden wie 192.168.178.0/24 (siehe zum Beispiel für die CIDR-Suffix den Heise online Rechner
DSTZiel, angabe wie Quelle
SRVOracle Service Name
ACTaccept, reject, oder drop der Verbindung

ACTION_LIST: The rule-level parameter settings for some parameters.

Parameter:

  • AUT: Oracle Database security authentication on client side.
  • CONN_STATS: Log input and output statistics.
  • MCT: Maximum connect time.
  • MIT: Maximum idle timeout.
  • MOCT: Maximum outbound connect time.

siehe auch http://docs.oracle.com/cd/E16655_01/network.121/e17611/cman.htm#NETRF337

Wenn die Default Rule angepasst wird, muss die lokale Regel für den Connection des cmctl auf den Connction Manager hinterlegt werden

(rule_list=
   (rule=
    (src=oradb12c01.pipperr.local)
    (dst=127.0.0.1)
    (srv=cmon)
    (act=accept)
  )
)

Beispiel:

(RULE_LIST=
        (RULE=(SRC=192.168.178.0/8) 
              (DST=192.168.188.56) 
              (SRV=GPI_DATA) 
              (ACT=accept)
        )
 )
Password setzen

Das Password kann nicht direkt in der „cman.ora“ hinterlegt werden, sondern wird im „cmctl“ Utiltiy gesetzt und dann verschlüsselt in der „cman.ora“ gespeichert.

cmctl
 
CMCTL> administer cman_gpi
 
CMCTL:cman_gpi> startup
 
..
TNS-04077: WARNING: No password set for the Oracle Connection Manager instance.
..
 
CMCTL:cman_gpi> set password
 
Enter Old password:
Enter New password:
Reenter New password:
The command completed successfully.
CMCTL:cman_gpi> save_passwd
The command completed successfully.
 
# Was wird erzeugt
cat cman.ora
 
#----ADDED BY CMAN 18-MAY-2015 09:29:34---
password_cman_gpi = 10D34223DA9F8D28
#-

Beim nächsten Anmelden wird nach dem Passwort gefragt

SQL*Net Verschlüsselung

Die Parametrisierung der symmetrischen SQL*Net Protokol Verschlüsselung ( siehe ⇒ Das SQL*Net Protokoll mit einer symmetrischen Verschlüsselung wie DES / AES oder RC4 schützen findet nur auf dem Client und auf dem Server statt!

Auf dem CMAN muss dazu nichts konfiguriert werden!

siehe auch Dokument ⇒ „ORA-12564 when using native encryption settings in sqlnet.ora on CMAN server (Doc ID 1538702.1)“

Weitere Härtungsmaßnahmen für die Umgebung

Nur noch die Verbindung an den Datenbank Listener über den Connection Manager zulassen:

sqlnet.ora des Oracle DB Listeners anpassen:

#Prüfung aktivieren
TCP.VALIDNODE_CHECKING=YES

#Nur noch diese Liste von Hosts zulassen
TCP.INVITED_NODES=(192.168.178.110)

Probleme

TNS-04012: Unable to start Oracle Connection Manager instance

CMCTL:cman1> startup
TNS-04012: Unable to start Oracle Connection Manager instance.

Der TNS-04012 sagt leider wenig aus, in meine Fall war die cman.ora fehlerhaft!

Oracle Support:

  • 733421.1 Troubleshooting Guide: TNS-04012: Unable to Start Oracle Connection Manager Instance

Fehler **TNS-04011: Oracle Connection Manager instance not yet started.**

Nach dem Start des Connection Manager kann mit cmctl die Verwaltung nicht mehr durchgeführt werden.

Fehler:

CMCTL> administer cman_pb
Current instance cman_pb is not yet started
Connections refer to (address=(protocol=tcp)(host=oradb12c01.pipperr.local)(port=1999)).
The command completed successfully.
 
CMCTL:cman_pb> show all
TNS-04011: Oracle Connection Manager instance not yet started.

Lösung:

In meiner Umgebung war die Rule bzgl. Connect auf sich selbst fehlerhaft. Wird mit Rules gearbeitet, muss eine Regel aufgenommen werden, das der locale Client mit dem Connection Manager Admin Prozess kommunizieren darf.

Regel:

(rule=(src=oradb12c01.pipperr.local)(dst=127.0.0.1)(srv=cmon)(act=accept))
(rule=(src=oradb12c01.pipperr.local)(dst=*)(srv=cmon)(act=accept))

??Warum reicht nicht nur die localhost rule?? Sehr seltsam …..

Auto Start einrichten

Als user root folgende Datei nach /etc/init.d/oraConnectionManager kopieren und „aktivieren“.

/etc/init.d/oraConnectionManager:

oraConnectionManager
#!/bin/bash
#
# Run-level Startup script OracleConnectionManager
#
# chkconfig: 2345 08 92
# description:  Starts, stops Oracle Connection Manager
#
#
### BEGIN INIT INFO
# Provides: OracleConnectionManager
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop OracleConnectionManager
# Description: Start, stop and save OracleConnectionManager
### END INIT INFO
 
 
# Source function library.
. /etc/init.d/functions
 
ORACLE_USER=oracle
ORACLE_HOME=/opt/oracle/product/12.1.0/client_1
ORACLE_CMAN_NAME=cman_gpi_db
 
#Start or stop the Oracle NoSQL Node
case "$1" in
    start)
        # Oracle Connection Manager start
        echo -n "Starting Oracle Connection Manager: "
        su - $ORACLE_USER -c "export ORACLE_HOME=$ORACLE_HOME; $ORACLE_HOME/bin/cmctl << EOScipt
administer ${ORACLE_CMAN_NAME}
startup
exit
EOScipt"
        echo "OK"
        ;;
    stop)
        # Oracle Oracle Connection Manager shutdown
        echo -n "Shutdown Oracle Connection Manager: "
        su - $ORACLE_USER -c "export ORACLE_HOME=$ORACLE_HOME; $ORACLE_HOME/bin/cmctl << EOScipt
administer ${ORACLE_CMAN_NAME}
shutdown
exit
EOScipt"
        echo "OK"
        ;;
    status)
        # status
        echo -n "Status Oracle Connection Manager: "
         su - $ORACLE_USER -c "export ORACLE_HOME=$ORACLE_HOME; $ORACLE_HOME/bin/cmctl << EOScipt
administer ${ORACLE_CMAN_NAME}
show all
exit
EOScipt"
        ;;	    
    reload|restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 start|stop|restart|reload|status"
        exit 1
esac
exit 0

Start Script einrichten:

# datei nach /etc/init.d/oraConnectionManager
 
# rechte
chmod 777 /etc/init.d/oraConnectionManager
 
# 
chkconfig  --add oraConnectionManager
 
#
chkconfig  | grep oraConnectionManager

Datenbank am Connection Manager als Service anmelden

Remote Listner in Target Database

In der Single Target DB anmelden und Remote Listener setzen

ALTER system SET remote_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=oradb12c01.pipperr.local)(PORT = 1999))' scope=BOTH;

In einer Oracle RAC Cluster Konfiguration mit Scan Listener muss ein TNS Eintrag für den Remote Listener Parameter erstellt werden, in dem alle Scan Listener IP Adressen UND der Oracle Connection Manager aufgeführt ist.

Siehe auch Doc ID 1375897.1

Im cmctl kontrollieren

CMCTL:cman_gp> show service
 
...
         (ADDRESS=(PROTOCOL=tcp)(HOST=::1)(PORT=9116))
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:2 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCP)(HOST=GPILOCALHOST)(PORT=1521))
 
....

TNS Eintrag auf dem Client

cman_gpi_XE=
  (DESCRIPTION = 
   (ADDRESS = 
      (PROTOCOL = TCP)(HOST=oradb12c01.pipperr.local)(PORT = 1999)
    )    
    (CONNECT_DATA = 
      (SERVICE_NAME=XE)
    )
  )

Test mit tnsping und sqlplus.

Siehe auch:

  • Force Connections to a Specific Database Service When two Identical Services are Registered to CMAN (Doc ID 1455068.1) - wird über eine Rule abgewickelt

Quellen

Oracle

Support

  • A Guide to CMAN Configuration for 10g and Newer Releases (Doc ID 298916.1)
  • Integrating Connection Manager (CMAN) into a RAC+SCAN Environment (Doc ID 1556300.1)
  • ORA-12564 when using native encryption settings in sqlnet.ora on CMAN server (Doc ID 1538702.1)

Overview

cmctl

Web

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/sqlnet_cman_connection_manager.txt · Zuletzt geändert: 2016/02/27 18:55 von Gunther Pippèrr