NoSQLハンドルの取得
Oracle NoSQL Databaseドライバを使用して表にアクセスする方法について学習します。NoSQLハンドルを作成することにより、アプリケーションの開発を開始します。NoSQLHandleを使用して表にアクセスし、すべての操作を実行します。
アプリケーションで、Oracle NoSQL Databaseプロキシへの接続となるNoSQLHandle
を作成します。このNoSQLHandle
を使用して、Oracle NoSQL Database表にアクセスし、Oracle NoSQL Database操作を実行できます。NoSQLHandle
をインスタンス化するには、NoSQLHandleConfig
クラスの参照をNoSQLHandleFactory.CreateNoSQLHandle
メソッドに渡します。NoSQLHandleConfig
クラスをインスタンス化するために、Oracle NoSQL DatabaseプロキシURLをパラメータ化されたコンストラクタとして指定します。
Oracle NoSQL Databaseサーバーで、非セキュア・モードまたはセキュア・モードでプロキシを構成できます。アプリケーションではNoSQLHandleConfig
クラスを使用して、ハンドルが使用するセキュリティ構成情報を指定できます。非セキュア・アクセスの場合は、引数なしのコンストラクタを使用してStoreAccessTokenProvider
クラスのインスタンスを作成します。セキュア・アクセスの場合は、パラメータ化されたコンストラクタを使用して、StoreAccessTokenProvider
クラスのインスタンスを作成します。StoreAccessTokenProvider
クラスの参照をNoSQLHandleConfig
クラスに提供して、適切な接続を確立します。
様々なクラスおよびメソッドの詳細は、Oracle NoSQL Java SDK APIリファレンスを参照してください。
NoSQLHandle
を作成する例を次に示します。
// Service URL of the proxy
String endpoint = "http://localhost:5000";
// 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);
NoSQLHandle
を作成する例を次に示します。
// Service URL of the secure proxy
String endpoint = "https://localhost:5000";
// Username of kvstore
String userName = "driver_user";
// Password of the driver user
String password = "DriverPass@@123";
//Construct StoreAccessTokenProvider with username and password
StoreAccessTokenProvider provider =
new StoreAccessTokenProvider(userName, password.toCharArray());
// 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);
StoreAccessTokenProvider
のパラメータ化されたコンストラクタは次の引数を使用します。
username
は、kvstoreのユーザー名です。password
は、kvstoreユーザーのパスワードです。
ユーザーは、セキュアなプロキシにアクセスするために、javaドライバのdriver.trust
ファイルを生成する必要があります。セキュリティ・ガイドのOracle NoSQL Databaseプロキシの証明書と秘密キーの生成を参照してください。
クライアント・プログラムにdriver.trust
ファイルを追加する例を次に示します。
java -Djavax.net.ssl.trustStore=driver.trust -cp .:/lib/nosqldriver.jar Example
ハンドルには、メモリーとネットワーク・リソースが関連付けられています。このため、アプリケーションがハンドルの使用を終了したら、NoSQLHandle.close
メソッドを起動してリソースを解放します。
ネットワーク・アクティビティ、リソース割当ておよび割当て解除のオーバーヘッドを最小限に抑えるには、ハンドルの作成と終了を繰り返さないようにすることをお薦めします。たとえば、操作ごとにハンドルを作成して終了すると、大量のリソース割当てのオーバーヘッドが発生し、アプリケーションのパフォーマンスが低下します。1つのハンドルで同時操作が可能なため、マルチスレッド・アプリケーションの表にアクセスするには単一のハンドルで十分です。複数のハンドルを作成してもパフォーマンス上の利点はなく、追加のリソース・オーバーヘッドが発生します。
ハンドルは、最初にborneo.NoSQLHandleConfig
インスタンスを作成して、通信エンドポイント、認可情報、およびハンドル構成のデフォルト値を構成することで作成されます。borneo.NoSQLHandleConfig
は、サービスへの接続を表します。作成後は、リソースをクリーンアップするために、メソッドborneo.NoSQLHandle.close()
を使用してクローズする必要があります。ハンドルはスレッドセーフで、共有するためのものです。
非セキュアなオンプレミスOracle NoSQL Database用の構成
非セキュアなストアを実行している場合は、http
リクエストを使用し、localhost:8080
を使用します。
from borneo import NoSQLHandle, NoSQLHandleConfig
from borneo.kv import StoreAccessTokenProvider
#
# Assume the proxy is running on localhost:8080
#
endpoint = 'http://localhost:8080'
# 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)
セキュアなオンプレミスOracle NoSQL Database用の構成
REQUESTS_CA_BUNDLE
環境変数を使用して証明書パスを指定する必要があります。$ export
REQUESTS_CA_BUNDLE=<path-to-certificate>/certificate.pem:$REQUESTS_CA_BUNDLE
さらに、アプリケーションの必要な操作(表やデータの操作など)を実行する権限を持つユーザー・アイデンティティをストアに(別々に)作成する必要があります。アイデンティティはborneo.kv.StoreAccessTokenProvider
で使用されます。ストアがセキュアでない場合は、borneo.kv.StoreAccessTokenProvider
の空のインスタンスが使用されます。
様々なクラスおよびメソッドの詳細は、Oracle NoSQL Python SDK APIリファレンスを参照してください。
from borneo import NoSQLHandle, NoSQLHandleConfig
from borneo.kv import StoreAccessTokenProvider
#
# Assume the proxy is secure and running on localhost:443
#
endpoint = 'https://localhost:443'
#
# Create the AuthorizationProvider for a secure store:
#
ap = StoreAccessTokenProvider(user_name, password)
#
# Create the AuthorizationProvider for a not secure store:
#
ap = StoreAccessTokenProvider()
#
# 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)
Oracle NoSQL Database go
アプリケーションでの最初のステップは、サービスへのリクエストの送信に使用されるnosqldb.Client
ハンドルを作成することです。そのクライアント・ハンドルのインスタンスは、複数のゴールーチンによる同時使用でも安全であり、マルチゴールーチン・アプリケーションで共有されることを目的としています。このハンドルは、資格証明およびその他の認証情報を使用して構成されます。
非セキュアなオンプレミスOracle NoSQL Database用の構成
cfg:= nosqldb.Config{
Mode: "onprem",
Endpoint: "http://exampleHostServer:8080",
}
client, err:=nosqldb.NewClient(cfg)
...
セキュアなオンプレミスOracle NoSQL Database用の構成
cfg:= nosqldb.Config{
Mode: "onprem",
Endpoint: "https://exampleHostServer",
Username: "driverUser",
Password: []byte("ExamplePassword__123"),
HTTPConfig: httputil.HTTPConfig{
CertPath: "/path/to/server-certificate",
ServerName: "exampleHostServer", // should match the CN subject value from the certificate
},
}
client, err:=nosqldb.NewClient(cfg)
様々なクラスおよびメソッドの詳細は、Oracle NoSQL Go SDK APIリファレンスを参照してください。
NoSQLClient
クラスは、サービスへのメイン・アクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。この情報は、プレーンなJavaScriptオブジェクトで表され、オブジェクト・リテラルとしてNoSQLClient
のコンストラクタに提供できます。または、この情報をJSON構成ファイルに格納し、NoSQLClient
のコンストラクタをそのファイルへのパス(絶対パスまたはアプリケーションの現在のディレクトリに対する相対パス)とともに格納することもできます。メソッドの詳細は、NoSQLClientクラスを参照してください。
非セキュアなストアへの接続
非セキュア・モードでプロキシに接続するには、通信エンドポイントを指定する必要があります。
import { NoSQLClient, ServiceType } from 'oracle-nosqldb';
const client = new NoSQLClient({
serviceType: ServiceType.KVSTORE,
endpoint: '<myhost>:8080'
});
ノート:
すべてのコード・サンプルにおいて、myhost:8080
を、エンドポイントの実際のシステム/ポートに置き換えます。
{
"serviceType": "KVSTORE",
"endpoint": "myhost:8080",
}
import { NoSQLClient } from 'oracle-nosqldb';
const client = new NoSQLClient('/path/to/config.json');
セキュア・ストアへの接続
- ユーザー名とパスワードを直接渡す ユーザー名とパスワードを直接指定できます。パスワードはメモリーにプレーン・テキストで格納されるため、このオプションは安全性が低下します。
import { NoSQLClient } from 'oracle-nosqldb'; const client = new NoSQLClient({ endpoint: 'https://myhost:8081', auth: { kvstore: { user: 'John', password: 'johnsPassword' } } });
-
ファイルへの資格証明の格納:
ファイル・システムの権限で保護されている別のファイルに資格証明を格納することを選択できます。資格証明ファイルは、次の形式である必要があります:{ "user": "<Driver user name>", "password": "<Driver user password>" }
その後、このサンプル資格証明ファイルを次のように参照できます:import { NoSQLClient } from 'oracle-nosqldb'; const client = new NoSQLClient({ endpoint: 'https://myhost:8081', auth: { kvstore: { credentials: 'path/to/credentials.json' } } });
-
独自のKVStoreCredentialsProviderの作成:
KVStoreCredentialsProviderインタフェースのインスタンスとして、ドライバ資格証明をセキュアに格納し取得するための独自の資格証明プロバイダを実装できます。loadCredentials関数は、Promiseを返すため、非同期関数として実装できます。import { NoSQLClient } from 'oracle-nosqldb'; class MyKVStoreCredentialsProvider { constructor() { // Initialize required state information if needed } async loadCredentials() { // Obtain client id, client secret, user name and user password somehow return { // Return credentials object as a result user: driverUserName, password: 'driverPassword' }; } } let client = new NoSQLClient({ endpoint: 'https://myhost:8081', auth: { kvstore: { credentials: new MyKVStoreCredentialsProvider(myArgs...) } } });
クラスNoSQLClient
は、サービスへのメイン・アクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。この情報は、NoSQLClient
のコンストラクタにインスタンスを提供できるNoSQLConfig
クラスで表されます。または、構成情報をJSON構成ファイルに格納し、そのファイルへのパス(絶対パスまたは現在のディレクトリに対する相対パス)を取得するNoSQLClient
のコンストラクタを使用することもできます。
非セキュアなストアへの接続
非セキュアなモードでは、ドライバはHTTPプロトコル経由でプロキシと通信します。必要な情報は通信エンドポイントのみです。オンプレミスNoSQLデータベースの場合、エンドポイントはプロキシのURLをhttp://proxy_host:proxy_http_portの形式で指定します。非セキュア・モードでプロキシに接続するには、通信エンドポイントおよびサービス・タイプをServiceType.KVStore
として指定する必要があります。
var client = new NoSQLClient(
new NoSQLConfig
{
ServiceType = ServiceType.KVStore,
Endpoint = "myhost:8080"
});
{
"ServiceType": "KVStore",
"Endpoint": "myhost:8080"
}
NoSQLClient
インスタンスを作成できます。varclient = new NoSQLClient("/path/to/config.json");
セキュア・ストアへの接続 :
セキュア・モードでプロキシに接続するには、通信エンドポイントに加えて、ドライバ・ユーザーのユーザー名とパスワードを指定する必要があります。この情報はKVStoreAuthorizationProvider
のインスタンスで渡され、次に示す3つの方法のいずれかで指定できます。
ユーザー名とパスワードを直接渡す
ユーザー名とパスワードを直接指定することもできます。パスワードはNoSQLClient
インスタンスの存続期間中、メモリーにプレーン・テキストで格納されるため、このオプションは安全性が低下します。パスワードはchar[]として指定されているため、NoSQLClient
の使用終了後に消去できます。
{
"user": "<Driver user name>",
"password": "<Driver user password>"
}
var client = new NoSQLClient(
new NoSQLConfig
{
Endpoint: 'https://myhost:8081',
AuthorizationProvider=newKVStoreAuthorizationProvider(
"path/to/credentials.json")
});
Task<KVStoreCredentials>
を返すデリゲート関数であるため、非同期に実装できます。var client = new NoSQLClient(
newNoSQLConfig
{
"Endpoint": "https://myhost:8081",
AuthorizationProvider=newKVStoreAuthorizationProvider(
async (CancellationToken) => {
// Retrieve the credentials in a preferred manner.await..........
returnnewKVStoreCredentials(myUserName, myPassword);
})
});
すべてのクラスおよびメソッドの詳細は、Oracle NoSQL Dotnet SDK APIリファレンスを参照してください。