1. Azure Active DirectoryのテナントIDの確認
Azureポータルにアクセスして、Azure Active DirectoryのテナントIDを確認し、メモしておきます。
2. Azure Blob Storageの準備
Azureポータルで「ストレージアカウント」に移動します。
左のメニューの「データストレージ」にある「コンテナー」をクリックします。
「+コンテナー」をクリックします。
作成するコンテナーの名前(ここでは「container-for-autonomous-database」)を入力し、「作成」をクリックします。
作成されたコンテナー名をクリックします。
「アップロード」をクリックします。
以下のようなファイル「testdata.txt」を作成します。
1,Paul
2,John
3,George
4,Ringo
ファイルを選択し、「アップロード」をクリックします。
コンテナー「container-for-autonomous-database」にファイル「testdata.txt」がアップロードされました。
3. Azure ADのサービス・プリンシパルを使用した認証の有効化
adminユーザとして、Autonomous Databaseに接続します。
[opc@swingbench ~]$ sqlplus admin/Demo#1Demo#1@atp1_medium
SQL*Plus: Release 21.0.0.0.0 - Production on 木 10月 13 10:26:57 2022
Version 21.7.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 水 10月 12 2022 14:38:22 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.1.0
に接続されました。
SQL>
Autonomous DatabaseでAzureのサービスアカウントを有効化するには、providerに'AZURE'、paramsのazure_tenantidにAzure Active DirectoryのテナントIDを指定してDBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを実行します。
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
provider => 'AZURE',
params => JSON_OBJECT('azure_tenantid' value 'Azure ADのテナントID'));
END;
/
paramsのazure_tenantidに1.で確認したAzure Active DirectoryのテナントIDをセットして、DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを実行します。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
3 provider => 'AZURE',
4 params => JSON_OBJECT('azure_tenantid' value 'a88eXXXX-0eXX-4bXX-b3XX-5cdbceXXXXXX')
5 );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
SQL>
cloud_integrationsビューを検索して、設定に必要なazure_app_name、azure_consent_urlの値を確認し、メモしておきます。
SQL> set pagesize 20
SQL> set linesize 200
SQL> col param_name for a20
SQL> SELECT param_name, param_value FROM cloud_integrations WHERE param_name LIKE 'azure%';
PARAM_NAME
--------------------
PARAM_VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
azure_app_name
ADBS_APP_OCID1.AUTONOMOUSDATABASE.OC1.AP-TOKYO-1.ANXHILJRSSL65IQAWFH2EIJ5VHOBLXXXXXXXXXXXXXXXXXXXXXXXXXX
azure_consent_url
https://login.microsoftonline.com/a88eXXXX-0eXX-4bXX-b3XX-5cdbceXXXXXX/oauth2/v2.0/authorize?client_id=f21dXXXX-d3XX-41XX-85XX-597c3bedXXXX&response_type=code&scope=User.read
azure_tenantid
a88eXXXX-0eXX-4bXX-b3XX-5cdbceXXXXXX
SQL>
4. Azure ADの同意ページへのアクセス
ブラウザから、3.でコピーしたazure_concent_urlのURLにアクセスします。
「組織の代理として同意する」のチェックをオンにし、「承諾」をクリックします。
これにより、Autonomous DatabaseがAzure ADにアプリケーションとして登録され、サービス・プリンシパルが利用できるようになります。
5. サービス・プリンシパルを使用したAzure Blob Storageへのアクセス許可
Azureポータルでストレージアカウントの概要画面に移動します。
左のメニューから「アクセス制御(IAM)」に移動します。
「追加」をクリックし、「ロールの割り当ての追加」をクリックします。
検索窓に「ストレージ」と入力し、表示された「ストレージ BLOB データ共同作成者」を選択して、「次へ」をクリックします。
「メンバーを選択する」をクリックします。
「選択」欄に3.でコピーしたazure_app_nameの値を入力し、表示されたアプリケーションをクリックして選択します。
「選択」をクリックします。
ウインドウ下部の「レビューと割り当て」をクリックします。
設定内容を確認し、問題がなければウインドウ下部の「レビューと割り当て」をクリックして、ロールの割り当てを追加します。
6. サービス・プリンシパルを用いたAzure Blob Storageへのアクセス
準備が整ったので、サービス・プリンシパルを使用して、Autonomous DatabaseからAzure Blob Storageのコンテナーにアクセスし、バケット内のオブジェクト一覧を取得してみます。
Azure Blob Storageのコンテナー内のオブジェクト一覧を取得するには、以下のような構文でDBMS_CLOUD.LIST_OBJECTSファンクションを使用します。
クレデンシャルには、「AZURE$PA」を指定します。
location_uriには、以下のような形式でAzure Blob Storageのコンテナーを指定します。
https://ストレージアカウント名.blob.core.windows.net/コンテナー名/
SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
credential_name => 'AZURE$PA',
location_uri => 'https://ストレージアカウント名.blob.core.windows.net/コンテナー名/');
コンテナーのURIを指定して実行してみます。
SQL> SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
2 credential_name => 'AZURE$PA',
3 location_uri => 'https://storageaccountofmine.blob.core.windows.net/container-for-autonomous-database/'
4 );
OBJECT_NAME
--------------------------------------------------------------------------------
testdata.txt
SQL>
サービス・プリンシパルを使用してAzure Blob Storageのコンテナーにアクセスし、先ほどアップロードしたtestdata.txtが格納されていることが確認できました。
次に、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャでAzure Blob Storageのコンテナー内にあるオブジェクト(ファイル)「testdata.txt」をもとにした外部表を作成し、testdata.txt内のデータをAutonomous Databaseから参照してみます。
file_uri_listには、以下のような形式でバケット内のオブジェクト(ファイル)を指定します。
https://ストレージアカウント名.blob.core.windows.net/コンテナー名/ファイル名
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name =>'作成するテーブル名',
credential_name =>'AZURE$PA',
file_uri_list =>'https://ストレージアカウント名.blob.core.windows.net/コンテナー名/ファイル名',
format => json_object('delimiter' value ','), -- ファイル内の列のデリミタを指定
column_list => 'ID NUMBER, name VARCHAR2(20)' -- 表の列定義を指定
);
END;
/
テーブル名をmember_azureとし、オブジェクト(ファイル)のURIを指定して、上記のSQLを実行してみます。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
3 table_name =>'member_azure',
4 credential_name =>'AZURE$PA',
5 file_uri_list =>'https://storageaccountofmine.blob.core.windows.net/container-for-autonomous-database/testdata.txt',
6 format => json_object('delimiter' value ','),
7 column_list => 'ID NUMBER, name VARCHAR2(20)'
8 );
9 END;
10 /
PL/SQLプロシージャが正常に完了しました。
SQL>
サービス・プリンシパルを使用して、Azure Blob Storageのコンテナー内にあるオブジェクト(ファイル)「testdata.txt」をもとにした外部表「member_azure」が作成できました。
外部表「member_azure」の内容を確認してみます。
SQL> SELECT * FROM member_azure;
ID NAME
---------- --------------------
1 Paul
2 John
3 George
4 Ringo
SQL>
Azure ADのサービス・プリンシパルを使用して作成した外部表「member_azure」経由で、Azure Blob Storageのコンテナー内にあるオブジェクト(ファイル)「testdata.txt」の内容を参照できることが確認できました。
7. Autonomous DatabaseでAzureのサービスプリンシパルを無効化
Autonomous DatabaseでAzureのサービスアカウントを無効にするには、providerに'AZURE'を指定してDBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTHプロシージャを実行します。
BEGIN
DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
provider => 'AZURE' );
END;
/