Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:sqlnet_cman_connection_manager_tdm_21c

Oracle 21c -Der CMAN,Oracle Connection Manager, im Traffic Director Mode (TDM)

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 ⇒ 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 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 <DB Service Name> <DB Proxy User> <DB Proxy User’s Password>

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=<CMAN_HOST>)(port=<CMAN_PORT>))
 (parameter_list =
 (tdm=true)
 (tdm_threading_mode=<shared||dedicated>)
 (tdm_shared_threads_min=5)
 (tdm_shared_threads_max=20)
 (max_connections=50)
 (idle_timeout=0)
 (registration_invited_nodes = <DB_HOST_NAME_OR_IP_ADDRESS>)
 ...
 (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="<wallet_location>")))
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 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

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
dba/sqlnet_cman_connection_manager_tdm_21c.txt · Zuletzt geändert: 2023/11/08 17:40 von gpipperr