Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle Internet Directory(OID)에서 Oracle Unified Directory(OUD)로 마이그레이션하는 완벽 가이드

Oracle Internet Directory(OID)란 무엇인가?

Oracle Internet Directory(OID)는 외부 Oracle 데이터베이스를 사용하여 데이터를 저장하고, Oracle 애플리케이션에 싱글 사인온(SSO) 솔루션을 제공하는 경량 디렉터리 액세스 프로토콜(LDAP) 서버입니다.

OID의 주요 특징은 다음과 같습니다.

  • 대규모 애플리케이션 환경에서도 뛰어난 성능을 제공합니다.
  • 전송 중인 데이터부터 저장소 및 백업에 이르기까지 모든 계층에서 보안을 보장하는, 가장 안전한 디렉터리 서비스입니다.
  • 스토리지 및 동기화 서비스를 제공합니다.

Oracle Unified Directory(OUD)란 무엇인가?

Oracle Unified Directory(OUD)는 스토리지, 프록시, 동기화, 가상화 기능을 하나로 통합한 Oracle 차세대 올인원 디렉터리 솔루션입니다. 이 LDAP 서버는 Java로 완전히 작성되어 대규모 확장형 배포를 지원하며 높은 성능을 발휘합니다.

OUD는 다음 용도로 활용할 수 있습니다.

  • 데이터를 저장하는 LDAP 디렉터리 서버
  • 클라이언트와 디렉터리 서버 간의 프록시 서버 인터페이스
  • Oracle Unified Directory와 Oracle Directory Server Enterprise Edition 간의 복제 게이트웨이

OID를 OUD로 마이그레이션하는 방법에는 두 가지가 있습니다.

  1. DIP를 사용하여 OUD와 OID 동기화
  2. Schemasync 유틸리티 활용

방법 1. DIP를 사용하여 OUD와 OID 동기화

사전 준비 단계

마이그레이션을 진행하기 전에 먼저 External Change Log(ECL)를 활성화해야 합니다. ECL은 디렉터리 서버와 복제 서버를 모두 포함하는 모든 서버 인스턴스에서 기본적으로 제공됩니다. 설치 과정에서 디렉터리 서버가 복제 토폴로지의 일부로 구성되면 ECL이 자동으로 활성화되며, 그렇지 않은 경우 dsreplication 명령을 실행하여 복제를 구성할 수 있습니다.

$ dsreplication enable-changelog -h localhost -p 4444 -D "cn=directory manager" -j pwd-file -r 8989 -b dc=example,dc=com -X -n

아래 명령을 실행하여 체인지 로그가 정상적으로 활성화되었는지 확인합니다.

ldapsearch -h <HOSTNAME> -p <PORT> -D "cn=<DM_ADMIN>" -w <PASSWORD> -s base -b "" "objectclass=*" namingContexts
version: 1
dn:
namingContexts: cn=changelog
namingContexts: <SUFFIX_DN>

DIP와 OID는 미리 구성 및 배포되어 있어야 합니다.

OID에 SSL 활성화

DIP-OID 동기화는 SSL 모드에서만 가능합니다. SSL 모드로 OID에 바인딩하려면 OID 월렛(Wallet)을 생성해야 합니다. Enterprise Manager를 통해 자체 서명(self-signed) 월렛을 생성한 후, 다음 단계를 거쳐 Oracle Wallet에 복사해야 합니다.

OID 자체 서명 인증서 생성 절차:

  • 신뢰할 수 있는 인증서(Trusted Certificate)를 내보내어 Oracle Wallet Manager에 복사합니다.
  • OWM(Oracle Wallet Manager)에서 OID Wallet을 생성하고 신뢰 인증서를 월렛에 추가합니다.

아래 명령으로 SSL 모드에서 OID1에 바인딩합니다.

ldapbind -h <OID_HOSTNAME> -p <OID_PORT> -D "cn=<OID_ADMIN>" -w <PASSWORD> -U 2 -W "file:/home/oracle/oid1_client_wallet" -P "<PASSWORD>"
bind successful

DIP 구성 단계

Keytool을 사용하여 OID 자체 서명 인증서로 키스토어(Keystore)를 생성합니다.

keytool -importcert -trustcacerts -file /home/oracle/certificates_base/ oid1_selfsigned_cert.txt -keystore $HOME/dip_keystore
Enter keystore password:
Re-enter new password:
Trust this certificate? [no]: yes
Certificate was added to keystore

DIP 구성을 업데이트하여 키스토어 위치를 지정합니다.

$ORACLE_HOME/bin/manageDIPServerConfig set -attribute keystorelocation -h <OID_HOSTNAME> -p <WLS_PORT> -D <WL_ADMIN> -value $HOME/dip_keystore <wls admin user password>

Connection parameters initialized.
Connected successfully.
The attribute keystorelocation is successfully changed to value /home/oracle/dip_keystore.

아래 명령으로 DIP를 SSL V2 모드로 구성합니다.

$ORACLE_HOME/bin/manageDIPServerConfig set -attribute sslmode -h <OID_HOSTNAME> -p <WLS_PORT> -D <WLS_ADMIN> -value 2 <wls admin user password>

Connection parameters initialized.
Connected successfully.
The attribute sslmode is successfully changed to a value of 2.

wlst.sh를 사용하여 Java Key Store를 업데이트한 후, 변경 사항을 적용하기 위해 OID와 DIP 서비스를 재시작합니다.

wlst.sh
connect('<WLS_ADMIN>','<PASSWORD>','t3://localhost:<EM_PORT>')
createCred(map="dip",key="jksKey", user="<JKS_USER>",password="<PASSWORD>")
disconnect()

OUD와 OID 간 동기화 프로파일 생성

OUD 데이터를 채우려면 OID에 Suffix DN 항목을 생성해야 합니다. 어떤 접미사(suffix)를 생성할지 선택하는 것은 매우 중요하며, 이 정보는 동기화 프로파일 관리 시 직접 사용됩니다. 다음 스크린샷과 같이 부모 디렉터리를 선택합니다.

동기화 프로파일 생성

메뉴에서 Identity and Access 아래의 OID를 선택한 뒤, OID Administration으로 이동하여 Synchronization Profile을 선택합니다.

다음과 같이 두 개의 동기화 프로파일을 생성합니다.

  • OUD → OID : OUDImport
  • OID → OUD : OUDExport

동기화 프로파일을 생성할 때 OID를 소스(source)로 사용할지 대상(destination)으로 사용할지 결정해야 합니다. OID가 소스로 사용되므로 호스트 이름과 포트는 OID의 호스트 이름과 포트 번호를 입력합니다.

위 매핑이 완료되면 OUDImport/OUDExport가 양측에서 "ou=people, dc=people,dc=com"을 매핑하게 되며, 그 결과는 다음 스크린샷에 반영됩니다.

매핑이 활성화되면 기본적으로 다음 속성들이 자동으로 매핑됩니다.

OID에서 OUD로 데이터 부트스트래핑(Bootstrapping)

DIP가 접미사 DN에 접근하여 syncProfileBootstrap을 수행할 수 있도록 OID ACI를 추가합니다.

아래 명령으로 OID ACI를 추가합니다.

cat aci_oudimport.ldif
dn: ou=People,dc=people,dc=com
changetype : modify
add: orclaci
orclaci: access to entry by dn="orclodipagentname=OUDImport,cn=subscriber profile,cn=changelog subscriber,cn=oracle internet directory" (browse,add,delete)
orclaci: access to attr=(*) by group="orclodipagentname=OUDImport,cn=subscriber profile,cn=changelog subscriber,cn=oracle internet directory" (read,search,write,selfwrite,compare)

ldapmodify 명령을 실행하여 ACI를 추가합니다.

ldapmodify -h <OID_HOSTNAME> -p <OID_PORT> -D cn=<OID_ADMIN> -w <PASSWORD> -f aci_oudimport.ldif

아래 명령을 실행하여 OID에서 OUD로 데이터를 부트스트래핑합니다.

syncProfileBootstrap -h <OID_HOSTNAME> -p <WLS_PORT> -D <WLS_ADMIN> -pf OUDImport

Connection parameters initialized.
Connecting at <OID_HOSTNAME>:<WLS_PORT>, with userid "<WLS_ADMIN>".
Connected successfully.

부트스트랩 작업이 완료되며, 결과는 다음과 같습니다.

entries read in bootstrap operation: 1907
entries filtered in bootstrap operation: 0
entries ignored in bootstrap operation: 0
entries processed in bootstrap operation: 1906
entries failed in bootstrap operation: 1

이제 OUD 측에서 접미사 데이터를 확인할 수 있습니다.

ou=people,dc=people,dc=com

방법 2. Schemasync

Schemasync 유틸리티를 사용하면 OID와 타사 LDAP 디렉터리 간에 스키마 속성 및 객체 클래스를 동기화할 수 있습니다.

Schemasync 구문:

schemasync -srchost hostname -srcport port -srcdn bindDN -srcpwd password -dsthost hostname -dstport port -dstdn bindDN -dstpwd password [-ldap]

주요 옵션 설명:

  • -srchost – 소스 디렉터리 서버의 호스트 이름
  • -srcport – 소스 디렉터리 서버의 LDAP 리스닝 포트
  • -srcdn – 소스 디렉터리에 바인딩할 때 사용하는 사용자 DN
  • -srcpwd – 소스 디렉터리 바인딩에 사용하는 비밀번호
  • -dsthost – 대상 디렉터리 서버의 호스트 이름
  • -dstport – 대상 디렉터리 서버의 LDAP 리스닝 포트
  • -dstdn – 대상 디렉터리 서버에 바인딩할 때 사용하는 사용자 DN
  • -ldap – LDAP 옵션 사용 시, 스키마 변경 사항이 소스 LDAP에서 대상 LDAP로 직접 적용됩니다.
schemasync -srchost srchost.domain.com -srcport 3060 -srcdn "cn=orcladmin" \
   -dsthost dsthost.domain.com -dstport 3060 \
   -dstdn "uid=superuser,ou=people,dc=people,dc=com" -ldap

위 명령을 실행한 후, 대상 디렉터리 서버에서 DN 세부 정보를 확인합니다.

결론

본문에서 소개한 방법들을 활용하면 기존 OID 저장소를 OUD로 마이그레이션하여 대규모 애플리케이션에 대한 싱글 사인온(SSO) 솔루션을 구축할 수 있습니다. OUD는 LDAP 서버가 데이터를 저장하는 방식 덕분에 사용자 인증 프로세스에서 뛰어난 성능을 발휘합니다. 또한 마이그레이션 절차는 매우 직관적이라 어떤 유형의 애플리케이션에서도 손쉽게 적용할 수 있습니다.


궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨주세요. 언제든지 대화를 나눌 수 있습니다.