本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の1つです。
プライベート・サブネット内の Oracle DB/ADB に接続
データベース・ツールは、2021年11月3日にリリースされた新しいOCIマネージド・サービスです。これにより、OCI内の任意のOracleまたはMySQL DBサービスへの接続を作成できます。データベース接続とSQLワークシートを併用することで、データベースへの直接SQLアクセスができます。パスワードや「Autonomous DB」のウォレット・ファイルなどの機密情報は暗号化されて、OCIボールトに安全に保存されます。
この新サービスを使用し、OCIの「DB System Database」および「Autonomous DB」に接続する方法を紹介したいと思います。少しお役に立てれば幸いです。
サポート対象のDBタイプ
Autonomous Database
DB system database (BM,VM,Exadata)
Exadata VM cluster database
動作検証環境
項目 | DB System | Autonomous DB |
---|---|---|
DBタイプ | VM | Autonomous Data Warehouse (Shared) |
DBバージョン | 21c Standard Edtion | 19c |
サブネット | プライベート・サブネット | N/A |
接続タイプ | プライベート・エンドポイント | パブリック |
ステップ
1. 準備
1-1) IAMポリシーの作成
下記のリソースに対する「管理」権限は必要です。
Database Tools Service, Vaults, VCNs, Oracle DB or Autonomous DB Services, Secrets, Keys.
ポリシーの例:
事前に「toolsConnectionAdmin」という名前のグループを用意してください。
allow group toolsConnectionAdmin to manage virtual-network-family in compartment PoC
allow group toolsConnectionAdmin to manage database-family in compartment PoC
allow group toolsConnectionAdmin to manage autonomous-database-family in compartment PoC
allow group toolsConnectionAdmin to manage vaults in compartment PoC
allow group toolsConnectionAdmin to manage secret-family in compartment PoC
allow group toolsConnectionAdmin to manage database-tools-family in compartment PoC
ルート・コンパートメントの下に「PoC」というコンパートメントを使用しています。
必要に応じて、ポリシーをテナンシー・レベル(in tenancy)で設定できます。
1-2) ボールトの作成
パスワードやウォレット・ファイルなどの機密情報はOCIボールトに保存されますので、ボールトを持っていない場合は作成する必要があります。
メニュー → アイデンティティとセキュリティ → ボールト
ボールト名を入力し、「ボールトの作成」ボタンをクリックします。
ボールトが作成された後、マスター暗号化キーの作成を続行します。
1-3) プライベート・エンドポイントの作成
セキュリティの原因で、通常ならデータベースは、プライベート・サブネットに配置されます。この場合、プライベート・エンドポイントを介しDBにアクセスする必要があります。
メニュー → 開発者サービス → データベース・ツール → プライベート・エンドポイント
以下のように必要な情報を入力し、「作成」ボタンをクリックしてください。
データベースの選択は、デフォルトのオプションで、この例で使用します。
「データベース・タイプ」と「DBシステム」のリストは、「データベースの選択」を指定した場合のみ、使用できます。
まもなくプライベート・エンドポイントは、アクティブの状態になります。
1-4) 要塞の作成 (オプション)
プライベート・エンドポイントを介してSQLclを起動する場合lは、このステップを実施する必要があります。以下のいずれを該当する場合、スキップできます。
- SQLclを起動したくない場合
- パブリックのアクセスを使用して、パブリック・サブネットに存在するデータベースに接続する場合
メニュー → アイデンティティとセキュリティ → 要塞 -> 要塞の作成
必要な情報を入力し、「要塞の作成」ボタンをクリックします。
項目 | コメント |
---|---|
要塞名 | 英数字のみ |
ターゲット・サブネット | ターゲットDBが配置されている場所。 |
CIDRブロック許可リスト | ターゲットDBへの接続を許可するIPアドレス範囲。 範囲を絞ることはお勧め(以下の"All Zero"はテスト用のみ)。 作成後に編集できる。 |
2. DBシステム・データベースへの接続方法
メニュー → 開発者サービス → データベース・ツール → 接続 → 接続の作成
項目 | コメント |
---|---|
データベースの選択 | デフォルト |
データベース情報の入力 | これを指定したら、既存のDBをリストから選択できなくなる。 |
データベース・タイプ | "DB System Database"を選択する。 (「データベースの選択」を指定した場合、利用可能。) |
データベース・システム | 既存のDBシステムを選択する。 (「データベースの選択」を指定した場合、利用可能。) |
データベース・ホーム | データベース・ホームを選択する。 (「データベースの選択」を指定した場合、利用可能。) |
データベース | ターゲットDBを選択する。 (「データベースの選択」を指定した場合、利用可能。) |
プラガブル・データベース オプション | CDBに接続する場合は、選択不要。 (「データベースの選択」を指定した場合、利用可能。) |
ユーザー名 | DBユーザー |
ロール | 選択しない場合、"Default"のロールとなる。 |
ユーザー・パスワード・シークレット | 持っていない場合は、「パスワードシークレットの作成」をクリックして新規作成する。 |
接続文字列 |
「データベースの選択」を指定した場合、接続文字列が自動に作成されるので、編集しなくてもよい。 「データベース情報の入力」を指定した場合は、接続文字列を入力する必要がある。 |
「パスワード・シークレットの作成」のダイアログ画面にユーザー・パスワードを入力し、「作成」ボタンをクリックします。
「プライベート・エンドポイントを介したネットワーク接続」にチェックを入れ、ステップ1-3で作成したプライベート・エンドポイントを選択し、「次へ」ボタンをクリックして進みます。
ウォレット・フォーマットは「なし」を選択し、「作成」ボタンをクリックします。
作成には数分かかります。ステータスがアクティブになったら、「検証」ボタンをクリックしてDB接続を検証します。
検証成功の場合、以下のようなメッセージが表示されます。
接続の問題
DBへの接続が失敗した場合、以下のような原因は一般的です。ご参考ください。
- 無効なユーザーまたはパスワード。
- ユーザー・ロールの指定は間違った。
- DBインスタンスは、まだ起動していない。
- DBリスナー・ポート(TCP 1521)は、Ingressルールに追加されていない。(セキュリティ・リストまたはNSGを確認してください。)
SQLワークシート
「接続の詳細」画面のボタンをクリックして「SQLワークシート」を起動すると、SQLコマンドを実行できます。
SQLコマンドだけでなく、OCIオブジェクト・ストレージまたはローカルにあるSQLスクリプトも実行できます。複数のデータベース接続を作成した場合は、メニュー(右上)から使用中の接続を変更できます。
SQLclの起動
「接続の詳細」画面のボタンをクリックして、SQLclを起動します。この時、STEP1-4で作成した要塞を指定します。
Cloud ShellからSQLclを起動した後、通常どおりSQLコマンドを実行できます。
DBシステム・データベースへの接続はここまで完了です。
3. Autonomous DBへの接続方法
インターネット、或いはプライベート・エンドポイントのアクセスで、既存の「Autonomous DB」に接続できます。この例ではパブリックの「Autonomous DB」を使用していますので、プライベート・エンドポイントの設定をスキップします。
Autonomous DBへの接続を作成
メニュー → 開発者サービス → データベース・ツール → 接続 → 接続の作成
項目 | コメント |
---|---|
データベースの選択 | デフォルト |
データベース・タイプ | "Autonomous Database"を選択する。 (「データベースの選択」を指定した場合、利用可能。) |
ユーザー名 | この例では「admin」を使用する。(他の既存のユーザーも使用できる)。 |
ユーザー・パスワード・シークレット | 「パスワード・シークレットの作成」ボタンをクリックし、新規作成する。 |
必要な情報を入力し、「作成」ボタンをクリックしてください。
この例では「admin」ユーザーを使用しているため、「ユーザー・パスワード」はDB管理者のパスワードです。
パスワード・シークレットを作成した後、前の画面に戻ります。「接続文字列」は自動的に作成されますので、通常なら編集する必要はなく、「次へ」をクリックし続行します。(この例では、プライベート・エンドポイントの設定をスキップします。必要に応じて設定してください。)
※接続文字列は、ファイル tnsnames.ora(圧縮されたウォレット・ファイルにある)から同じ内容を取得できます。
ウォレット・フォーマットは「SSO Wallet」を選択し、「Create Wallet Content Secret」ボタンをクリックします。
必要な情報を入力し、次の3つのオプションからウォレット・ファイルの取得方法を選択します。
オプション | コメント |
---|---|
Autonomous Databaseからのリージョナル自動ログイン・ウォレットの取得 | Shared Autonomous DB、かつCross-Region Data Guardを使用しない場合、利用可能。(この例) |
Autonomous Databaseからのインスタンス自動ログイン・ウォレットの取得 | 以下のいずれの場合、利用可能。 Dedicated Autonomous DBの場合 Shared Autonomous DB、かつCross-Region Data Guardを使用している場合 |
自動ログイン・ウォレットのアップロード | いつでも利用可能 |
この例では一番目のオプション(デフォルト)を選択します。以下のように「作成」ボタンをクリックして続行します。
"SSO Wallet Content Secret"の準備ができましたら、「作成」ボタンをクリックし接続を作成します。
まもなく接続は、アクティブの状態になります。
SQLワークシートを起動し、SQLコマンドを実行します。
SQLclを起動し、SQLコマンドを実行します。
「自動ログイン・ウォレットのアップロード」オプションを使用したい場合は、最初にウォレット・ファイルをダウンロードする必要があります。
ウォレット・ファイルのダウンロード
メニュー → Oracle Database → Autonomous Database → Autonomous Databaseの詳細 → DB接続 → ウォレットのダウンロード
ウォレットのパスワードを作成し、「ダウンロード」ボタンをクリックします。 (これは、Autonomous DBの管理者ユーザのパスワードではありません。)
圧縮ファイルを保存してから解凍します。
解凍後、ウォレット・ファイル cwallet.sso は、以下のようです。
ファイル cwallet.sso をアップロードし、「作成」ボタンをクリックします。
「作成」ボタンをクリックして接続を作成します。上記の方法と同じです。
ここまで、Autonomous DBへの接続は完了です。SQLコマンドの実行は、SQLワークシートまたはSQLclプロンプトの両方からできます。プライベート・エンドポイントを使用する場合、SQLclを起動する時に要塞は必要です。これは、DBシステム・データベースに接続する場合と同様です。
データベース・ツールをうまく利用するため、いくつかのベスト・プラクティスがあります。詳細については、ドキュメントをご確認ください。
以上
関連記事
オラクル・クラウドの個人ブログ一覧
SQL Developerで各種なDBへの接続方法
OCI Cloud Shell上のSQL PlusからADBに接続する
OCI Bastion経由でプライベート・サブネット内のOracle DBに接続
OCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続