[Identity Management, Java] How To Query OVD, OID, DSEE Using SQL

LDAPに関するよくある質問の一つに、「SQLでクエリを実行する方法」というものがあります。私も3年前にこの内容についてエントリをUpしました。

[訳注]上記のエントリは以下を指しています
Why Doesn't My Directory Speak SQL
http://blogs.oracle.com/mwilcox/2008/05/why_doesnt_my_directory_speak.html

そして、この質問あまり頻繁には出てこなかったのですが、今週、再び質問されました。なので、他にもそんな疑問を持ってらっしゃるのではないかと思っています。

第1に、明らかなのは、SQLはLDAPと全く違うということです。SQLは簡単かつ標準化されたRDBMSのクエリ言語です。各データベースは別のプロトコルを使っていますので、JDBC(ODBC、.NET ADOなど)のような標準的な接続APIのドライバを提供する必要があります。

第2に、 Oracle Database(Oracle XEであっても)に接続することができるなら、DBMS_LDAPというPL/SQL APIを使ってLDAPサーバにクエリを発行することができます。非常に有用なトリックとして、DBMS_LDAPの呼び出しにマップしているデータベースのビューを作ることがあります。この方法-PL/SQLの専門家にあるパッケージとビューに接続できる手段を作ってもらう-を使えば、PL/SQLやLDAPを使わずにデータを利用できます。

第3に、もしJavaを使っているなら、JDBC-LDAPライブラリを使うことができます。JDBC-LDAPとは約10年前にOctetStringで記述したJDBCドライバです。ほとんど需要がなかったので、実際にオープンソースとしてリリースし、OpenLDAPに寄贈しました。プリビルドのバイナリをダウンロードできます。

OpenLDAP : JDBC-LDAP Bridge Driver
http://www.openldap.org/jdbcldap/

Using SQL To Work With LDAP
http://myvd.sourceforge.net/jdbcldap.html

JDBC-LDAPを入手したら、他のJDBCドライバと同じように利用することができます。SQLクエリも同じように発行できます。ただ、非常にLDAPの雰囲気が強いですけど。
ResultSet rs = stmt.executeQuery("SELECT cn, uniquemember FROM subTreeScope;dc=example,dc=com WHERE objectclass=groupofuniquenames");
これは「dc=example, dc=comブランチにある、groupofuniquenamesオブジェクトから、cn属性とuniquemember属性を検索」という意味です。

LDAP用語で言えば、引き出したい属性(アスタリスクは全属性を意味します)のリストを文のはじめに配置し、スコープと検索ベースをFROMの後の配置します。WHERE句にはLDAPフィルタを配置します。以下は出力例です(NetBeansでの出力をキャプチャしました)。
run:
Sort by : null
numColumns is 4
uniquemember_0:uid=kvaughan,ou=People,dc=example,dc=com
uniquemember_1:uid=rdaugherty,ou=People,dc=example,dc=com
uniquemember_2:uid=hmiller,ou=People,dc=example,dc=com
cn:Directory Administrators
uniquemember_0:uid=scarter,ou=People,dc=example,dc=com
uniquemember_1:uid=tmorris,ou=People,dc=example,dc=com
uniquemember_2:
cn:Accounting Managers
uniquemember_0:uid=kvaughan,ou=People,dc=example,dc=com
uniquemember_1:uid=cschmith,ou=People,dc=example,dc=com
uniquemember_2:
cn:HR Managers
uniquemember_0:uid=abergin,ou=People,dc=example,dc=com
uniquemember_1:uid=jwalker,ou=People,dc=example,dc=com
uniquemember_2:
cn:QA Managers
uniquemember_0:uid=kwinters,ou=People,dc=example,dc=com
uniquemember_1:uid=trigden,ou=People,dc=example,dc=com
uniquemember_2:
cn:PD Managers
BUILD SUCCESSFUL (total time: 1 second)


原文はこちら。
http://blogs.oracle.com/mwilcox/2011/03/how_to_query_ovd_oid_dsee_usin.html

0 件のコメント:

コメントを投稿