=====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