=====Oracle 21c -Der CMAN,Oracle Connection Manager, im Traffic Director Mode (TDM)=====
Zur Grundinstallation des CMAN siehe => [[dba:sqlnet_cman_connection_manager_21c|Oracle 21c - SQL*Net Proxy und Firewall mit dem Oracle Connection Manager CMAN implementieren - Einsatz als Standby DB Proxy für ältere Java Apps]]
=== CMAN Standard <=> Traffic Director Mode (TDM) ===
CMAN Klassisch => SQL*Net Proxy => Leitet Anfrage weiter indem die Anfrage über den CMAN getunnelt wird.
Traffic Director Mode TDM => SQL*Net Endpunkt für das Connection Pooling => Verwaltet eigene Verbindung zur Datenbank
Siehe auch Connection Pooling mit der 11g => [[dba:oracle_connection_pooling|Database Resident Connection Pooling (DRCP)]]
=== Einsatzzweck ===
Ideal als Proxy für die Datenbank in der Cloud für Client Server Architekturen
----
==== Konfigurieren ====
* TDM User in der DB anlegen
* Muss das Connect Recht explizit besitzen!
* CMAN Server als Remote Listener in der Ziel Datenbank anlegen
* CMAN Konfigurieren
* TDM Parameter einstellen
* Wallet für den Connect zur DB hinterlegen
* Client Konfigurieren
== User in der Zieldatenbank ===
Proxy User für den Connect Through anlegen:
create user cman_tdm identified by "SecretPWD2023";
grant connect to cman_tdm;
Applications-User anlegen und berechtigen:
create user gpipperr identified by "GanzAnderesPWD2023";
grant connect,resource to gpipperr ;
GRANT UNLIMITED TABLESPACE TO gpipperr ;
--
alter user gpipperr grant connect through cman_tdm ;
Testen (Password ist das PWD vom User C:
sqlplus cman_tdm[gpipperr]@CMAN2_GPIDB23c
Hier über eine TNS Alias der bereits auf den CMAN zeigt und die Session für den Anwender tunnelt, siehe [[dba:sqlnet_cman_connection_manager_21c|CMAN Grundlagen Artikel]].
=== Datenbank registieren ===
In meinen Fall hat der CMAN die IP-Adresse 10.10.10.96.
Als sys / as sysdba ab der CDB anmelden:
ALTER system SET remote_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.10.96)(PORT = 1999))' scope=both;
-- neu anmelden mit:
ALTER system register;
=== Wallet mit dem User Credentials anlegen ===
mkstore -createCredential
mkdir /opt/oracle/wallet
# Wallet anlegen, PWD merken und aufschreiben!!
mkstore -wrl /opt/oracle/wallet/wallet-cman-tdm -create
# User PWD für den Service hinterlegen
mkstore -wrl /opt/oracle/wallet/wallet-cman-tdm -createCredential freedb1 cman_tdm "SecretPWD2023"
Falls auf dem DB Host angelegt, Wallet auf den CMAN Server kopieren:
scp -r wallet-cman-tdm/ 10.10.10.96:/opt/oracle/wallet
=== CMAN konfigurieren ===
Template:
cman1 = (configuration=
(address=(protocol=tcp)(host=)(port=))
(parameter_list =
(tdm=true)
(tdm_threading_mode=)
(tdm_shared_threads_min=5)
(tdm_shared_threads_max=20)
(max_connections=50)
(idle_timeout=0)
(registration_invited_nodes = )
...
(max_gateway_processes=8)
(min_gateway_processes=3)
...
)
(rule_list=
(rule=
(src=*)(dst=*)(srv=*)(act=accept)
(action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
11 TECHNICAL BRIEF / An Oracle Database connection proxy for scalable and highly available applications
) )
)
wallet_location = (source = (method = file) (method_data = (directory="")))
sqlnet.wallet_override = true
Daraus ergibt sich für meine Umgebung:
cman_gpi =
(configuration=
(address= (protocol=tcp)(host=cman21c.pipperr.local)(port=1999))
(parameter_list =
(tdm=true)
(tdm_threading_mode=dedicated)
(tdm_shared_threads_min=5)
(tdm_shared_threads_max=20)
(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)
(VALID_NODE_CHECKING_REGISTRATION=2)
(REGISTRATION_INVITED_NODES=10.10.10.*)
(USE_SERVICE_AS_TNSNAMES_ALIAS=ON)
(USE_SID_AS_SERVICE=ON)
(ENABLE_IP_FORWARDING=TRUE)
)
(rule_list=
(rule=
(src=10.10.10.1/24)(dst=*)(srv=*)(act=accept)
(action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
)
(
rule=
(src=cman21c)(dst=127.0.0.1)(srv=cmon)(act=accept)
)
(
rule=
(src=cman21c)(dst=*)(srv=cmon)(act=accept)
)
)
)
wallet_location = (source = (method = file) (method_data = (directory="/opt/oracle/wallet/wallet-cman-tdm")))
sqlnet.wallet_override = true
cman stoppen und starten:
**als Oracle user**
cmctl
CMCTL> administer cman_gpi
CMCTL> shutdown
CMCTL> startup
CMCTL> show tdm
ax Call Wait Time : 30
Max Txn Call Wait Time : 30
Min Shared Threads : 5
Max Shared Threads : 20
Threading Mode : Dedicated
#
# Prüfe ob die DB sich auch angemeldet hat!!!
#
CMCTL>show service
..
Service "freedb1" has 1 instance(s).
Instance "FREE", status READY, has 1 handler(s) for this service...
..
#
#
# falls nicht auf der Ziel Datenbank mit sys an der CDB anmelden
# und
# alter system register;
=== Client konfigurieren und testen ===
tnsnames.ora TNS-Alias hinterlegen
CMAN2_GPIDB23c =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.96)(PORT = 1999))
(CONNECT_DATA =
(SERVICE_NAME = FREEDB1)
)
)
Anmelden OHNE Proxy Connect:
C:\oracle\product\21\instantclient_21_11\sqlplus gpipperr@CMAN2_GPIDB23c
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Nov 7 20:08:41 2023
Version 21.11.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0
connected via Oracle Connection Manager in Traffic Director mode 21.12.0.0.0
GPIPPERR@CMAN2_GPIDB23c-oracledb23c01>show user
USER is "GPIPPERR"
GPIPPERR@CMAN2_GPIDB23c-oracledb23c01>SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM dual;
SYS_CONTEXT('USERENV','PROXY_USER')
------------------------------------
CMAN_TDM
GPIPPERR@CMAN2_GPIDB23c-oracledb23c01>SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual;
SYS_CONTEXT('USERENV','IP_ADDRESS')
--------------------------------------
10.10.10.96
Auf den Text **"connected via Oracle Connection Manager in Traffic Director mode 21.12.0.0.0"** achten!
IP Adresse ist die des CMAN!
----
----
===Und schon hat sich der DBA ausgesperrt! ===
"ORA-28725: invalid CMAN in Traffic Director mode configuration"
und
"ORA-12692: functionality (Logon as SYSDBA) not supported by Oracle Connection
Manager in Traffic Director mode"
sys@CMAN_GPIDB23c as sysdba
ORA-12692: functionality (Logon as SYSDBA) not supported by Oracle Connection
Manager in Traffic Director mode
system@CMAN_GPIDB23c
..
ORA-28725: invalid CMAN in Traffic Director mode configuration
..
Lösung für System ist dann genau einfach:
ALTER USER system GRANT CONNECT through cman_tdm ;
----
==== Proxy User über TDM ====
Zu Proxy User siehe [[dba:proxy_connect|Oracle User Proxy Connection verwenden]]
Auch ein Proxy User kann sich auch über TDM CAM Mode anmelden, aber die ursprüngliche Information, wer eigentlich angemeldet ist geht verloren.
=== Test Case ===
HR User anlege und granten:
create user hr identified by gpi;
create user hr identified by gpi;
ALTER USER HR GRANT CONNECT THROUGH gpipperr;
Auf der lokalen Maschine kann sich nun der User "gpipper" an HR anmelden und bleibt der Proxy User:
sqlplus gpipperr[HR]@//localhost:1521/freedb1
HR@//localhost:1521/freedb1-oracledb23c01>show user
USER is "HR"
HR@//localhost:1521/freedb1-oracledb23c01>SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM dual;
SYS_CONTEXT('USERENV','PROXY_USER')
---------------
GPIPPERR
So ist da die Idee dahinter !
Jezt über den CMAN:
sqlplus gpipperr[HR]@CMAN_GPIDB23c
..
ORA-28725: invalid CMAN in Traffic Director mode configuration
..
Rechte richtig vergeben:
sqlplus system@CMAN_GPIDB23c
ALTER USER HR GRANT CONNECT through cman_tdm ;
Testen:
sqlplus gpipperr[HR]@CMAN2_GPIDB23c
Connected to:
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0
connected via Oracle Connection Manager in Traffic Director mode 21.12.0.0.0
HR@CMAN2_GPIDB23c-oracledb23c01>show user
USER is "HR"
HR@CMAN2_GPIDB23c-oracledb23c01>SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM dual;
SYS_CONTEXT('USERENV','PROXY_USER')
---------------
CMAN_TDM
D.h. meine Proxy User Information ist nun nicht mehr so ganz richtig, der ursprüngliche User ist damit verschwunden!
Das kann auf das Auditing / Logging so einige unangenehme Überraschungen bedeuten!
----
==== Quellen ====
Oracle:
* https://download.oracle.com/ocomdocs/global/CMAN_TDM_Oracle_DB_Connection_Proxy_for_scalable_apps.pdf
Blogs:
* https://blogs.oracle.com/opal/post/connecting-cman-traffic-director-mode-to-an-oracle-cloud-autonomous-database
* https://de.slideshare.net/ludovicocaldara/long-live-to-cman
* http://www.nocoug.org/download/2020-05/NoCOUG_202005_Hallas_Maintaining_Availability_and_Restoring_Performance.pdf