2022年5月13日金曜日

データベース・ツールの接続よりAutonomous Databaseに接続する

Oracle Cloudが提供しているデータベース・ツール接続(Database ToolsのConnections)を使用して、Always FreeのAutonomous Databaseへの接続を構成します。

データベース・ツール接続を構成することにより、SQLワークシートSQLcl(SQLを実行するコマンドライン・ツール、Cloud Shell内で実行されます)をすぐに呼び出すことができます。

 Oracle APEXには、SQLを実行する画面(SQLコマンド)が付属しています。また、Autonomous Databaseにはデータベース・アクション(SQL Developer Web)が含まれ、これにもSQLを実行する画面が付属しています。どのツールにも一長一短はあるため、用途に応じて使い分けるのが良いでしょう。

データベース・ツール接続は、ボールトに保存されたシークレットを、データベース・ユーザーパスワードウォレットとして使用します。そのため、あらかじめボールトを作成し、シークレットの保存に使用するマスター暗号化キーを準備します。


ボールトの準備


OCIコンソールアイデンティティとセキュリティより、ボールトを開きます。


以下のスクリーンショットでは、ルート・コンパートメントにYNVAULTとしてボールトが作成済みです。未作成の場合は、ボールトの作成をクリックし、作成画面を開きます。


画面右にドロワーが開きます。

作成するボールト名前を入力します。仮想プライベート・ボールトにするチェックは入れません。仮想プライベート・ボールトの利用は課金の対象になります。

ボールトの作成をクリックすると、指定した名前のボールトが作成されます。作成が完了するまでに、数分程度時間を要します。


作成されたボールトを開きます。

リソースマスター暗号化キーを選択し、キーの作成を実行します。


画面右にドロワーが開きます。

保護モードとしてソフトウェアを選択します。保護モードがHSM(Hardware Security Moduleの略 - 物理的な安全性が担保されている専用デバイスのこと)の場合、20が無料で利用できる上限です。法令に準拠するといった要件がある場合は、保護モードにHSMを選択することになるかと思います。

今回は名前ADBPROTKEYとしています。

キーのシェイプ:アルゴリズムとしてAES(暗号化および復号化に使用される対称キー)を選択します。シークレットの保存には共通鍵暗号方式が使われるため、AESを選択します。キーのシェイプ:長さは選択できる最大値である256ビットを選択します。

以上を設定し、キーの作成を実行します。


マスター暗号化キーが作成され、少々時間が経過したのち状態有効に変わります。


以上でボールトの準備は完了です。


接続の作成



OCIコンソールより、開発者サービスに含まれるデータベース・ツール接続を開きます。


接続の画面が開きます。

接続の作成をクリックし、新規にデータベースへの接続を作成します。


画面右にドロワーが開きます。

今回想定している接続先は、Always FreeのAutonomous Databaseです。

名前には、接続先となるデータベースと接続ユーザーが特定できるような名前が望ましいです。今回はapexdev-adminとしています。

APEXのSQLコマンドとデータベース・アクションの双方とも、接続ユーザーの切り替えはサインアウトとサインインのやり直しが必要です。データベース・ツールSQLワークシートでは接続の切り替えだけで接続ユーザーも切り替えられるので、その点は便利です。

Database cloud serviceにはOracle Autonomous Databaseを選択します。データベースの選択を選んでいると、指定しているコンパートメントに含まれるAutonomous Databaseのインスタンスを選択できます。今回はデータベースAPEXDEVを選択しています。ユーザー名としてAutonomous Databaseの管理者ユーザーであるadminを指定しています。

パスワード・シークレットの作成をクリックし、データベースの接続ユーザーADMINパスワードボールトシークレットとして保存します。


画面右にドロワーが開きます。

シークレットの名前を入力します。シークレットとして保存されるのはパスワードである文字列のみで、その他の情報は含まれません。そのため、異なるデータベース、ユーザーでもパスワードの文字列として同じであればパスワード・シークレットとして使用できます。

コンパートメント、シークレットを保存するボールト、シークレットの暗号化に使用するマスター暗号化キーを選択し、ユーザー・パスワードを入力します。

作成をクリックすると、パスワード・シークレットが作成されます。


作成されたパスワード・シークレットが、ユーザー・パスワード・シークレットとして設定されます。接続文字列はデータベースを選択した時点で、適切な文字列が設定されるため変更は不要です。

へ進みます。


SSL詳細の画面に移ります。

接続先はOracle Autonomous Databaseなので、ウォレット形式SSOウォレットになります。ウォレット・コンテンツ・シークレットを指定するため、ウォレット・コンテンツ・シークレットの作成をクリックします。


画面右にドロワーが開きます。

接続先がAutonomous Databaseであるため、接続に必要な情報はすべてリージョナル自動ログイン・ウォレットに含まれています。また、リージョナル自動ログイン・ウォレットだけがボールトシークレットして保存されます。そのため、すでに作成済みのウォレット・コンテンツ・シークレットがあれば再利用もできます。ただし、作成した時点のウォレットなので、その後に作成したAutonomous Databaseがあれば、その情報は含まれていません。その場合、ウォレット・コンテンツ・シークレットの再アップロードを実施します。

名前はリージョナル自動ログイン・ウォレットであることが分かる名前を付けます。今回はwallet-us-ashburn-1としています。コンパートメントボールトマスター暗号化キーを選択し、Autonomous Databaseからのリージョナル自動ログイン・ウォレットの取得を選びます。

以上を設定し、作成をクリックします。


作成したウォレット・コンテンツ・シークレットが設定されます。

作成をクリックし、接続apexdev-adminを作成します。


接続が作成されると、接続の詳細画面が表示されます。

接続の詳細には、SQLワークシートの実行、Cloud Shell内でのSQLclの起動パスワードの変更自動ログイン・ウォレットの更新といった作業を行うリンクが含まれています。



パスワードの更新



ユーザー・パスワード・シークレットをクリックすると、シークレット詳細バージョンが開かれます。ここでシークレット・バージョンの作成を実行し、シークレット・バージョンを更新します。


シークレット・タイプ・テンプレートとしてプレーン・テキストを選択します。シークレット・コンテンツとして、新しいパスワードを入力します。

シークレット・バージョンの作成を実行します。


新たなバージョンが作成され、ステータス現在となると、パスワードの更新は完了です。


パスワード・シークレットを共用しているすべての接続で、使用するパスワードが変更されます。


自動ログイン・ウォレットの更新



再アップロードをクリックします。


シークレットの名前を入力し、再アップロードをクリックします。


以上でリージョナル自動ログイン・ウォレットの更新は完了です。

SSOウォレット・コンテンツ・シークレットを開いて確認してみます。


新たにシークレット・バージョンが作成されていることが確認できます。



SQLワークシートの使用



接続の詳細画面よりSQLワークシートを実行できます。または、OCIコンソールからも起動できます。


SQLワークシートでは、接続先のデータベースや接続ユーザーを、サインインの操作をすることなく切り替えることができます。切り替え時に記述済みのSQLも維持されます。


それ以外では、記述したSQLをオブジェクト・ストレージに保存することができます。


逆に実行するSQLを、オブジェクト・ストレージからロードすることもできます。


SQLワークシートを使用することにより、特に複数のデータベースで同時に扱う場合に、効率良く作業を行うことができそうです。


SQLclの起動



SQLclの起動を行うと、Cloud Shell内でSQLclを実行され、データベースへの接続までが実施されます。

Javaのインストール、SQLclのダウンロード、ウォレットのダウンロードといった作業が不要で、すぐにSQLの実行ができるようになります。


Cloud ShellはSQLclが起動した状態で開きますが、!コマンドでSQLclからOSのシェル環境を呼び出すことができます。

データベース・ツール接続の紹介は以上になります。