SSL (Secure Socket Layer)
SSL (Secure Socket Layer)は,サーバとクライアント間の安全なトランザクションのためのプロトコルで,トランザクションの片方または双方の端末の識別に証明書を使う.これはデータベース通信の際に,実際のデータだけでなく,ユーザ名やパスワード等の認証情報を保護するために便利である.
データベースの中には,SSLをサポートしているものとしていないものがある.お使いのデータベースがSSLをサポートしているかどうかは,データベースのドキュメントを読み,データベースの管理者にお尋ねいただきたい.お使いのデータベースがJDBCでSSLを使うように設定できる場合は,SSLを使ってデータベースとDatabaseLink が通信できるように設定できる.
SSLを確実にサポートしているデータベースの一つにPostgreSQLがある.DatabaseLink はSSLを使ってMySQLデータベースと通信できる.そのためにはデータベースを設定して,証明書の発行とSSL通信ができるようにする必要がある.設定の際は,データベースの管理者に連絡する.
SSLを設定してMySQLデータベースを使用するには,一般に以下の4段階が必要である.
3. Javaでtruststoreが使えるように設定する.
サーバの管理者は認証が提供できる.検証目的では,自己署名証明書を生成するためのopensslが使用できる.これをCA.crtとする.
次に,証明書に基づいてtruststoreファイルを生成する必要がある.これはJRE (Java Runtime Environment)の一部であるkeytool実行ファイルで行える.JREはWolfram言語に付属のバージョンが使える.truststoreファイルを生成するには,以下をシェルで(Windowsではコマンドプロンプトで)実行する.
次に,J/Link がtruststoreファイルを参照するように,Javaコマンドラインを編集する.この編集は,以下の設定を加えて行う.これには生成されたtruststoreファイルの完全パスが必要である.
webMathematica 等,Wolfram言語をWebサーバ内で実行している場合は,サーバのドキュメントに従ってJavaを起動するサーバにこれらの設定を加える必要がある.スタンドアロンでWolfram言語を実行しているときは,DatabaseLink をロードする前に,以下のように実行してJavaのオプションにこの設定を加えることができる.
Needs["JLink`"];
SetOptions[InstallJava, JVMArguments -> "-Djavax.net.ssl.trustStore=c:\java-examples\truststore -Djavax.net.ssl.trustStorePassword=mypassword"]
最後に,データベースに接続するURLを変更する.これには,次のようにして「?」を含むパラメータを加える.
OpenSQLConnection[
JDBC[
"org.postgresql.Driver",
"jdbc:postgresql://server.domain.com/database?ssl=true"
],
"Username" -> "Me", "Password" -> "$Prompt"
]
次は名前付きJDBC設定を使った同じ接続である.sslパラメータをURLの後に置くこともできるが,ここでは接続特性として渡す.
OpenSQLConnection[
JDBC["PostgreSQL","server.domain.com/database"],
"Properties" -> {"ssl""true"},
"Username" -> "Me", "Password" -> "$Prompt"
]
すべてのデータベースがSSLをサポートしている訳ではなく,また,PostgreSQL以外のSSLデータベースでDatabaseLink が使えるようにするためには,別の設定が必要となる可能性があることに注意されたい.