2015/12/23

Oracle Databaseへの接続情報をLDAPで管理する

本記事は OpenLDAP と仲間たち Advent Calendar 2015 の23日目です。

ディレクトリサービスはユーザ認証統合など主に人の情報を管理する用途で使用することが多いと思いますが、一元的に管理できる情報のひとつとして、Oracle Database への接続情報を管理する方法を紹介します。

紹介と言っても、手順は以下のサイトをなぞっただけになりますが、Net Services 関連のマニュアルとあわせて確認したいと思います。

環境

ここでは以下の構成とします。

  • OpenLDAPサーバ
    • バージョン: openldap-servers-2.3.43-29.el5_11
      ※cn=configデータベースの扱いが分かっていないので古くてすみません
    • ホスト名: centos.vbox
    • サフィックス: dc=example,dc=com
  • Oracle Databaseサーバ
    • ホスト名: ol64.vbox
    • サービス1: pdb
    • サービス2: xe

スキーマの追加

冒頭に上げたサイトからスキーマ情報をダウンロードします。

# mkdir -pv /etc/openldap/schema-oid
# cd /etc/openldap/schema-oid
# wget http://www.idevelopment.info/data/Oracle/DBA_tips/LDAP/resources/OracleDatabaseNameResolutionOpenLDAP/oidbase.schema
# wget http://www.idevelopment.info/data/Oracle/DBA_tips/LDAP/resources/OracleDatabaseNameResolutionOpenLDAP/oidnet.schema
# wget http://www.idevelopment.info/data/Oracle/DBA_tips/LDAP/resources/OracleDatabaseNameResolutionOpenLDAP/oidrdbms.schema
# wget http://www.idevelopment.info/data/Oracle/DBA_tips/LDAP/resources/OracleDatabaseNameResolutionOpenLDAP/alias.schema
slapd.conf にダウンロードしたスキーマ情報を追加します。
include         /etc/openldap/schema-oid/oidbase.schema
include         /etc/openldap/schema-oid/oidnet.schema
include         /etc/openldap/schema-oid/oidrdbms.schema
include         /etc/openldap/schema-oid/alias.schema

親エントリの追加

親エントリとなる OracleContext までを以下の LDIF で作成します。

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example co.,Ltd
dn: cn=OracleContext,dc=example,dc=com
objectclass: orclContext
cn: OracleContext

Oracle Database 接続情報の追加

これで準備が整いましたので Oracle Database への接続情報を追加します。 Oracle Database への接続は、次のような tnsnames.ora ファイルを使ったローカル・ネーミング・メソッドを使っていることが多いと思います。

pdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol64.vbox)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = pdb)
    )
  )

xe =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol64.vbox)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = xe)
    )
  )
この接続記述子そのものを LDIF として作成します。
dn: cn=pdb,cn=OracleContext,dc=example,dc=com
objectclass: top
objectclass: orclNetService
cn: pdb
orclNetDescString: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ol64.vbox) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=pdb)))

dn: cn=xe,cn=OracleContext,dc=example,dc=com
objectclass: top
objectclass: orclNetService
cn: xe
orclNetDescString: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ol64.vbox) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xe)))

Oracle クライアント側の設定

tnsnames.ora ファイルと同じ場所(特に変更していなければ $ORACLE_HOME/network/admin)に、Oracle Net の名前解決参照に使用する sqlnet.ora ファイルがありますので(無ければ作成)以下のように ldap を先頭にします。

NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)
つぎに接続先 LDAP サーバの情報を格納するファイル ldap.ora を同じ場所に作成します。
DIRECTORY_SERVERS=(centos.vbox:389)
DEFAULT_ADMIN_CONTEXT="dc=example,dc=com"

Oracle クライアントからの接続

これで準備は整いました。tnsnames.ora ファイルを削除して接続してみます。

% cd $ORACLE_HOME/network/admin

% grep . *
ldap.ora:DIRECTORY_SERVERS=(centos.vbox:389)
ldap.ora:DEFAULT_ADMIN_CONTEXT="dc=example,dc=com"
sqlnet.ora:NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT)
% sqlplus scott/tiger@pdb

SQL*Plus: Release 11.2.0.4.0 Production on Wed Dec 23 23:38:54 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Advanced Analytics
and Real Application Testing options

SQL> conn scott/tiger@xe
Connected.
SQL> quit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
tnsnames.ora に記述されていない pdb , xe と言う接続識別子でデータベースに接続できました。

おわりに

今回取り上げた方法は正式にサポートされるものではありませんが、ディレクトリサービスて一元管理できる情報の一つとして、Oracle Database の接続情報も格納できると言うことの紹介でした。

Oracle Database への接続は tnsnames.ora ファイルを使用しなくても、簡易接続ネーミングという URL のように記述することもできます。しかし Oracle Net の機能を使用したロードバランスなど使用する場合はまだまだ tnsnames.ora に接続情報を記述することがあると思います。その記述内容を一元管理できれば、クライアント側の接続情報を柔軟に変更させることができます。(ユースケースがパッと浮かびませんが。。。)

プロダクション環境で接続先の一元管理を必要とする場合には Oracle Internet Directory と言う製品を使うことになるかなと思います。

0 件のコメント:

コメントを投稿