mTLS를 사용하여 Python 애플리케이션 연결

적용 대상: 적용 가능 Exadata Cloud@Customer만 해당

mTLS를 사용하여 자율운영 AI 데이터베이스 인스턴스에 Python 애플리케이션을 연결할 수 있습니다.

Python 응용 프로그램을 mTLS와 연결하면 인증 및 암호화를 위한 향상된 보안이 제공되고 클라이언트 자격 증명을 사용하여 보안이 적용됩니다(사용자 이름과 암호 제공).

python-oracledb 드라이버의 기본 "Thin 모드"는 Oracle Database에 직접 연결됩니다. 드라이버는 선택적으로 일부 추가 기능을 위해 Oracle Client 라이브러리 "Thick mode"를 사용할 수 있습니다. Oracle Client 라이브러리는 Oracle Instant Client, 전체 Oracle Client 또는 Oracle Database 설치에서 가져올 수 있습니다.

다음 단계에 따라 mTLS를 사용하여 자율운영 AI 데이터베이스 인스턴스에 Python 애플리케이션을 접속합니다.

  1. Python 및 python-oracledb 드라이버 설치
  2. 보안 인증서(Oracle Wallet) 획득 및 네트워크 연결 활성화
  3. Perform this step if you only want to connect in Thin mode: Run Python Application with python-oracledb Thin Mode (mTLS)
  4. Thick 모드로 연결하려면 다음 단계를 수행하십시오. Run Python Application with python-oracledb Thick Mode (mTLS)

Python 및 python-oracledb 드라이버 설치

Python 애플리케이션에서 자율운영 AI 데이터베이스에 연결하려면 Python 및 python-oracledb 드라이버를 설치합니다.

  1. 아직 사용할 수 없는 경우 Python 3을 설치합니다.

    사용하는 Python 버전은 클라이언트측 OS 및 하드웨어에 따라 다릅니다. 예를 들어 Windows, Linux, macOS 등이 있습니다.

    주: Oracle은 Python 및 python-oracledb 드라이버 릴리스를 최신 상태로 유지할 것을 권장합니다.

  2. PyPI에서 python-oracledb 드라이버를 설치합니다.

    python-oracledb 드라이버는 Python 프로그램이 Oracle Database에 연결할 수 있는 Python 프로그래밍 언어 확장 모듈입니다. python-oracledb 드라이버는 인기 있는 cx_Oracle 드라이버의 이름이 바뀐 새 주 릴리스입니다.

    지원되는 python-oracledb 드라이버 버전: python-oracledb 1.0 이상

    다음 명령을 실행하여 python을 업그레이드합니다.

     python -m pip install oracledb --upgrade
    

    다음과 유사한 출력이 표시됩니다.

     Collecting oracledb
       Downloading oracledb-1.0.3-cp310-cp310-win_amd64.whl (1.0 MB)
    
          ---------------------------------------- 1.0/1.0 MB 1.8 MB/s eta 0:00:00
     Collecting cryptography>=3.4
       Downloading cryptography-37.0.4-cp36-abi3-win_amd64.whl (2.4 MB)
    
          ---------------------------------------- 2.4/2.4 MB 3.5 MB/s eta 0:00:00
     Collecting cffi>=1.12
       Downloading cffi-1.15.1-cp310-cp310-win_amd64.whl (179 kB)
    
          ---------------------------------------- 179.1/179.1 kB 5.4 MB/s eta 0:00:00
     Collecting pycparser
       Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
    
          ---------------------------------------- 118.7/118.7 kB 7.2 MB/s eta 0:00:00
     Installing collected packages: pycparser, cffi, cryptography, oracledb
     Successfully installed cffi-1.15.1 cryptography-37.0.4 oracledb-1.0.3 pycparser-2.21
    

    python-oracledb 설치 참고 사항:

    • 프록시 뒤에 있는 경우 --proxy 옵션을 사용하여 명령에 프록시 서버를 추가합니다. 예:

      python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80
      
    • 시스템 디렉토리에 쓸 수 있는 권한이 없는 경우 --user 옵션을 포함합니다. 예:

      python -m pip install oracledb --upgrade --user
      
    • 사용 중인 플랫폼에 바이너리 패키지를 사용할 수 없는 경우 pip를 실행하면 소스 패키지가 대신 다운로드됩니다. 소스가 컴파일되고 결과 바이너리가 설치됩니다.

    추가 옵션 및 팁은 Installing python-oracledb를 참조하십시오.

  3. python-oracledb 드라이버를 Thick 모드에서 사용하려면 Oracle Client 소프트웨어를 설치합니다.

    기본적으로 python-oracledb는 Oracle Database에 직접 연결되는 Thin 모드로 실행됩니다. 씬 모드에는 Oracle Client 라이브러리가 필요하지 않습니다. 그러나 python-oracledb가 Thick 모드에서 실행되는 경우 일부 추가 기능을 사용할 수 있습니다.

    Note: See Oracle Database Features Supported by python-oracledb for information on supported features in python-oracledb Thin and Thick modes. 자율운영 AI 데이터베이스에서 이 링크에 표시된 기능 중 일부를 사용할 수 있는 것은 아닙니다.

    Python-oracledb는 Oracle Instant 클라이언트 라이브러리 또는 Oracle Database 클라이언트 라이브러리를 사용하고 Python 코드에서 oracledb.init_oracle_client()을 호출할 때 Thick 모드를 사용합니다.

    Oracle 클라이언트 소프트웨어를 설치할 때 다음과 같이 mTLS 및 TLS 연결에 필요한 최소 버전에 차이가 있습니다.

    • mTLS(상호 TLS) 연결:

      • 데이터베이스가 원격 컴퓨터에 있는 경우 운영 체제 아키텍처에 맞는 무료 Oracle Instant Client 'Basic' 또는 'Basic Light' 패키지를 다운로드하십시오. 지원되는 버전 Oracle Instant Client: 18.19 이상, 19.2 이상 또는 21(기본 릴리스 이상)을 사용합니다.

      • Alternatively, you can use the Full Oracle Database client libraries when they are available on your system (including Full Oracle Database Client: Oracle Database Client: 18.19 (or later), 19.2 (or later), or 21 (base release or later).

    • TLS 접속: 다음 클라이언트 버전을 사용 중인 경우 OCI(Oracle Call Interface) 클라이언트는 TLS 인증을 지원합니다.

      • Oracle Instant Client/Oracle Database Client 19.14 이상 및 21.5 이상 - 모든 플랫폼

      • 또는 Full Oracle Database Client 19.14(또는 이후 버전) 및 21.5(또는 이후 버전)를 포함하여 시스템에서 전체 Oracle Database 클라이언트 라이브러리를 사용할 수 있을 때 사용할 수 있습니다.

보안 인증서(Oracle Wallet) 획득 및 네트워크 연결 활성화

자율운영 AI 데이터베이스 인스턴스에 접속하기 위한 클라이언트 보안 인증서를 얻습니다.

  1. 자율운영 AI 데이터베이스 인스턴스에서 전자 지갑 파일을 다운로드하여 자율운영 AI 데이터베이스 인스턴스 액세스에 필요한 클라이언트 보안 인증서 및 네트워크 구성 설정이 포함된 zip 파일을 가져옵니다.

    클라이언트 보안 인증서(wallet.zip 파일)를 얻습니다.

    • ADMIN 사용자: Oracle Cloud Infrastructure 콘솔에서 데이터베이스 연결을 누릅니다. 클라이언트 자격 증명 다운로드(전자 지갑)를 참조하십시오.

    • 기타 사용자(비관리자): 자율운영 AI 데이터베이스 인스턴스에 대한 관리자로부터 Oracle Wallet을 얻습니다.

      주: 무단 데이터베이스 액세스를 방지하기 위해 wallet.zip 파일 및 해당 콘텐츠를 보호합니다.

  2. 클라이언트 인증서 파일(wallet.zip)의 압축을 풉니다.

python-oracledb Thin Mode(mTLS)로 Python 애플리케이션 실행

기본적으로 python-oracledb는 Thin 모드를 사용하여 자율운영 AI 데이터베이스 인스턴스에 직접 연결합니다.

Thin 모드에서는 전자 지갑 zip의 두 파일만 필요합니다.

Thin 모드로 연결하려면 다음을 수행합니다.

  1. tnsnames.oraewallet.pem 파일을 시스템의 위치로 이동합니다.

    Linux

    예를 들어, Linux에서는 다음과 같습니다.

     /opt/OracleCloud/MYDB
    

    Windows

    예를 들어, Windows에서 다음과 같이 입력합니다.

     C:\opt\OracleCloud\MYDB
    
  2. Python 애플리케이션에서 다음 연결 매개변수를 설정하여 자율운영 AI 데이터베이스 인스턴스에 접속합니다.

    • config_dir: tnsnames.ora를 포함하는 디렉토리를 지정합니다.

    • dsn: tnsnames.ora 파일에서 원하는 네트워크 별칭을 지정하는 데 사용됩니다.

    • password: 데이터베이스 사용자 비밀번호를 지정합니다.

    • user: 데이터베이스 사용자를 지정합니다.

    • wallet_location: PEM 파일(ewallet.pem)을 포함하는 디렉토리를 지정합니다.

    • wallet_password: PEM 파일(ewallet.pem)에 대한 비밀번호를 지정합니다. wallet.zip 파일을 다운로드할 때 이 비밀번호를 설정합니다.

    Linux

    예를 들어, Linux에서 oracledb.connectdb2024_low 네트워크 서비스 이름으로 사용하여 ADMIN 사용자로 접속합니다(서비스 이름은 tnsnames.ora에 있음).

     connection=oracledb.connect(
          config_dir="/opt/OracleCloud/MYDB",
          user="admin",
          password=password,
          dsn="db2024_low",
          wallet_location="/opt/OracleCloud/MYDB",
          wallet_password=wallet_pw)
    

    Windows

    예를 들어, Windows에서 oracledb.connectdb2024_low 네트워크 서비스 이름으로 사용하여 ADMIN 사용자로 연결하려면 다음을 수행합니다(서비스 이름은 tnsnames.ora에 있음).

     connection=oracledb.connect(
          config_dir=r"C:\opt\OracleCloud\MYDB",
          user="admin",
          password=password,
          dsn="db2024_low",
          wallet_location=r"C:\opt\OracleCloud\MYDB",
          wallet_password=wallet_pw)
    

    '원시' 문자열 r"..."를 사용하면 백슬래시가 디렉토리 구분 기호로 처리됩니다.

    이 예제에 표시된 것처럼 wallet_locationconfig_dir는 동일한 디렉토리로 설정되고 이 디렉토리는 tnsnames.oraewallet.pem를 포함합니다. 이러한 파일에 대해 동일한 디렉토리를 지정할 필요는 없습니다.

방화벽 뒤에 있는 경우 연결 기술자에서 HTTPS_PROXY를 사용하거나 연결 속성을 설정하여 프록시를 통해 TLS/SSL 연결을 터널링할 수 있습니다. 성공한 연결은 특정 프록시 구성에 따라 달라집니다. Oracle은 성능에 영향을 줄 수 있으므로 운용 환경에서 proxy 사용을 권장하지 않습니다. 자세한 내용은 Oracle Database 19c Database Net Services ReferenceHTTPS_PROXY 또는 Oracle Database 26ai Database Net Services Reference를 참조하십시오.

Thin 모드에서는 https_proxyhttp_proxy_port 매개변수를 추가하여 프록시를 지정할 수 있습니다.

예를 들어, Linux의 경우 다음과 같습니다.

connection=oracledb.connect(
     config_dir="/opt/OracleCloud/MYDB",
     user="admin",
     password=password,
     dsn="db2024_low",
     wallet_location="/opt/OracleCloud/MYDB",
     wallet_password=wallet_pw,
     https_proxy='myproxy.example.com',
     https_proxy_port=80)

예를 들어, Windows의 경우 다음과 같습니다.

connection=oracledb.connect(
     config_dir=r"C:\opt\OracleCloud\MYDB",
     user="admin",
     password=password,
     dsn="db2024_low",
     wallet_location=r"C:\opt\OracleCloud\MYDB",
     wallet_password=wallet_pw,
     https_proxy='myproxy.example.com',
     https_proxy_port=80)

python-oracledb Thick Mode(mTLS)로 Python 애플리케이션 실행

기본적으로 python-oracledb는 Oracle Database에 직접 연결되는 Thin 모드로 실행됩니다. 드라이버가 Thick 모드로 실행될 때 추가 python-oracledb 기능을 사용할 수 있습니다.

주: Thick 모드에서는 Python을 실행할 때 Oracle Client 라이브러리가 설치되어야 합니다. 또한 Python 코드에서 oracledb.init_oracle_client()를 호출해야 합니다.

Thick 모드에서는 전자 지갑 zip 파일의 다음 세 파일이 필요합니다.

두께 모드에서 연결하려면 다음을 수행합니다.

  1. tnsnames.ora, sqlnet.oracwallet.sso 파일을 시스템에 배치합니다.

    다음 두 옵션 중 하나를 사용하여 시스템에 해당 파일을 배치합니다.

    • Instant Client를 사용 중인 경우 Instant Client 디렉토리 아래의 network/admin 하위 디렉토리 계층으로 파일을 이동합니다. 예를 들어 아키텍처 또는 클라이언트 시스템 및 Instant Client를 설치한 위치에 따라 파일은 다음과 같은 디렉토리 위치에 있어야 합니다.

      /home/myuser/instantclient_19_21/network/admin
      

      또는

      /usr/lib/oracle/19.21/client64/lib/network/admin
      

      예를 들어, Linux에서 전체 Oracle Client를 사용 중인 경우 파일을 $ORACLE_HOME/network/admin로 이동합니다.

    • 또는 액세스 가능한 디렉토리로 파일을 이동합니다.

      예를 들어, Linux에서 파일을 /opt/OracleCloud/MYDB 디렉토리로 이동하고 sqlnet.ora를 편집하여 전자 지갑 위치 디렉토리를 cwallet.sso 파일이 포함된 디렉토리로 변경합니다.

      예를 들어, Linux에서 다음과 같이 sqlnet.ora를 편집합니다.

      WALLET_LOCATION = (SOURCE = (METHOD=file) (METHOD_DATA = (DIRECTORY="/opt/OracleCloud/MYDB")))
      SSL_SERVER_DN_MATCH=yes
      

      구성 파일이 기본 위치에 없는 경우 응용 프로그램은 oracledb.init_oracle_client() 호출의 config_dir 매개변수를 사용하거나 TNS_ADMIN 환경 변수를 설정하여 파일이 있는 위치를 나타내야 합니다.

      주: 이러한 설정은 필요하지 않으며 network/admin 디렉토리에 모든 구성 파일을 배치하는 경우 sqlnet.ora를 편집할 필요가 없습니다.

  2. Python 애플리케이션에서 자율운영 AI 데이터베이스 인스턴스에 접속하기 위해 다음 초기화 및 접속 매개변수를 설정합니다.

    • config_dir: 구성 파일을 배치할 때 구성 디렉토리를 지정합니다. 구성 파일이 인스턴트 클라이언트 구성 디렉토리 network/admin 외부의 디렉토리에 있는 경우에만 필요합니다.

    • dsn: tnsnames.ora 파일에서 원하는 네트워크 별칭을 지정합니다.

    • password: 데이터베이스 사용자 비밀번호를 지정합니다.

    • user: 데이터베이스 사용자를 지정합니다.

    구성 파일 배치의 첫번째 경우 dsn 매개변수를 tnsnames.ora에서 원하는 네트워크 별칭으로 설정하여 데이터베이스 인증서를 사용하여 자율운영 AI 데이터베이스 인스턴스에 접속합니다.

    예를 들어, oracledb.init_oracle_client를 사용하여 ADMIN 사용자로 연결하고 db2024_low 네트워크 서비스 이름(여기서 서비스 이름은 tnsnames.ora에 있음)에 연결하려면 다음과 같이 하십시오.

     oracledb.init_oracle_client()
        connection=oracledb.connect(
            user="admin",
            password=password,
            dsn="db2024_low")
    

    구성 파일이 인스턴트 클라이언트 구성 디렉토리 외부의 디렉토리에 있는 경우 oracledb.init_oracle_client를 호출할 때 config_dir 매개변수를 설정합니다.

    Linux

    예를 들어, Linux에서 db2024_low 네트워크 서비스 이름을 사용하여 ADMIN 사용자로 연결하려면 다음을 수행합니다.

     oracledb.init_oracle_client(config_dir="/opt/OracleCloud/MYDB")
        connection=oracledb.connect(
           user="admin",
           password=password,
           dsn="db2024_low")
    

    Windows

    예를 들어, Windows에서는 db2024_low 네트워크 서비스 이름을 사용하여 ADMIN 사용자로 연결합니다.

     oracledb.init_oracle_client(config_dir=r"C:\opt\OracleCloud\MYDB")
        connection=oracledb.connect(
           user="admin",
           password=password,
           dsn="db2024_low")
    

    '원시' 문자열 r"..."를 사용하면 백슬래시가 디렉토리 구분 기호로 처리됩니다.

방화벽 뒤에 있는 경우 연결 기술자에서 HTTPS_PROXY를 사용하거나 연결 속성을 설정하여 프록시를 통해 TLS/SSL 연결을 터널링할 수 있습니다. 성공한 연결은 특정 프록시 구성에 따라 달라집니다. Oracle은 성능에 영향을 줄 수 있으므로 운용 환경에서 proxy 사용을 권장하지 않습니다. 자세한 내용은 Oracle Database 19c Database Net Services ReferenceHTTPS_PROXY 또는 Oracle Database 26ai Database Net Services Reference를 참조하십시오.

Thick 모드에서는 sqlnet.ora 파일을 편집하고 다음 행을 추가하여 proxy를 지정할 수 있습니다.

SQLNET.USE_HTTPS_PROXY=on

또한 tnsnames.ora를 편집하고 사용할 서비스 이름의 접속 기술자 주소 목록에 HTTPS_PROXY 프록시 이름 및 HTTPS_PROXY_PORT 포트를 추가합니다.

예:

mydb_high=(description=
(address=(https_proxy=myproxy.example.com)
(https_proxy_port=80)
(protocol=tcps)(port=1522)(host=...)

Thick 모드에 대한 자세한 내용은 python-oracledb Thick 모드 사용을 참조하십시오.

관련 콘텐츠

전용 자율운영 AI 데이터베이스에 접속 정보