接続の確立
JDBC データソースの作成
Java アプリケーションから接続するJDBC データソースを作成できます。CData JDBC Driver for PostgreSQL に基づくJDBC データソースの作成は、3つの基本ステップで構成されます。
- ドライバーのJAR ファイルをクラスパスに追加します。JAR ファイルはインストールディレクトリの[lib]サブフォルダ内にあります。.lic ファイルはJAR ファイルと同じフォルダ内に配置される必要があることに注意してください。
- ドライバークラスを入力します。次に例を示します。
cdata.jdbc.postgresql.PostgreSQLDriver
- JDBC URL を入力します。次に例を示します。
jdbc:postgresql:User=postgres;Password=admin;Database=postgres;Server=127.0.0.1;Port=5432 or jdbc:cdata:postgresql:User=postgres;Password=admin;Database=postgres;Server=127.0.0.1;Port=5432
上記の2つ目の形式は、同じURL 形式を使用しているドライバー間でアプリケーションに競合がある場合は、CData ドライバーを使用していることを確認するために常に使用できます。URL は "jdbc:postgresql:" または"jdbc:cdata:postgresql:" のいずれかから始まり、任意の接続プロパティの名前と値のペアをセミコロン区切りで入力します。
PostgreSQL への接続
PostgreSQL に接続するには、通常次の接続プロパティが必要です。
- Server:PostgreSQL データベースをホスティングしているサーバーのホスト名またはIP アドレス。
- User:PostgreSQL サーバーに認証する際に使われるユーザー。
また、オプションで以下を設定することもできます。
- Database:PostgreSQL サーバーに接続する場合のデータベース。設定されていない場合は、ユーザーのデフォルトデータベースが使用されます。
- Port:PostgreSQL データベースをホスティングしているサーバーのポート。5432がデフォルトです。
標準
他のスキームを選択しない限り、本製品 がPostgreSQL サーバーに接続する際に使用するデフォルトの認証メカニズムはパスワードです。標準認証を使用する場合、PostgreSQL にログイン資格情報で接続するにはAuthScheme をPassword に設定します。
そして、認証するために、認証するユーザに紐づいたPassword を設定します。
pg_hba.conf 認証スキーム
本製品 がサポートするパスワード認証スキームのサブタイプは、PostgreSQL サーバー上のpg_hba.conf ファイルで有効化する必要があります。
PostgreSQL サーバーでの認証の設定について、詳しくはPostgreSQL ドキュメントを参照してください。
MD5
本製品 は、MD5 でパスワードを検証することで認証できます。pg_hba.conf ファイルのauth-method をmd5 に設定し、この認証方法を有効にする必要があります。
SASL
本製品 は、SASL(特にSCRAM-SHA-256)でパスワードを検証することで認証できます。pg_hba.conf ファイルのauth-method をscram-sha-256 に設定し、この認証方法を有効にする必要があります。
Azure
Microsoft Azure でPostgreSQL への接続に利用できる方法は以下のとおりです。
- Azure Active Directory OAuth
- Azure Active Directory Password
- Azure Active Directory MSI
Azure AD
Azure AD は、OAuth を使用して認証する接続タイプです。OAuth では認証するユーザーにインターネットブラウザでPostgreSQL との通信を要求します。下記で説明するとおり、本製品 はさまざまな方法でこれをサポートします。 AuthScheme をAzureAD に設定します。すべてのAzure AD フローは、すでに設定済みであることを前提として書かれています。
デスクトップアプリケーション
CData は、OAuth デスクトップ認証を簡略化する埋め込みOAuth アプリケーションを提供します。代わりに、カスタムOAuth アプリケーションを作成することも可能です。カスタムアプリケーションの作成およびその理由については、カスタムAzureAD アプリの作成 を参照してください。認証に関する2つの方法の違いは、カスタムOAuth アプリケーションを使用する場合に、2つの接続プロパティを追加で設定する必要があることだけです。
次の接続プロパティを設定して、接続してください。
- InitiateOAuth:GETANDREFRESH に設定。InitiateOAuth を使うと、OAuth 交換の繰り返しや、手動でのOAuthAccessToken 設定を避けられます。
- OAuthClientId:(カスタムアプリケーションのみ)アプリケーション設定のクライアントId に設定。
- OAuthClientSecret:(カスタムアプリケーションのみ)アプリケーション設定のクライアントシークレットに設定。
- CallbackURL:アプリケーション設定のリダイレクトURL に設定。
接続すると、本製品 はデフォルトブラウザでOAuth エンドポイントを開きます。ログインして、アプリケーションにアクセス許可を与えます。本製品 はこれでOAuth プロセスを完了します。
- コールバックURL からアクセストークンを取得し、リクエストを認証します。
- 古いトークンの期限が切れたときは、新しいアクセストークンを取得します。
- OAuthSettingsLocation にOAuth 値を保存し、接続間で永続化します。
Web アプリケーション
Web アプリケーション経由で接続する場合は、 PostgreSQL にカスタムOAuth アプリを登録する必要があります。カスタムAzureAD アプリの作成 を参照してください。それから本製品 を使用してOAuth トークンの値を取得および管理します。 OAuth アクセストークンの取得
認証タイプに応じて以下のいずれかの接続プロパティグループを設定して、OAuthAccessToken を取得します。
- クライアントシークレットを使用した認証
- OAuthClientId:アプリ設定のクライアントId に設定。
- OAuthClientSecret:アプリ設定のクライアントシークレットに設定。
- 証明書を使用した認証
- OAuthClientId:アプリ設定のクライアントId に設定。
- OAuthJWTCert:JWT 証明書ストアを設定。
- OAuthJWTCertType:OAuthJWTCert で指定された証明書ストアの種類に設定。
続いてストアドプロシージャを呼び出し、OAuth 交換を完了します。
-
GetOAuthAuthorizationUrl ストアドプロシージャを呼び出します。AuthMode インプットをWEB に、CallbackURL インプットをアプリケーション設定で指定したリダイレクトURI に設定します。必要に応じて、Permissions パラメータを設定してカスタム権限をリクエストします。
ストアドプロシージャがOAuth エンドポイントのURL を返します。
- URL を開き、ログインして、アプリケーションを認可します。コールバックURL にリダイレクトされます。
- GetOAuthAccessToken ストアドプロシージャを呼び出します。AuthMode インプットをWEB に設定します。Verifier インプットを、コールバックURL のクエリ文字列の"code" パラメータに設定します。必要に応じて、Permissions パラメータを設定してカスタム権限をリクエストします。
OAuthAccessToken 接続プロパティをストアドプロシージャで返されたアクセストークンに設定し、データに接続します。ExpiresIn 秒後に、アクセストークンの期限が切れたときは、GetOAuthAccessToken を呼び出し、新しいアクセストークンを取得します。
ヘッドレスマシン
ヘッドレスマシンのユーザーアカウントでOAuth を使用するようにドライバーを設定するには、インターネットブラウザに対応した別の端末で認証する必要があります。
- 以下の2つのオプションから選択します。
- オプション1:後述の「Verifier code を取得および交換」に従い、OAuthVerifier 値を取得します。
- オプション2:別のマシンに本製品 をインストールし、後述の「OAuth 設定を転送」の説明に従い、通常のブラウザベースのフローで認証後にOAuth 認証値を転送します。
- その後、ヘッドレスマシンからアクセストークンを自動的にリフレッシュするように本製品 を設定します。
オプション1:Verifier code を取得および交換
Verifier code を取得するには、OAuth Authorization URL で認証する必要があります。
インターネットブラウザに対応したマシンから認証してOAuthVerifier 接続プロパティを取得する方法は次のとおりです。
- 以下のオプションから選択します。
- 埋め込みOAuth アプリケーションを使用する場合は、PostgreSQL OAuth endpoint をクリックし、ブラウザでエンドポイントを開きます。
- カスタムOAuth アプリケーションを使用するには、以下のプロパティを設定し、認証URL を作成します。
- InitiateOAuth:OFF に設定。
- OAuthClientId:アプリケーションの登録時に割り当てられたクライアントId に設定。
- OAuthClientSecret:アプリケーションの登録時に割り当てられたクライアントシークレットに設定。
- ログインして、本製品 にアクセス許可を与えます。すると、verifier code を含むコールバックURL にリダイレクトされます。
- verifier code の値を保存します。後ほどこれをOAuthVerifier 接続プロパティに設定します。
ヘッドレスマシンでは、次の接続プロパティを設定してOAuth 認証値を取得します。
- InitiateOAuth:REFRESH に設定。
- OAuthVerifier:verifier code に設定。
- OAuthClientId:(カスタムアプリのみ)カスタムOAuth アプリケーション設定のクライアントId に設定。
- OAuthClientSecret:(カスタムアプリのみ)カスタムOAuth アプリケーション設定のクライアントシークレットに設定。
- OAuthSettingsLocation:ドライバーがOAuth トークン値を保存するファイルのパスを設定。これは接続間で維持されます。
OAuth 設定ファイルが生成されたら、以下のように接続プロパティをリセットする必要があります。
- InitiateOAuth:REFRESH に設定。
- OAuthClientId:(カスタムアプリのみ)アプリケーションの登録時に割り当てられたクライアントId に設定。
- OAuthClientSecret:(カスタムアプリのみ)アプリケーションの登録時に割り当てられたクライアントシークレットに設定。
- OAuthSettingsLocation:暗号化されたOAuth 認証値を含むファイルに設定。アクセストークンの自動リフレッシュを有効にするために、このファイルが本製品 に読み書きのアクセス許可を付与することを確認してください。
オプション2:OAuth 設定を転送
ヘッドレスマシンでの接続に先立ち、インターネットブラウザに対応したデバイスでドライバとの接続を作成し、インストールする必要があります。上述の「デスクトップアプリケーション」の説明に従って、接続プロパティを設定します。
「デスクトップアプリケーション」の手順が完了すると、生成された認証値は、OAuthSettingsLocation で指定されたパスに暗号化されて書き込まれます。デフォルトのファイル名はOAuthSettings.txt です。
接続が正常にテストされたら、OAuth 設定ファイルをヘッドレスマシンにコピーします。
ヘッドレスマシンで、次の接続プロパティを設定し、データに接続します。
- InitiateOAuth:REFRESH に設定。
- OAuthClientId:(カスタムアプリのみ)アプリケーションの登録時に割り当てられたクライアントId に設定。
- OAuthClientSecret:(カスタムアプリのみ)アプリケーションの登録時に割り当てられたクライアントシークレットに設定。
- OAuthSettingsLocation:OAuth 設定ファイルのパスに設定。アクセストークンの自動リフレッシュを有効にするために、このファイルが本製品 に読み書きのアクセス許可を与えることを確認してください。
管理者の同意
管理者の同意とは、Azure Active Directory テナントの管理者が、管理者の同意を必要とするアプリケーションに権限を付与することを指します。 CData JDBC Driver for PostgreSQL 内の埋め込みアプリには、管理者の同意を必要とするアクセス許可はありません。したがって、この情報はカスタムアプリケーションにのみ適用されます。
管理者の同意の付与
Azure ポータルで新しいAzureAD アプリを作成する場合には、アプリに必要なアクセス許可を指定する必要があります。一部のアクセス許可には、「管理者の同意が必要」と記載されている場合があります。 例えば、すべてのグループのアクセス許可には管理者の同意が必要です。アプリに管理者の同意が必要な場合、いくつかの方法があります。
管理者の同意を付与する最も簡単な方法は、管理者がportal.azure.com にログインして、[アプリの登録]で作成したアプリに移動するだけです。API のアクセス許可で、 同意の付与をクリックして、アプリが作成されたテナントでアクセス権限を持つようにします。
組織に複数のテナントがある場合、または組織外の他のテナントにアプリのアクセス許可を与える必要がある場合、GetAdminConsentURL ストアドプロシージャを使用してAdmin Authorization URL を生成します。GetOAuthAuthorizationUrl とは異なり、このエンドポイントから返される重要な情報はありません。OAuth アプリケーションが正常に認可されると、アクセス権限が付与されたことを示すBoolean 値が返されます。
管理者がOAuth アプリケーションを承認後、認証を続行できます。
クライアントクレデンシャル
クライアント資格情報は、直接ユーザー認証が行われないOAuth のフローを指します。代わりに、資格情報はアプリ自体のためだけに作成されます。 アプリで実行されるすべてのタスクは、デフォルトユーザーコンテキストなしで実行されます。そのため、認証フローが標準とは少し違ったものになります。クライアントOAuth フロー
クライアントOAuth フローに関連するすべての権限には、管理者の同意が必要です。これは、CData JDBC Driver for PostgreSQL が埋め込まれたアプリをクライアントOAuth フローでは使用できないことを意味します。クライアント資格情報を使用するには、独自のOAuth アプリの作成が必要になります。 詳しくは、カスタムAzureAD アプリの作成 を参照してください。
portal.azure.com の[アプリの登録]で[API のアクセス許可]に移動し、Microsoft Graph アクセス許可を選択します。アクセス許可には、委任されたアクセス許可とアプリケーションの許可の2つの異なるアクセス許可セットがあります。 クライアントの資格情報認証時に使用されるアクセス許可は、[アプリケーションの許可]の下にあります。インテグレーションに必要なアクセス許可を選択します。
認証タイプに応じていずれかの接続プロパティグループを設定すると、接続できるようになります。
- クライアントシークレットを使用した認証
- InitiateOAuth:GETANDREFRESH に設定。InitiateOAuth を使うと、OAuth 交換の繰り返しや、手動でのOAuthAccessToken 設定を避けられます。
- AzureTenant:接続するテナントに設定。
- OAuthGrantType:CLIENT に設定。
- OAuthClientId:アプリ設定のクライアントId に設定。
- OAuthClientSecret:アプリケーション設定のクライアントシークレットに設定。
- 証明書を使用した認証
- InitiateOAuth:GETANDREFRESH に設定。InitiateOAuth を使うと、OAuth 交換の繰り返しや、手動でのOAuthAccessToken 設定を避けられます。
- AzureTenant:接続するテナントに設定。
- OAuthGrantType:CLIENT に設定。
- OAuthClientId:アプリ設定のクライアントId に設定。
- OAuthJWTCert:JWT 証明書ストアを設定。
- OAuthJWTCertType:OAuthJWTCert で指定された証明書ストアの種類に設定。
クライアント資格情報での認証は、他の接続同様に自動的に行われますが、ユーザーにプロンプトするウィンドウは表示されません。ユーザーコンテキストがないため、ブラウザのポップアップは必要ないからです。接続が行われ、内部的に処理されます。
Note: Azure PostgreSQL Flexible サーバーはサポート対象外です。Azure PostgreSQL Single Server インスタンスのみサポートされます。
Azure PostgreSQL インスタンスでActive Directory 管理者が設定されていることを確認します(Active Directory 管理者 -> 管理者の設定)。
次に、接続するには以下を設定します。
- User:Azure PostgreSQL サーバーへのアクセス権を付与したAzure Active Directory ユーザーに設定。
- AzureTenant:Azure 上のPostgreSQL への認証に使用するOAuth アプリの概要ページにある、Directory (tenant) ID に設定。
- Server:Azure PostgreSQL インスタンスの概要ページにある、Azure PostgreSQL のサーバー名に設定。
- Database:Azure PostgreSQL インスタンスで接続するデータベースに設定。
- Port:PostgreSQL データベースをホスティングしているサーバーのポート。 5432がデフォルトです。
- InitiateOAuth:GETANDREFRESH に設定。
- OAuthClientId:Azure 上のPostgreSQL への認証に使用するOAuth アプリの概要ページにある、アプリケーション(クライアント)ID に設定。
- OAuthClientSecret:認証するOAuth アプリの証明書とシークレットページで生成されたクライアントシークレットの値に設定。
- CallbackURL:OAuth アプリの作成時に指定したリダイレクトURI に設定。
Azure パスワード
Azure 資格情報を使用して直接接続するには、次の接続プロパティを指定します。
- AuthScheme:AzurePassword に設定。
- User:Azure への接続に使用するユーザーアカウントに設定。
- Password:Azure への接続に使用するパスワードに設定。
- AzureTenant:Azure 上のPostgreSQL への認証に使用するOAuth アプリの概要ページにある、Directory (tenant) ID に設定。
- Server:Azure PostgreSQL インスタンスの概要ページにある、Azure PostgreSQL のサーバー名に設定。
- Database:Azure PostgreSQL インスタンスで接続するデータベースに設定。
- Port:PostgreSQL データベースをホスティングしているサーバーのポート。 5432がデフォルトです。
GCP サービスアカウント
サービスアカウントを使用してPostgreSQL Google SQL Cloud Instance に認証するには、新しいサービスアカウントを作成し、アカウント証明書のコピーを用意する必要があります。サービスアカウントを持っていない場合は、カスタムAzureAD アプリの作成 の手順に従って作成できます。 JSON ファイルの場合は、以下のプロパティを設定します。- AuthScheme:GCPServiceAccount に設定。
- InitiateOAuth:GETANDREFRESH に設定。
- OAuthJWTCertType:GOOGLEJSON に設定。
- OAuthJWTCert:Google が提供する.json ファイルへのパスに設定。
- OAuthJWTSubject:(オプション)この値は、サービスアカウントがGSuite ドメインの一部で、委任を有効にする場合にのみ設定します。このプロパティの値は、データにアクセスしたいユーザーのE メールアドレスでなければなりません。
PFX ファイルの場合は、代わりに以下のプロパティを設定します。
- AuthScheme:GCPServiceAccount に設定。
- InitiateOAuth:GETANDREFRESH に設定。
- OAuthJWTCertType:PFXFILE に設定。
- OAuthJWTCert:Google が提供する.pfx ファイルへのパスに設定。
- OAuthJWTCertPassword:(オプション).pfx ファイルのパスワードに設定。Google はPFX 証明書を暗号化するため、ほとんどの場合、これを提供する必要があります。
- OAuthJWTCertSubject:(オプション)複数の証明書を格納するOAuthJWTCertType を使用している場合にのみ設定。Google によって生成されたPFX 証明書には設定しないでください。
- OAuthJWTIssuer:サービスアカウントのE メールアドレスに設定。このアドレスには、通常iam.gserviceaccount.com ドメインが含まれます。
- OAuthJWTSubject:(オプション)この値は、サービスアカウントがGSuite ドメインの一部で、委任を有効にする場合にのみ設定します。このプロパティの値は、データにアクセスしたいユーザーのE メールアドレスでなければなりません。
MSI
Azure VM 上でPostgreSQL を実行している場合は、Managed Service Identity(MSI)の資格情報を利用して接続が可能です。
- AuthScheme:AzureMSI に設定。
- User:マネージドサービスのID にマッピングするAzure PostgreSQL ユーザーに設定。myuser@myservername の形式で入力し、myservername には"postgres.database.azure.com" の部分を含まないようにします。
- Server:Azure PostgreSQL インスタンスの概要ページにある、Azure PostgreSQL のサーバー名に設定。
- Database:Azure PostgreSQL インスタンスで接続するデータベースに設定。
- Port:PostgreSQL データベースをホスティングしているサーバーのポート。 5432がデフォルトです。
MSI 資格情報が認証用に自動的に取得されます。
Amazon Web Services
AWS キーを取得
IAM ユーザーの認証情報を取得するには、以下の手順に従ってください。
- IAM コンソールにサインインします。
- ナビゲーションペインで[ユーザー]を選択します。
- ユーザーのアクセスキーを作成または管理するには、ユーザーを選択してから[セキュリティ認証情報]タブを選択します。
AWS ルートアカウントの認証情報を取得するには、以下の手順に従ってください。
- ルートアカウントの認証情報を使用してAWS 管理コンソールにサインインします。
- アカウント名または番号を選択し、表示されたメニューで[My Security Credentials]を選択します。
- [Continue to Security Credentials]をクリックし、[Access Keys]セクションを展開して、ルートアカウントのアクセスキーを管理または作成します。
AWS IAM ロール
多くの場合、認証にはAWS ルートユーザーのダイレクトなセキュリティ認証情報ではなく、IAM ロールを使用することをお勧めします。
AWS ロールとして認証するには、次を設定します。
- AuthScheme:AwsIAMRoles に設定。
- User:aws_iam ロールを付与したAWS ホスティングPostgreSQL ユーザーに設定。このユーザーは、rds-db:connect 権限を含むポリシーを含むロールのAWS ユーザーにマッピングする必要があります。
- AWSRoleARN:認証するIAM ユーザーに付属するロールのRole ARN を指定。これにより、本製品 は指定されたロールの認証情報を 取得しようと試みます。
- AWSAccessKey:認証するIAM ユーザーのアクセスキー。
- AWSSecretKey:認証するIAM ユーザーのシークレットキー。
Note: AWS ルートユーザーのAWSAccessKey およびAWSSecretKey を指定する場合、ロールは使用できません。
Kerberos
Kerberos 認証は、CData JDBC Driver for PostgreSQL が接続を試行している際にPostgreSQL サーバーで開始されます。この認証方法を有効化するには、PostgreSQL サーバーでKerberos を設定します。PostgreSQL サーバーでのKerberos 認証の設定を完了したら、本製品 からKerberos 認証を行う方法についてKerberos の使用 を参照してください。