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 애플리케이션을 접속합니다.
- Python 및 python-oracledb 드라이버 설치
- 보안 인증서(Oracle Wallet) 획득 및 네트워크 연결 활성화
- Perform this step if you only want to connect in Thin mode: Run Python Application with python-oracledb Thin Mode (mTLS)
- Thick 모드로 연결하려면 다음 단계를 수행하십시오. Run Python Application with python-oracledb Thick Mode (mTLS)
Python 및 python-oracledb 드라이버 설치
Python 애플리케이션에서 자율운영 AI 데이터베이스에 연결하려면 Python 및 python-oracledb 드라이버를 설치합니다.
-
아직 사용할 수 없는 경우 Python 3을 설치합니다.
사용하는 Python 버전은 클라이언트측 OS 및 하드웨어에 따라 다릅니다. 예를 들어 Windows, Linux, macOS 등이 있습니다.
주: Oracle은 Python 및 python-oracledb 드라이버 릴리스를 최신 상태로 유지할 것을 권장합니다.
-
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.21python-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를 참조하십시오.
-
-
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 데이터베이스 인스턴스에 접속하기 위한 클라이언트 보안 인증서를 얻습니다.
-
자율운영 AI 데이터베이스 인스턴스에서 전자 지갑 파일을 다운로드하여 자율운영 AI 데이터베이스 인스턴스 액세스에 필요한 클라이언트 보안 인증서 및 네트워크 구성 설정이 포함된 zip 파일을 가져옵니다.
클라이언트 보안 인증서(
wallet.zip파일)를 얻습니다.-
ADMIN 사용자: Oracle Cloud Infrastructure 콘솔에서 데이터베이스 연결을 누릅니다. 클라이언트 자격 증명 다운로드(전자 지갑)를 참조하십시오.
-
기타 사용자(비관리자): 자율운영 AI 데이터베이스 인스턴스에 대한 관리자로부터 Oracle Wallet을 얻습니다.
주: 무단 데이터베이스 액세스를 방지하기 위해
wallet.zip파일 및 해당 콘텐츠를 보호합니다.
-
-
클라이언트 인증서 파일(
wallet.zip)의 압축을 풉니다.
python-oracledb Thin Mode(mTLS)로 Python 애플리케이션 실행
기본적으로 python-oracledb는 Thin 모드를 사용하여 자율운영 AI 데이터베이스 인스턴스에 직접 연결합니다.
Thin 모드에서는 전자 지갑 zip의 두 파일만 필요합니다.
-
tnsnames.ora: 애플리케이션 접속 문자열에 사용되는 네트 서비스 이름을 데이터베이스 서비스에 매핑합니다. -
ewallet.pem: Thin 모드에서 SSL/TLS 연결을 사용으로 설정합니다.
Thin 모드로 연결하려면 다음을 수행합니다.
-
tnsnames.ora및ewallet.pem파일을 시스템의 위치로 이동합니다.Linux
예를 들어, Linux에서는 다음과 같습니다.
/opt/OracleCloud/MYDBWindows
예를 들어, Windows에서 다음과 같이 입력합니다.
C:\opt\OracleCloud\MYDB -
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.connect를db2024_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.connect를db2024_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_location및config_dir는 동일한 디렉토리로 설정되고 이 디렉토리는tnsnames.ora및ewallet.pem를 포함합니다. 이러한 파일에 대해 동일한 디렉토리를 지정할 필요는 없습니다. -
방화벽 뒤에 있는 경우 연결 기술자에서 HTTPS_PROXY를 사용하거나 연결 속성을 설정하여 프록시를 통해 TLS/SSL 연결을 터널링할 수 있습니다. 성공한 연결은 특정 프록시 구성에 따라 달라집니다. Oracle은 성능에 영향을 줄 수 있으므로 운용 환경에서 proxy 사용을 권장하지 않습니다. 자세한 내용은 Oracle Database 19c Database Net Services Reference의 HTTPS_PROXY 또는 Oracle Database 26ai Database Net Services Reference를 참조하십시오.
Thin 모드에서는 https_proxy 및 http_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 파일의 다음 세 파일이 필요합니다.
-
tnsnames.ora: 응용 프로그램 연결 문자열에 사용되는 네트 서비스 이름을 포함하며 문자열을 데이터베이스 서비스에 매핑합니다. -
sqlnet.ora: SQL*Net 클라이언트측 구성을 지정합니다. -
cwallet.sso: 자동 열린 SSO 전자 지갑을 포함합니다.
두께 모드에서 연결하려면 다음을 수행합니다.
-
tnsnames.ora,sqlnet.ora및cwallet.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를 편집할 필요가 없습니다.
-
-
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 Reference의 HTTPS_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 모드 사용을 참조하십시오.