NoSQLハンドルの取得
Oracle NoSQL Databaseドライバを使用して表にアクセスする方法について学習します。NoSQLハンドルを作成することにより、アプリケーションの開発を開始します。NoSQLHandleを使用して表にアクセスし、すべての操作を実行します。
非セキュア・データ・ストア
アプリケーションで、Oracle NoSQL Databaseプロキシへの接続となるNoSQLHandleを作成します。このNoSQLHandleを使用して、Oracle NoSQL Database表にアクセスし、Oracle NoSQL Database操作を実行できます。
アプリケーションではNoSQLHandleConfig
クラスを使用して、ハンドルが使用するセキュリティ構成情報を指定できます。非セキュア・アクセスの場合は、引数なしのコンストラクタを使用してStoreAccessTokenProvider
クラスのインスタンスを作成します。StoreAccessTokenProvider
クラスの参照をNoSQLHandleConfig
クラスに提供して、適切な接続を確立します。
NoSQLHandle
を作成する例を次に示します。
// Service URL of the proxy
String endpoint = "http://<proxy_host>:<proxy_http_port>";
// Create a default StoreAccessTokenProvider for accessing the proxy
StoreAccessTokenProvider provider = new StoreAccessTokenProvider();
// Create a NoSQLHandleConfig
NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint);
// Setup authorization provider using StoreAccessTokenProvider
config.setAuthorizationProvider(provider);
// Create NoSQLHandle using the information provided in the config
NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
説明proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したホストと一致している必要があります。proxy_http_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に構成したhttpポートと一致する必要があります。
ハンドルは、最初にborneo.NoSQLHandleConfig
インスタンスを作成して、通信エンドポイント、認可情報、およびハンドル構成のデフォルト値を構成することで作成されます。
from borneo import NoSQLHandle, NoSQLHandleConfig
from borneo.kv import StoreAccessTokenProvider
endpoint = 'http://<proxy_host>:<proxy_http_port>'
# Create the AuthorizationProvider for a not secure store:
ap = StoreAccessTokenProvider()
# create a configuration object
config = NoSQLHandleConfig(endpoint).set_authorization_provider(ap)
# create a handle from the configuration object
handle = NoSQLHandle(config)
説明proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したホストと一致している必要があります。proxy_http_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に構成したhttpポートと一致する必要があります。
go
アプリケーションをデータ・ストアに接続する最初のステップは、サービスへのリクエストの送信に使用するnosqldb.Client
ハンドルを作成することです。この場合、Endpoint
構成パラメータが、NoSQLプロキシ・ホストおよびポートの場所を指す必要があります。cfg:= nosqldb.Config{
Mode: "onprem",
Endpoint: "http://<proxy_host>:<proxy_http_port>",
}
client, err:=nosqldb.NewClient(cfg)
...
説明proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したホストと一致している必要があります。proxy_http_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に構成したhttpポートと一致する必要があります。
NoSQLClient
クラスは、サービスへのメイン・アクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。
非セキュア・モードでプロキシに接続するには、通信エンドポイントを指定する必要があります。
import { NoSQLClient, ServiceType } from 'oracle-nosqldb';
const client = new NoSQLClient({
serviceType: ServiceType.KVSTORE,
endpoint: '<proxy_host>:<proxy_http_port>'
});
説明proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したホストと一致している必要があります。proxy_http_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に構成したhttpポートと一致する必要があります。
{
"serviceType": "KVSTORE",
"endpoint": "<proxy_host>:<proxy_http_port>",
}
import { NoSQLClient } from 'oracle-nosqldb';
const client = new NoSQLClient('</path/to/config.json>');
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。クラスNoSQLClient
は、サービスへのメイン・アクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。
非セキュアなモードでは、ドライバはHTTPプロトコル経由でプロキシと通信します。必要な情報は通信エンドポイントのみです。オンプレミスNoSQLデータベースの場合、エンドポイントはプロキシのURLをhttp://proxy_host:proxy_http_portの形式で指定します。
var client = new NoSQLClient(
new NoSQLConfig
{
ServiceType = ServiceType.KVStore,
Endpoint = "<proxy_host>:<proxy_http_port>"
});
説明proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したホストと一致している必要があります。proxy_http_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に構成したhttpポートと一致する必要があります。
{
"ServiceType": "KVStore",
"Endpoint": "<proxy_host>:<proxy_http_port>"
}
NoSQLClient
インスタンスを作成できます。varclient = new NoSQLClient("</path/to/config.json>");
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。セキュア・データ・ストア
アプリケーションで、プロキシを介してセキュアなデータ・ストアに接続するためのNoSQLHandle
を作成します。NoSQLHandle
を使用して、Oracle NoSQL Database表にアクセスし、Oracle NoSQL Database操作を実行できます。プロキシを起動する前に、プロキシがセキュリティ接続をブートストラップできるように、セキュア・データ・ストアにブートストラップ・ユーザー(proxy_user
)を作成する必要があります。詳細は、セキュア・データ・ストアのユーザーの作成およびプロキシの起動を参照してください。
sql-> CREATE USER <appln_user> IDENTIFIED BY "<applnuser_password>"
アプリケーション・ユーザーには、アプリケーションのニーズとセキュリティ上の問題とのバランスを慎重にとりながら、最小権限アクセスに基づいたロールを付与する必要があります。詳細は、権限およびロールの構成を参照してください。
Javaアプリケーションの最初のステップは、セキュア・データ・ストアにリクエストを送信するために使用されるNoSQLHandle
を作成することです。このハンドルは、資格証明およびその他の認証情報を使用して構成されます。
- 前述のように、セキュア・プロキシを介してデータ・ストアにアクセスするアプリケーション・ユーザー(
appln_user
)を作成します。 - Oracle NoSQL Database Javaドライバをアプリケーションのクラスパスにインストールします。
- セキュア・アクセスの場合は、パラメータ化されたコンストラクタを使用して
StoreAccessTokenProvider
クラスのインスタンスを作成し、それを使用するようにNoSQLハンドルを構成します。次のコードを使用してプロキシに接続します。
説明String endpoint = "https://<proxy_host>:<proxy_https_port>"; StoreAccessTokenProvider atProvider = new StoreAccessTokenProvider("<appln_user>","<applnuser_password>".toCharArray()); NoSQLHandleConfig config = new NoSQLHandleConfig(endpoint); config.setAuthorizationProvider(atProvider); NoSQLHandle handle = NoSQLHandleFactory.createNoSQLHandle(config);
proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したプロキシ・ホストと一致する必要があります。proxy_https_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。appln_user
は、セキュア・ストアに接続するために作成されたユーザーです。これは、前述の項で作成したユーザーと一致する必要があります。applnuser_password
は、appln_user
のパスワードです。
- プロキシのSSL証明書を含むトラスト・ストアの詳細は、次の2つの方法のいずれかで指定できます。
次に示すように、Javaコードの一部として設定できます。
/* the trust store containing SSL cert for the proxy */ System.setProperty("javax.net.ssl.trustStore", trustStore); if (trustStorePassword != null) { System.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword); }
または、次のコマンドを使用して、アプリケーション・プログラムを起動し、driver.trust
ファイルのパスをJavaトラスト・ストアに設定できます。これは、プロキシがcertificate.pem
ファイルおよびkey-pkcs8.pem
ファイルを使用してすでに設定されているため必要となります。java -Djavax.net.ssl.trustStore=<fullpath_driver.trust> \ -Djavax.net.ssl.trustStorePassword=<password of driver.trust> \ -cp .:lib/nosqldriver.jar application_program
driver.trust
には、certificate.pem
またはrootCA.crt
証明書が含まれます。証明書certificate.pem
が、JAVA_HOME/jre/lib/security/cacerts
にリストされている信頼できるCAによって署名されたチェーンに含まれている場合は、JavaコマンドでJava環境パラメータ-Djavax.net.ssl.trustStore
を追加する必要はありません。
ハンドルは、最初にborneo.NoSQLHandleConfig
インスタンスを作成して、通信エンドポイント、認可情報、およびハンドル構成のデフォルト値を構成することで作成されます。
- 前述のように、セキュア・プロキシを介してデータ・ストアにアクセスするアプリケーション・ユーザー(
appln_user
)を作成します。 - セキュア・ストアを実行する場合は、
REQUESTS_CA_BUNDLE
環境変数を使用して証明書パスを指定する必要があります。
または$ export REQUESTS_CA_BUNDLE= <full-qualified-path-to-certificate/certificate.pem:$REQUESTS_CA_BUNDLE
borneo.NoSQLHandleConfig.set_ssl_ca_certs()
。 - 次のコードを使用してプロキシに接続します。
説明from borneo import NoSQLHandle, NoSQLHandleConfig from borneo.kv import StoreAccessTokenProvider endpoint = 'https://<proxy_host>:<proxy_https_port>' # Create the AuthorizationProvider for a secure store: ap = StoreAccessTokenProvider(<appln_user>, <applnuser_password>) # create a configuration object config = NoSQLHandleConfig(endpoint).set_authorization_provider(ap) # set the certificate path if running a secure store config.set_ssl_ca_certs(<ca_certs>) # create a handle from the configuration object handle = NoSQLHandle(config)
proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したプロキシ・ホストと一致する必要があります。proxy_https_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。appln_user
は、セキュア・ストアに接続するために作成されたユーザーです。これは、前述の項で作成したユーザーと一致する必要があります。applnuser_password
は、appln_user
のパスワードです。
Oracle NoSQL Database go
アプリケーションでの最初のステップは、サービスへのリクエストの送信に使用されるnosqldb.Client
ハンドルを作成することです。このハンドルは、資格証明およびその他の認証情報を使用して構成されます。
- 前述のように、セキュア・プロキシを介してデータ・ストアにアクセスするアプリケーション・ユーザー(
appln_user
)を作成します。 - 次のコードを使用してプロキシに接続します。
説明import ( "fmt" "github.com/oracle/nosql-go-sdk/nosqldb" "github.com/oracle/nosql-go-sdk/nosqldb/httputil" ) ...cfg:= nosqldb.Config{ Endpoint: "https://<proxy_host>:<proxy_https_port>", Mode: "onprem", Username: "<appln_user>", Password: "<applnuser_password>", }, // Specify the CertPath and ServerName // ServerName is used to verify the hostname for self-signed certificates. // This field is set to the "CN" subject value from the certificate specified by CertPath. HTTPConfig: httputil.HTTPConfig{ CertPath: "<fully_qualified_path_to_cert>", ServerName: "<server_name>", }, } client, err:=nosqldb.NewClient(cfg) iferr!=nil { fmt.Printf("failed to create a NoSQL client: %v\n", err) return } deferclient.Close() // Perform database operations using client APIs. // ...
proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したプロキシ・ホストと一致する必要があります。proxy_https_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。appln_user
は、セキュア・ストアに接続するために作成されたユーザーです。これは、前述の項で作成したユーザーと一致する必要があります。applnuser_password
は、appln_user
のパスワードです。
- 前述のように、セキュア・プロキシを介してデータ・ストアにアクセスするアプリケーション・ユーザー(
appln_user
)を作成します。 - セキュア・モードでは、プロキシにSSL証明書と秘密キーが必要です。プロキシ証明書のルート認証局(CA)が信頼できるルートCAのいずれでもない場合、ドライバはプロキシに接続するために証明書チェーン・ファイル(certificates.pemなど)またはルートCA証明書ファイル(rootCA.crtなど)を必要とします。かわりに自己署名証明書を使用している場合、ドライバは接続するために自己署名証明書の証明書ファイル(certificate.pemなど)を必要とします。
証明書または証明書チェーンをドライバに提供するには、コードで指定するか、環境変数として設定するかの2つのオプションがあります。
NoSQLハンドルの作成時に、httpOpt
プロパティを使用して証明書を指定できます。httpOpt
内では、次に示すように、ca
プロパティを使用してCAを指定できます。const client = new NoSQLClient({ ....., httpOpt: { ca: fs.readFileSync(<caCertFile>) },..... });
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。または、アプリケーションを実行する前に、次に示すように環境変数NODE_EXTRA_CA_CERTS
を設定します。
ここで、driver.trustは、CAの証明書チェーン・ファイル(certificates.pem)、ルートCAの証明書(rootCA.crt)または自己署名証明書(certificate.pem)のいずれかです。export NODE_EXTRA_CA_CERTS="<fully_qualified_path_to_driver.trust>"
- セキュア・モードでプロキシに接続するには、通信エンドポイントに加えて、ドライバ・ユーザーのユーザー名とパスワードを指定する必要があります。この情報は、
kvstore
プロパティのConfig#auth
オブジェクトに渡され、次に説明する3つの方法のいずれかで指定できます。ユーザー名とパスワードを直接指定することもできます。
説明const NoSQLClient = require('oracle-nosqldb').NoSQLClient; const client = new NoSQLClient({ endpoint: 'https://<proxy_host>:<proxy_https_port>', auth: { kvstore: { user: '<appln_user>', password: '<applnuser_password>' } } });
proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したプロキシ・ホストと一致する必要があります。proxy_https_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。appln_user
は、セキュア・ストアに接続するために作成されたユーザーです。これは、前述の項で作成したユーザーと一致する必要があります。applnuser_password
は、appln_user
のパスワードです。
資格証明は、ファイル・システム権限で保護されている別のファイルに格納することを選択できるため、資格証明はメモリーに格納されませんが、ログインが必要な場合にのみこのファイルからアクセスされるため、以前のオプションよりも安全です。資格証明ファイルの形式は次のとおりです。
その後、この資格証明ファイルを次のように参照できます。{ "user": "<appln_user>", "password": "<applnuser_password>" }
const NoSQLClient = require('oracle-nosqldb').NoSQLClient; const client = new NoSQLClient({ endpoint: 'https://<proxy_host>:<proxy_https_port>', auth: { kvstore: { credentials: '<path/to/credentials.json>' } } });
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。NoSQLClient
インスタンスの作成に使用される構成ファイルでcredentials.json
を参照することもできます。{ "endpoint": "https://<proxy_host>:<proxy_https_port>", "auth": { "kvstore": { "credentials": "<path/to/credentials.json>" } } }
const NoSQLClient = require('oracle-nosqldb').NoSQLClient; const client = new NoSQLClient('</path/to/config.json>');
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。
NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。次のステップを使用して、セキュア・データ・ストアに接続できます。
- 前述のように、セキュア・プロキシを介してデータ・ストアにアクセスするアプリケーション・ユーザー(
appln_user
)を作成します。 - セキュア・モードでプロキシに接続するには、通信エンドポイントに加えて、ドライバ・ユーザーのユーザー名とパスワードを指定する必要があります。この情報は
KVStoreAuthorizationProvider
のインスタンスで渡され、次に説明するいずれかの方法で指定できます。ユーザー名とパスワードを直接指定することもできます。
説明var client = new NoSQLClient( new NoSQLConfig { Endpoint = "https://<proxy_host>:<proxy_https_port>", AuthorizationProvider = new KVStoreAuthorizationProvider( <appln_user>, // user name as string <applnuser_password>) // password as char[] });
proxy_host
は、プロキシ・サービスを実行しているマシンのホスト名です。これは、以前に構成したプロキシ・ホストと一致する必要があります。proxy_https_port
は、プロキシがリクエストをリスニングしているポートです。これは、以前に設定したプロキシhttpsポートと一致する必要があります。appln_user
は、セキュア・ストアに接続するために作成されたユーザーです。これは、前述の項で作成したユーザーと一致する必要があります。applnuser_password
は、appln_user
のパスワードです。
NoSQLClient
インスタンスの存続期間中、メモリーにプレーン・テキストで格納されるため、このオプションは安全性が低下します。パスワードはchar[]として指定されているため、NoSQLClientの使用終了後に消去できます。資格証明は、ファイル・システム権限で保護されている別のファイルに格納することを選択できるため、資格証明はメモリーに格納されませんが、ストアへのログインが必要な場合にのみこのファイルからアクセスされるため、前のオプションよりも安全です。資格証明ファイルの形式は次のとおりです。
その後、この資格証明ファイルを次のように使用できます。{ "UserName": "<appln_user>", "Password": "<applnuser_password>" }
var client = new NoSQLClient( new NoSQLConfig { Endpoint: 'https://<proxy_host>:<proxy_https_port>', AuthorizationProvider = new KVStoreAuthorizationProvider( "<path/to/credentials.json>") });
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。NoSQLClient
インスタンスの作成に使用されるJSON構成ファイルでcredentials.jsonを参照することもできます。{ "Endpoint": "https://<proxy_host>:<proxy_https_port>", "AuthorizationProvider": { "AuthorizationType": "KVStore", "CredentialsFile": "<path/to/credentials.json>" } }
var client = new NoSQLClient("</path/to/config.json>");
config.json
では、認可プロバイダは、KVStoreAuthorizationProvider
のプロパティと、認可プロバイダのタイプを示す追加のAuthorizationTypeプロパティ(セキュアなオンプレミス・ストアの場合はKVStore)を持つJSONオブジェクトとして表されることに注意してください。
var client = new NoSQLClient(
new NoSQLConfig {
Endpoint: 'https://<proxy_host>:<proxy_https_port>',
AuthorizationProvider = new KVStoreAuthorizationProvider( "<path/to/credentials.json>"),
ConnectionOptions: { "TrustedRootCertificateFile": "<path/to/certificates.pem>" }
});
ノート:
ファイル・パスが指定されている場合、パスは、アプリケーションの現在の作業ディレクトリに対する絶対パスまたは相対パスにすることができます。