주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
Microsoft Entra ID로 Oracle Database 23ai 인증
소개
Oracle Database를 Microsoft Entra ID(이전의 Microsoft Azure Active Directory)와 통합하여 암호 없이 안전하게 데이터베이스에 액세스할 수 있습니다. 이 설정을 사용하면 사용자와 서비스가 SSO(Single Sign-On)를 통해 Microsoft Entra ID 자격 증명을 사용하여 데이터베이스에 연결할 수 있습니다.
인증은 Microsoft Entra ID에서 발행한 OAuth2 액세스 토큰을 통해 처리됩니다. 사용자의 ID 및 액세스 세부정보를 포함하는 이 토큰은 Oracle Database로 전달됩니다. 데이터베이스 클라이언트는 액세스를 허용하기 전에 토큰의 형식과 만료를 검증하여 안전하고 간소화된 연결 프로세스를 보장합니다.
이 기능이 필요한 이유
보안 우선 순위가 점차 높아짐에 따라 민감한 데이터에 대한 액세스 관리가 중요해지고 있습니다. Oracle Database는 Microsoft Entra ID와 공동으로 암호 없이 보안 인증을 수행할 수 있으며, 원활하고 확장 가능하며 강력한 액세스 제어를 위해 최신 ID 관리 시스템을 활용합니다. 이 통합은 Oracle Autonomous Database, Oracle Exadata, Oracle Base Database Service 등 다양한 Oracle 배포를 지원하여 다양한 환경에서 일관되고 안전한 액세스를 보장합니다.
데이터베이스 클라이언트 및 툴
Microsoft Entra ID 토큰을 지원하는 애플리케이션 및 툴은 Microsoft Entra ID를 통해 사용자를 직접 인증하고 클라이언트 API를 통해 데이터베이스 액세스 토큰을 Oracle Database 인스턴스에 전달할 수 있습니다. 파일에 저장된 Microsoft Entra ID 토큰을 사용하도록 기존 데이터베이스 도구(예: SQL*Plus
)를 구성할 수 있습니다. 토큰은 Microsoft PowerShell, Azure CLI와 같은 도우미 도구 또는 MSAL(Microsoft Authentication Library)과 같은 라이브러리를 사용하여 검색하고 지정된 파일 위치에 저장할 수 있습니다. 나중에 연결을 설정할 때 SQL*Plus가 이 토큰을 참조합니다.
주: 이 자습서에서는 MSAL을 활용하여 보안 토큰을 획득하는 Python 스크립트를 사용합니다. 자세한 내용은 Overview of the Microsoft Authentication Library (MSAL)를 참조하십시오.
이 사용지침서에서는 TLS 설정을 포함하여 Oracle Base Database 23ai에 대한 Microsoft Entra ID 인증을 구성하는 과정을 안내합니다. 온프레미스, Exadata, DBaaS 또는 자율운영 데이터베이스 유형에 대한 설명서를 참조하십시오. TLS는 Autonomous Database용으로 사전 구성되어 있으므로 해당 단계를 건너뛸 수 있습니다.
대상
Oracle Database 관리자 및 OCI IAM(Oracle Cloud Infrastructure Identity and Access Management) 관리자.
목표
-
데이터베이스에 대해 TLS(전송 계층 보안)를 설정합니다.
-
Microsoft Azure에 데이터베이스 서버를 등록합니다.
-
Microsoft Azure에 데이터베이스 클라이언트를 등록합니다.
-
Database for Microsoft Azure 통합을 구성합니다.
-
도우미 스크립트를 사용하여 클라이언트를 구성합니다.
-
SQL*Plus를 사용하여 연결을 테스트합니다.
필요 조건
-
관리 권한이 있는 Microsoft Azure 계정입니다.
-
Oracle Base Database 서비스의 Oracle Database 23ai
-
네트워크 설정:
-
Oracle Database 서버는 발행된 토큰의 신뢰성 및 유효성을 검증하고 신뢰할 수 있는 권한에 의해 발행되었는지 확인하기 위해 Microsoft Entra ID 공개 키를 요청할 수 있어야 합니다.
-
네트워크 연결 설정에 따라 적절한 경로 지정 및 보안 규칙을 구성해야 합니다. NAT 게이트웨이는 아웃바운드 트래픽을 라우팅하는 데 사용할 수 있으며 송신 규칙은 포트 443을 통해 Microsoft Azure 공용 IP 범위로만 제한되어야 합니다.
-
-
TLS 구성:
- Microsoft Entra ID 토큰을 데이터베이스 클라이언트에서 데이터베이스 서버로 전송할 때는 TLS 연결을 설정해야 합니다. 이 자습서에서는 서버만 자체 인증을 위해 클라이언트에 인증서를 제공하는 단방향 TLS(자체 서명된 루트 인증서로 TLS 구성)를 설정합니다. 클라이언트가 서버에 대해 자신을 인증하기 위해 별도의 클라이언트 인증서를 가질 필요는 없습니다.
-
Oracle Linux에서 실행되는 Oracle 클라이언트 소프트웨어 23ai를 설정합니다.
-
MSAL 모듈을 사용하여 Python 3.6 이상을 설치합니다. Python 3.6이 작동하더라도 권장 버전은
3.7+
입니다.pip
를 사용하여 필요한 모듈을 설치합니다.
작업 1: Oracle Database 23ai에 대한 TLS 설정
작업 1.1: TLS 구성을 위한 OS(운영 체제) 준비
-
데이터베이스 서버에 로그인하고
root
유저로 전환하여 디렉토리를 설정합니다.[opc@db23aigrid ~]$ sudo su - [root@db23aigrid ~]# mkdir -p /etc/ORACLE/WALLETS/oracle [root@db23aigrid ~]# cd /etc/ [root@db23aigrid etc]# chown -R oracle:oinstall ORACLE/
-
oracle
사용자로 호스트 이름을 가져옵니다.[root@db23aigrid etc]# su - oracle [oracle@db23aigrid admin]$ hostname -f
샘플 출력:
db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com
-
데이터베이스에 접속.
[oracle@db23aigrid admin]$ sqlplus "/as sysdba"
-
전자 지갑 루트 디렉토리를 확인하십시오.
SQL> show parameter wallet_root;
샘플 출력:
NAME TYPE VALUE ---------- ------ ---------------------------------------------------- wallet_root string /opt/oracle/dcs/commonstore/wallets/DB23GRID_w54_iad
-
PDB(플러그인할 수 있는 데이터베이스) 이름 및 GUID를 확인합니다.
SQL> show pdbs;
샘플 출력:
CON_ID CON_NAME OPEN MODE RESTRICTED ----- -------- --------- ---------- 2 PDB$SEED READ ONLY NO 3 DB23GRIDPDB READ WRITE NO
SQL> select guid from v$containers where name = 'DB23GRIDPDB';
샘플 출력:
GUID -- ----------------------------- 32435DD0A1EC55xxx0639400000A7225
-
전자 지갑 및 인증서에 대한 로컬 디렉토리를 생성합니다.
[oracle@db23aigrid ~]$ mkdir -p /home/oracle/wallet_tls/certificates/rootCA [oracle@db23aigrid ~]$ mkdir -p /home/oracle/wallet_tls/certificates/db_wallet
-
PDB GUID를 사용하여 전자 지갑 루트 경로 아래에 데이터베이스 TLS 디렉토리를 생성합니다.
[oracle@db23aigrid ~]$ mkdir -p /opt/oracle/dcs/commonstore/wallets/DB23GRID_w54_iad/32435DDxxxxxx7E0639400000A7225/tls
-
TLS 관련 환경 변수로
.bashrc
를 업데이트합니다.[oracle@db23aigrid ~]$ vi ~/.bashrc
다음을 추가하고 환경에 따라 값을 조정합니다.
export DBUSR_SYSTEM=system export DBUSR_PWD=QAZxswedc123## # Wallet and Database Administrator (sys) password export ORA_TLS_DIR=/etc/ORACLE/WALLETS/oracle export TLS_DIR=/opt/oracle/dcs/commonstore/wallets/DB23GRID_w54_iad/32435DD0A1EC55E7E0639400000A7225/tls export ROOT_TLS_DIR=/home/oracle/wallet_tls/certificates/rootCA export DB_TLS_DIR=/home/oracle/wallet_tls/certificates/db_wallet export TLS_DN=CN=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com,O=oracle,L=Austin,ST=Texas,C=US export TLS_SAN=DNS:db23aigrid,DNS:db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com, IPV4Address:143.47.117.99
-
변경사항을 적용합니다.
[oracle@db23aigrid ~]$ . ~/.bashrc
작업 1.2: TLS 전자 지갑 및 인증서 구성
-
루트 전자 지갑(wallet)을 생성하고 구성합니다.
-
루트 전자 지갑을 생성합니다.
[oracle@db23aigrid ~]$ orapki wallet create -wallet ${ROOT_TLS_DIR} -pwd ${DBUSR_PWD} -auto_login
-
전자 지갑의 내용을 확인합니다. 내용이 비어 있어야 합니다.
[oracle@db23aigrid ~]$ orapki wallet display -wallet ${ROOT_TLS_DIR}
-
루트 CA 전자 지갑에 대한 자체 서명 인증서를 생성합니다.
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${ROOT_TLS_DIR} -dn $TLS_DN -keysize 2048 -sign_alg sha256 -self_signed -validity 3652 -pwd ${DBUSR_PWD} -addext_san $TLS_SAN
-
이제 디렉토리에
cwallet.sso
및ewallet.p12
파일이 있어야 합니다.ls -l ${ROOT_TLS_DIR}
-
전자 지갑의 내용을 봅니다. 전자 지갑에는 유저와 신뢰할 수 있는 인증서가 있어야 합니다.
orapki wallet display -wallet ${ROOT_TLS_DIR}
-
데이터베이스 전자 지갑 생성에 사용할 루트 CA 신뢰할 수 있는 인증서를 익스포트합니다.
[oracle@db23aigrid ~]$ orapki wallet export -wallet ${ROOT_TLS_DIR} -dn $TLS_DN -cert ${ROOT_TLS_DIR}/rootCA.crt -pwd ${DBUSR_PWD}
-
rootCA.crt
파일의 내용을 확인합니다.cat ${ROOT_TLS_DIR}/rootCA.crt
-
-
서버(데이터베이스) 전자 지갑(Wallet)을 생성하고 구성합니다.
-
데이터베이스 전자 지갑(wallet)을 생성합니다.
[oracle@db23aigrid ~]$ orapki wallet create -wallet ${DB_TLS_DIR} -pwd ${DBUSR_PWD} -auto_login
-
전자 지갑에 신뢰할 수 있는 루트 인증서를 추가합니다(인증서 관리자에서 가져오기).
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${DB_TLS_DIR} -trusted_cert -cert ${ROOT_TLS_DIR}/rootCA.crt -pwd ${DBUSR_PWD}
-
전자 지갑(wallet)에 전용(private) 키와 인증서 요청을 생성합니다.
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${DB_TLS_DIR} -keysize 2048 -dn $TLS_DN -pwd ${DBUSR_PWD}-addext_san $TLS_SAN
-
인증서 요청을 내보내서 서명합니다.
[oracle@db23aigrid ~]$ orapki wallet export -wallet ${DB_TLS_DIR} -dn $TLS_DN -request ${DB_TLS_DIR}/db23gridpdb.csr -pwd ${DBUSR_PWD}
-
전자 지갑의 콘텐츠를 표시합니다. Requested Certificates 아래에 항목이 있습니다.
orapki wallet display -wallet ${DB_TLS_DIR}
-
CSR(인증서 서명 요청) 파일의 내용을 봅니다.
cat ${DB_TLS_DIR}/db23gridpdb.csr
-
-
서버 인증서에 서명하여 가져옵니다.
-
자체 서명된 루트 전자 지갑을 사용하여 CSR에 서명합니다.
[oracle@db23aigrid ~]$ orapki cert create -wallet ${ROOT_TLS_DIR} -request ${DB_TLS_DIR}/db23gridpdb.csr -cert ${DB_TLS_DIR}/db23gridpdb-signed.crt -validity 3652 -sign_alg sha256 -pwd ${DBUSR_PWD}
-
서명된 서버 사용자 인증서를 확인합니다.
cat ${DB_TLS_DIR}/db23gridpdb-signed.crt
-
서명된 데이터베이스 서버 사용자 인증서를 데이터베이스 전자 지갑으로 임포트합니다.
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${DB_TLS_DIR} -user_cert -cert ${DB_TLS_DIR}/db23gridpdb-signed.crt -pwd ${DBUSR_PWD}
-
전자 지갑의 내용을 표시하고 데이터베이스 서버 사용자 인증서가 이제 User Certificates 아래에 표시되는지 확인합니다. 데이터베이스 서버 및 리스너에 사용할 전자 지갑(wallet)을 사용할 수 있도록 배치할 준비가 되었습니다.
orapki wallet display -wallet ${DB_TLS_DIR}
-
-
전자 지갑 파일을 배치합니다.
-
데이터베이스 서버 전자 지갑 파일을 복사합니다.
[oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/ewallet.p12 ${TLS_DIR} [oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/cwallet.sso ${TLS_DIR} [oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/ewallet.p12 ${ORA_TLS_DIR} [oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/cwallet.sso ${ORA_TLS_DIR}
-
인증서를 익스포트합니다.
[oracle@db23aigrid ~]$ orapki wallet export -wallet ${ROOT_TLS_DIR} -dn $TLS_DN -cert ${ROOT_TLS_DIR}/rootCA.crt -pwd ${DBUSR_PWD}
-
-
시스템 차원의 루트 CA를
root
사용자로 신뢰합니다.-
[root@db23ailvm etc]# cp -v /home/oracle/wallet_tls/certificates/rootCA/rootCA.crt /etc/pki/catrust/source/anchors/
명령을 실행합니다. -
[root@db23ailvm etc]# update-ca-trust extract
명령을 실행합니다. -
적절한 파일 권한을 설정합니다.
cd /etc/ORACLE/WALLETS/ chmod -R 755 oracle/
-
작업 1.3: TLS 통신에 대한 Oracle 구성
-
단방향 TLS에 대해
sqlnet.ora
를 편집하고 다음 행을 추가합니다.[oracle@db23aigrid ~]$ cd $ORACLE_HOME/network/admin [oracle@db23aigrid ~]$ vi sqlnet.ora
SSL_CLIENT_AUTHENTICATION = FALSE
-
tnsnames.ora
를 편집하고 TCP 및 TCPS에 대한 항목이 PDB 데이터베이스에 추가되었는지 확인합니다.환경에 따라 값을 조정합니다.
[oracle@db23aigrid ~]$ cd $ORACLE_HOME/network/admin [oracle@db23aigrid ~]$ vi tnsnames.ora
DB23GRIDPDB=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=db23aigrid)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com))) DB23GRIDPDB_TLS=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCPS)(HOST=db23aigrid)(PORT=1522))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com)))
작업 1.4: TLS로 리스너 구성
-
Oracle Grid Infrastructure를 사용 중인 경우 다음 단계를 수행하십시오.
-
다음 명령을 실행합니다.
sudo su - grid srvctl stop listener srvctl modify listener -p "TCP:1521/TCPS:1522" srvctl config listener | grep "End points"
-
listener.ora
파일을 편집합니다.$ vi listener.ora LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)) (ADDRESS=(PROTOCOL=TCP)(HOST=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)(PORT=1521)) (ADDRESS=(PROTOCOL=TCPS)(HOST=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)(PORT=1522)) ) ) SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION=(SOURCE=(METHOD=file) (METHOD_DATA=(DIRECTORY=/etc/ORACLE/WALLETS/oracle))) TRACE_LEVEL_LISTENER = support
-
리스너를 재시작합니다.
``` $ srvctl start listener ```
또는
-
-
Oracle Linux Volume Manager를 사용하는 경우 다음 단계를 수행합니다.
-
다음 명령을 실행합니다.
cd $ORACLE_HOME/network/admin lsnrctl stop
-
listener.ora
를 편집합니다.$ vi listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =db23ailvm.sub10121249210.dbsecvcn.oraclevcn.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = db23ailvm.sub10121249210.dbsecvcn.oraclevcn.com)(PORT = 1522)) (SECURITY=(WALLET_LOCATION=/home/oracle/wallet_tls/certificates/rootCA)) ) ) SSL_CLIENT_AUTHENTICATION = FALSE ADR_BASE_LISTENER = /u01/app/oracle/product/23.0.0
-
리스너를 재시작합니다.
lsnrctl start
-
작업 1.5: TLS 연결 검증
-
TCP(비TLS)를 테스트합니다.
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcp
-
TCPS 테스트(TLS 사용)
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB_TLS SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcps
작업 1.6: TLS에 대한 클라이언트 호스트 구성
주: 이 작업에 대한 필요 조건입니다.
Oracle Linux 8을 실행하는 OCI 컴퓨트 인스턴스입니다.
Linux용 Oracle Database 클라이언트 23ai입니다. 자세한 내용은 Oracle 23ai client installation을 참조하십시오.
데이터베이스 서버에서 인증서 파일을 복사합니다.
다음 단계에 따라 클라이언트 호스트를 구성합니다.
-
데이터베이스 서버에서 인증서 및 전자 지갑 파일을 복사합니다. 원하는 파일 전송 도구를 사용하여 이러한 파일을 데이터베이스 서버에서 클라이언트로 이동할 수 있습니다.
cd /home/oracle/wallet_tls/certificates/ tar -cvf rootCA.tar rootCA chmod 755 rootCA.tar cp rootCA.tar /tmp/
-
클라이언트 디렉토리를 설정합니다.
[opc@bastion-server8-8 ~]$ sudo su - oracle [oracle@bastion-server8-8 ~]$ mkdir wallet_db23aigrid_tls [oracle@bastion-server8-8 ~]$ mkdir -p network/admin [oracle@bastion-server8-8 ~]$ export TNS_ADMIN=/home/oracle/network/admin
-
인증서 및 전자 지갑 파일을 데이터베이스 서버에서 클라이언트 인스턴스로 전송합니다.
[oracle@bastion-server8-8 ~]$ cp rootCA.tar wallet_db23aigrid_tls / [oracle@bastion-server8-8 ~]$ cd wallet_db23aigrid_tls / [oracle@linuxclient23:~/wallet_db23aigrid_tls]$ cp /tmp/rootCA.tar
-
인증서 파일을 추출합니다.
[oracle@linuxclient23:~/wallet_db23aigrid_tls]$ tar -xvf rootCA.tar
-
tnsnames.ora
를 구성합니다.[oracle@bastion-server8-8 ~]$ cd ~/network/admin [oracle@linuxclient23:~/instantclient_23_7/network/admin]$ vi tnsnames.ora DB23GRIDPDB= (DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=143.47.117.99)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com))) DB23GRIDPDB_TLS=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCPS)(HOST=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)(PORT= 1522))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com)) (SECURITY = (SSL_SERVER_DN_MATCH=TRUE)))
-
sqlnet.ora
를 구성합니다.[oracle@linuxclient23:~/instantclient_23_7/network/admin]$ vi sqlnet.ora SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE =(METHOD = FILE) (METHOD_DATA =(DIRECTORY =/home/oracle/wallet_db23aigrid_tls/rootCA)))
작업 1.7: 클라이언트 인스턴스에서 접속 테스트
-
TCP(비TLS)를 테스트합니다.
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcp
-
TCPS를 테스트합니다(TLS 사용).
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB_TLS SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcps
작업 2: Microsoft Azure 및 데이터베이스 통합 설정
작업 2.1: Microsoft Azure에 데이터베이스 서버 등록
-
애플리케이션을 등록할 수 있는 Microsoft Entra ID 권한이 있는 관리자로 Microsoft Azure 포털에 로그인합니다.
-
Azure Active Directory 관리 센터 페이지에서 Microsoft Entra ID를 선택합니다.
-
앱 등록 및 새 등록을 누릅니다.
-
다음 정보를 입력하십시오.
-
이름:
BaseDB-Server
을 입력합니다. -
이 애플리케이션을 사용하거나 이 API에 액세스할 수 있는 사람은 누구입니까?: 이 조직 디렉토리의 계정만을 선택합니다.
-
-
등록을 누릅니다.
-
등록된 앱에서 API 노출을 누릅니다.
-
애플리케이션 ID URI 및 저장 옆에 있는 추가를 누릅니다. 다른 값은 기본값으로 둡니다.
-
범위 추가를 누르고 다음 정보를 입력합니다.
-
범위 이름:
session:scope:connect
를 입력합니다. -
동의할 수 있는 사람: 관리자 및 사용자를 입력합니다.
-
관리 동의 표시 이름: 데이터베이스에 접속을 선택합니다.
-
관리 동의 설명: 데이터베이스에 접속을 선택합니다.
-
사용자 동의 표시 이름: 데이터베이스에 접속을 선택합니다.
-
사용자 동의 설명: 데이터베이스에 접속을 선택합니다.
-
상태: 사용을 선택합니다.
범위 추가를 누릅니다. 추가한 후에는 범위 값을 복사해야 합니다.
-
-
토큰 구성에서 토큰 유형을 액세스로 사용하여 클레임을 upn으로 추가합니다.
주: Microsoft Entra ID v2 토큰을 사용으로 설정하는 과정에서 필요합니다. v2 토큰에 대한 자세한 내용은 Microsoft Entra ID v2 액세스 토큰 사용을 참조하십시오.
v2 토큰을 가져오려면 Microsoft Entra ID에서 응용 프로그램의 매니페스트를 변경해야 할 수도 있습니다.
-
앱 롤에서 다음 앱 롤을 추가합니다.
-
개요에서 애플리케이션 ID URI, 디렉토리(테넌트) ID 및 애플리케이션(클라이언트) ID를 복사합니다.
-
홈, 엔터프라이즈 애플리케이션, BaseDB-서버로 이동하고 사용자/그룹 추가를 눌러 사용자를 지정합니다.
-
사용자에서 사용자를 선택합니다. 액세스 토큰을 생성하는 동안 이 지정된 사용자는 Single Sign-On에 사용됩니다.
-
롤 선택에서 pdb.users을 선택하고 선택 및 지정을 누릅니다.
-
동일한 사용자에 대해 13단계와 14단계를 반복하고 dba.role를 지정합니다.
작업 2.2: Microsoft Azure에 데이터베이스 클라이언트 등록
-
다음 정보를 사용하여 데이터베이스 클라이언트 앱을 등록합니다.
-
이름:
BaseDB-Client
을 입력합니다. -
지원되는 계정 유형: 이 조직 디렉토리의 계정만을 선택합니다.
-
재지정 URI: Public client/native -
<http://localhost>
를 입력합니다.
-
-
관리에서 API 권한 및 권한 추가를 누릅니다. 내 조직에서 사용하는 API, BaseDB-Server, 위임된 권한, 권한을 session:scope:connect로 선택하고 권한 추가를 누릅니다.
-
개요에서 애플리케이션 ID URI 및 디렉토리(테넌트) ID를 복사합니다.
작업 2.3: Microsoft Azure용 데이터베이스 서버 구성
다음 질의를 실행하여 Microsoft Azure AD를 ID 제공자로 구성하고 데이터베이스 전역 사용자 및 롤을 생성합니다.
-
PDB 데이터베이스에서 현재 ID 제공자를 확인하십시오.
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
-
Microsoft Azure를 ID 제공자로 설정합니다.
ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=AZURE_AD SCOPE=BOTH;
-
업데이트된 ID 제공자를 검증합니다.
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
-
ID 제공자 구성을 설정합니다.
application_id_uri
,tenant_id
및app_id
를 작업 2.1.11에서 복사된 값으로 바꿉니다.ALTER SYSTEM SET IDENTITY_PROVIDER_CONFIG = '{ "application_id_uri": "api://b7ae5060-667c-47b7-83f8-71283df2a2f6" , "tenant_id": "ef2b4271-9238-4dcd-8c56-d3e915e37c6f", "app_id": "b7ae5060-667c-47b7-83f8-71283df2a2f6" }' SCOPE=BOTH;
-
데이터베이스에 전역 사용자 및 롤을 생성합니다.
CREATE USER allusers IDENTIFIED GLOBALLY AS 'AZURE_ROLE=pdb.users'; CREATE USER hrapp IDENTIFIED GLOBALLY AS 'AZURE_ROLE=hr.app'; CREATE ROLE dba_azure IDENTIFIED GLOBALLY AS 'AZURE_ROLE=dba.role';
-
사용자 및 롤에 권한을 부여합니다.
GRANT CREATE SESSION TO allusers; GRANT CREATE SESSION TO hrapp; GRANT pdb_dba TO dba_azure;
작업 2.4: Microsoft Azure 액세스 토큰을 생성하도록 도우미 유틸리티 구성
이 작업에서는 Python 유틸리티를 사용하여 파일에 저장되고 나중에 SQL*Plus에서 참조되는 액세스 토큰을 생성합니다. 이 유틸리티를 실행하려면 MSAL 모듈이 필요합니다.
-
Python 유틸리티를 Get-Token.py에서 저장합니다.
-
다음 Python 코드에서
scope
값을 Task 2.1.8에서 복사된 값으로 바꿉니다. 마찬가지로client_id
및tenant_id
값을 Task 2.2.3의 값으로 갱신합니다. -
다음 명령을 사용하여 Python 코드를 실행합니다.
python ./get-token.py
-
모든 항목이 올바르게 구성된 경우 사용자 인증을 위해 Microsoft Azure 포털로 브라우저 재지정이 트리거되어야 합니다. 인증 시 토큰 파일은 액세스 토큰을 포함하는 Python 명령이 실행된 디렉토리에 생성됩니다. 액세스 토큰 및 새로 고침 토큰도 터미널 창에 인쇄됩니다.
-
(선택 사항), jwt.io으로 이동하여 생성된 토큰을 검증하고 토큰 문자열을 인코딩됨 필드에 붙여 넣을 수 있습니다. Decoded 필드에는 토큰 문자열에 대한 정보가 표시됩니다.
작업 2.5: SQL*PLUS를 사용하여 로그인
-
SQL*PLUS를 사용하여 Microsoft Azure 토큰 로그인을 테스트합니다.
sqlplus /nolog
conn /@(description= (retry_count=20) (retry_delay=3) (address= (protocol=tcps) (port=1522) (host=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)) (connect_data=(service_name=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com))(security=(SSL_SERVER_DN_MATCH=TRUE)(TOKEN_AUTH=OAUTH)(TOKEN_LOCATION=/home/oracle)))
-
로그인한 사용자를 확인합니다.
주: 로그인한 후에는 다음 질의를 실행하여 사용자의 세션 관련 정보를 검색할 수 있습니다.
- CURRENT_USER 변수는 활성 상태인 현재 사용자를 반환합니다.
- ALLUSERS는 Microsoft Entra ID 앱 롤을 통해 지정된 공유 스키마 사용자입니다.
- AUTHENTICATED_IDENTITY은 Microsoft Entra ID의 인증된 사용자를 나타냅니다.
- ENTERPRISE_IDENTITY는 Microsoft Entra ID에서 인증된 사용자의 GUID를 반환합니다.
- SESSION_ROLES는 Microsoft Entra ID 앱 롤을 통해 로컬로 부여되고 전역 매핑을 통해 부여된 롤의 결합된 목록을 반환합니다.
-
다음 질의를 실행하여 현재 사용자를 확인합니다.
SELECT SYS_CONTEXT ('USERENV','CURRENT_USER') FROM DUAL;
출력:
SYS_CONTEXT('USERENV','CURRENT_USER') ALLUSERS
-
다음 질의를 실행하여 인증된 사용자를 확인합니다.
SELECT SYS_CONTEXT ('USERENV','AUTHENTICATED_IDENTITY') FROM DUAL;
출력:
SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY') <anujtrip.ai@gmail.com>
-
다음 질의를 실행하여 인증된 사용자의 GUID를 확인합니다.
SELECT SYS_CONTEXT ('USERENV','ENTERPRISE_IDENTITY') FROM DUAL;
출력:
SYS_CONTEXT('USERENV','ENTERPRISE_IDENTITY') 7eb35b90-dcxxx5-bc0b-48789368e9cf
-
다음 질의를 실행하여 앱 롤을 확인합니다.
SELECT * FROM SESSION_ROLES;
출력:
ROLE DBA_AZURE PDB_DBA CONNECT
다음 단계
Microsoft Entra ID 기반 인증이 성공적으로 구현되면 중앙 집중식 ID 거버넌스를 통해 사용자 역할과 액세스 정책을 조정할 수 있습니다. 공유 스키마 사용자 및 롤에 대해 전역 매핑을 활용하면 액세스 제어를 간소화하고 관리 복잡성을 줄일 수 있습니다. 또한 사용자 세션 및 액세스 패턴을 모니터링하여 보안을 강화하고 조직 정책을 준수해야 합니다. 또한 기업 전반에서 일관된 ID 관리를 유지하기 위해 이 통합을 다른 데이터베이스 또는 애플리케이션으로 확장하는 것도 고려해야 합니다.
관련 링크
확인
- Authors - Anuj Tripathi(NA 솔루션 엔지니어링 부문 수석 클라우드 아키텍트), Alex Kovuru(NA 솔루션 엔지니어링 부문 수석 클라우드 아키텍트)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Authenticate Oracle Database 23ai with Microsoft Entra ID
G33293-02
Copyright ©2025, Oracle and/or its affiliates.