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
クラスに提供して、適切な接続を確立します。
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ユーザーのパスワードです。
ノート:
クライアント・ドライバ・プログラムでは、JVM環境パラメータjavax.net.ssl.trustStore
にdriver.trust
ファイルのパスを含めて、セキュアな接続が動作するようにする必要があります。driver.trust
は、プロキシが構成され、起動されたときに配布する必要があります。このファイルは、クライアント・ドライバがプロキシ・サーバーのIDを認証して、安全な接続を確立できるようにします。
ユーザーは、セキュアなプロキシにアクセスするために、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()
を使用してクローズする必要があります。ハンドルはスレッドセーフで、共有するためのものです。
REQUESTS_CA_BUNDLE
環境変数を使用して証明書パスを指定する必要があります。$ export
REQUESTS_CA_BUNDLE=<path-to-certificate>/certificate.pem:$REQUESTS_CA_BUNDLE
さらに、アプリケーションの必要な操作(表やデータの操作など)を実行する権限を持つユーザー・アイデンティティをストアに(別々に)作成する必要があります。アイデンティティはborneo.kv.StoreAccessTokenProvider
で使用されます。ストアがセキュアでない場合は、borneo.kv.StoreAccessTokenProvider
の空のインスタンスが使用されます。
from borneo import NoSQLHandle, NoSQLHandleConfig
from borneo.kv import StoreAccessTokenProvider
#
# Assume the proxy is running on localhost:8080
#
endpoint = 'http://localhost:8080'
#
# 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用の構成
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)
クラスNoSQLClient
は、サービスへのメイン・アクセス・ポイントを表します。NoSQLClient
のインスタンスを作成するには、適切な構成情報を指定する必要があります。この情報は、プレーンJavaScriptオブジェクトで表され、オブジェクト・リテラルとしてNoSQLClient
のコンストラクタに提供できます。または、この情報をJSON構成ファイルに格納し、NoSQLClient
のコンストラクタをそのファイルへのパス(絶対パスまたはアプリケーションの現在のディレクトリに対する相対パス)とともに格納することもできます。
非セキュアなストアへの接続
非セキュア・モードでプロキシに接続するには、通信エンドポイントを指定する必要があります。
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const ServiceType = require('oracle-nosqldb').ServiceType;
const client = new NoSQLClient({
serviceType: ServiceType.KVSTORE,
endpoint: 'myhost:8080'
});
{
"serviceType": "KVSTORE",
"endpoint": "myhost:8080",
}
const NoSQLClient = require('oracle-nosqldb').NoSQLClient;
const client = new NoSQLClient('/path/to/config.json');
セキュア・ストアへの接続
- ユーザー名とパスワードを直接渡す ユーザー名とパスワードを直接指定できます。パスワードはメモリーにプレーン・テキストで格納されるため、このオプションは安全性が低下します。
const NoSQLClient = require('oracle-nosqldb').NoSQLClient; const client = new NoSQLClient({ endpoint: 'https://myhost:8081', auth: { kvstore: { user: 'John', password: johnsPassword } } });
-
ファイルへの資格証明の格納:
ファイル・システムの権限で保護されている別のファイルに資格証明を格納することを選択できます。資格証明ファイルの形式は次のとおりです。{ "user": "<Driver user name>", "password": "<Driver user password>" }
その後、この資格証明ファイルを次のように参照できます。const NoSQLClient = require('oracle-nosqldb').NoSQLClient; const client = new NoSQLClient({ endpoint: 'https://myhost:8081', auth: { kvstore: { credentials: 'path/to/credentials.json' } } });
-
独自のKVStoreCredentialsProviderの作成:
KVStoreCredentialsProviderインタフェースのインスタンスとして、ドライバ資格証明をセキュアに格納および取得するための独自の資格証明プロバイダを実装できます。loadCredentialsはPromiseを返すため、非同期関数として実装できます。const NoSQLClient = require('oracle-nosqldb').NoSQLClient; 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);
})
});
NoSQL接続の取得
Spring Dataアプリケーションでは、NosqlDbConfig
Spring Beanを提供するAppConfig
クラスを設定する必要があります。NosqlDbConfig
Spring Beanは、Oracle NoSQL Databaseへの接続方法を示します。
AbstractNosqlConfiguration
クラスを拡張するAppConfig
クラスを作成します。これにより、Oracle NoSQL Database SDK for Spring Dataへの接続およびセキュリティ・パラメータが公開されます。
Oracle NoSQL Databaseプロキシへの接続の詳細を含むNosqlDbConfig
インスタンス・オブジェクトを返します。このNosqlDbConfig
クラスに、@Configuration
と@EnableNoSQLRepositories
の注釈を指定します。@Configuration
注釈は、AppConfig
クラスが、プログラムの実行前にロードする必要がある構成クラスであることをSpring Data Frameworkに通知します。@EnableNoSQLRepositories
注釈は、プログラムをロードし、NosqlRepository
インタフェースを拡張するリポジトリを検索する必要があることをSpring Data Frameworkに通知します。@Bean
注釈は、リポジトリをインスタンス化するために必要です。
NosqlDBConfig
クラスのインスタンスを返すnosqlDbConfig @Bean
の注釈付きメソッドを作成します。NosqlDBConfig
インスタンス・オブジェクトは、Oracle NoSQL Databaseを認証するためにSpring Data Frameworkで使用されます。
StoreAccessTokenProvider
クラスを使用して、Oracle NoSQL Databaseに接続して認証するようにSpring Data Frameworkを構成できます。セキュアでないアクセス権のあるOracle NoSQL DatabaseプロキシのURLを指定する必要があります。StoreAccessTokenProvider
クラスの詳細は、SDK for Spring Data APIリファレンスのStoreAccessTokenProviderに関する項を参照してください。import com.oracle.nosql.spring.data.config.AbstractNosqlConfiguration;
import com.oracle.nosql.spring.data.config.NosqlDbConfig;
import com.oracle.nosql.spring.data.repository.config.EnableNosqlRepositories;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import oracle.nosql.driver.kv.StoreAccessTokenProvider;
@Configuration
@EnableNosqlRepositories
public class AppConfig extends AbstractNosqlConfiguration {
@Bean
public NosqlDbConfig nosqlDbConfig() {
AuthorizationProvider authorizationProvider;
authorizationProvider = new StoreAccessTokenProvider();
/* Provide the hostname and port number of the NoSQL cluster.*/
return new NosqlDbConfig("http://<host:port>", authorizationProvider);
}
}
import com.oracle.nosql.spring.data.config.AbstractNosqlConfiguration;
import com.oracle.nosql.spring.data.config.NosqlDbConfig;
import com.oracle.nosql.spring.data.repository.config.EnableNosqlRepositories;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import oracle.nosql.driver.kv.StoreAccessTokenProvider;
@Configuration
@EnableNosqlRepositories
public class AppConfig extends AbstractNosqlConfiguration {
@Bean
public NosqlDbConfig nosqlDbConfig() {
AuthorizationProvider authorizationProvider;
/* Provide the username and password of the NoSQL cluster.*/
authorizationProvider = new StoreAccessTokenProvider(user, password);
/* Provide the hostname and port number of the NoSQL cluster.*/
return new NosqlDbConfig("http://<host:port>", authorizationProvider);
}
}