7 Oracle DBaaSデータベースに対するIAMユーザーの認証と認可

Identity and Access Management (IAM)ユーザーは、Oracle Database as a service (Oracle DBaaS)インスタンスに接続するように構成できます。

7.1 Oracle DBaaSに対するIAMユーザーの認証と認可の概要

Oracle DBaaSインスタンスに対するIAMユーザーの認証および認可を開始する前に、全体的なプロセスについて理解する必要があります。

7.1.1 Oracle DBaaSに対するIAMユーザーの認証と認可について

Oracle DBaaSインスタンスのユーザーは、Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)で集中管理できます。

この統合は、次のOracle Database環境で実行できます。

  • Oracle Autonomous Database on Dedicated Exadata Infrastructure
  • Oracle Autonomous Database Serverless
  • Oracle Base Database Service
  • Oracle Exadata Database Service on Dedicated Infrastructure

IAMを構成する手順では、これらの環境を網羅するために「Oracle DBaaS」という用語を使用します。

ノート:

Oracle Databaseは、アイデンティティ・ドメインを含むOracle Cloud Infrastructure (OCI) IAMと、アイデンティティ・ドメインを含まないレガシーIAMに対するOracle DBaaS統合をサポートしています。アイデンティティ・ドメインを含むIAMは、2021年11月8日以降に作成された新しいOCIテナンシで導入されました。Autonomous Database Serverlessは、デフォルトおよびデフォルト以外のアイデンティティ・ドメイン内のユーザーとグループをサポートしています。他のDBaaSプラットフォームは、デフォルトのアイデンティティ・ドメイン内のユーザーおよびグループのみをサポートします。

Oracle Database管理者は、OCI IAM管理者と連携して、Oracle DBaaSインスタンスに接続する必要があるOCI IAMユーザーの認証および認可を管理します。IAMユーザーが接続できるOracle DBaaSインスタンスのタイプは、Oracle Autonomous Database Serverless、Oracle Autonomous Database on Dedicated Exadata InfrastructureおよびOracle Base Database Serviceです。

このタイプの接続により、IAMユーザーはOracle DBaaSにアクセスできます。これらのユーザーは通常、ユーザー名とパスワードを使用してログインします(SQL*Plusなどを使用)。ユーザーは、DBaaSインスタンスにアクセスするときに、トークンを使用するIAMシングル・サインオン(SSO)資格証明を使用してログインすることもできます。IAMパスワード認証を使用するか、IAM SSOトークン認証を使用するかの選択は、ユースケースおよびユーザー・プリファレンスによって異なります。

既存のサポートされているデータベース・クライアントを使用するレガシー・アプリケーションは、IAMユーザー名とパスワードの使用にシームレスに移行できます。また、IAMデータベースの段階的なパスワード・ロールオーバー機能を使用して、IAMに2つ目のデータベース・パスワードを設定し、停止時間なしでアプリケーション・パスワードを更新することもできます。

IAMトークンをサポートするように更新されたツールおよびアプリケーションにより、IAMでユーザーを直接認証し、データベース・アクセス・トークンをDBaaSインスタンスに渡すことができます。SQL*Plusなどの既存のデータベース・ツールでは、IAMデータベース・パスワードを使用し、既存のパスワード・ログイン・プロトコルを使用してデータベースで直接認証でき、データベース・クライアントでは、IAMユーザー名とIAMデータベース・パスワードを使用してOCI IAMからデータベース・トークン(db-token)をリクエストし、db-tokenをIAMユーザー・アクセスのためにデータベースに送信できます。データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードと引き換えに、db-tokenをリクエストできます。その他のすべてのIAM資格証明(API-key、インスタンス・プリンシパル、リソース・プリンシパル、セキュリティ・トークン、委任トークン)では、OCI CLIなどのアプリケーションまたはヘルパー・クライアントからdb-tokenをリクエストする必要があります。データベース・アクセス・トークン(db-token)は範囲が指定された所有証明(POP)トークンで、公開キーが付属しています。db-tokenがデータベースに送信される前に、データベース・クライアントは、トークンの公開キーに関連付けられている秘密キーを使用してdb-tokenに署名します。これにより、トークンの送信者がトークンの正しい所有者であることが「証明」されます。db-tokenを使用できる範囲を削減するために、db-tokenのリクエストの一部としてオプションで範囲を含めることができます。db-tokenのデフォルト範囲はテナンシ全体ですが、コンパートメントおよび個々のデータベースを範囲として定義することもできます。詳細は、OCI CLIコマンド・リファレンスgetの説明を参照してください。

IAMユーザーおよびOCIアプリケーションは、次のいずれかの方法を使用して、IAMからデータベース・トークンをリクエストできます。

  • 既存の有効なセキュリティ(セッション)トークンの使用
  • IAMで認識されるAPIキーの使用
  • OCIクラウド・シェル内での委任トークンの使用
  • OCIコンピュート・インスタンス上のアプリケーションに対するOCIインスタンス・プリンシパルの使用
  • リソース・プリンシパルを持つアプリケーションに対するOCIリソース・プリンシパルの使用
  • IAMユーザー名およびIAMデータベース・パスワードの使用(データベース・クライアントのみがリクエスト可能)

IAMユーザーがOracle DBaaSインスタンスに接続できるようにするための一般的なプロセスは次のとおりです。

  1. IAM管理者は、IAMユーザー・アカウントおよびグループを作成および管理し、タスクに基づいてIAMユーザーを適切なIAMグループに追加します。
  2. Oracle DBaaSインスタンスでは、データベース管理者がOracle DBaaSとIAMエンドポイント間の接続を有効にします。

    データベースがAutonomous Database on Dedicated Exadata Infrastructureの場合は、新しいPDBのIAM接続が自動的に有効になります。詳細は、Oracle DBaaSのドキュメントを参照してください。

  3. Oracle DBaaSサーバーで、データベース管理者が、次のタイプのマッピングを実行してIAMユーザーの認可を有効にします。
    • 共有Oracle Databaseグローバル・ユーザー・アカウントへのIAMグループのマッピング
    • Oracle Databaseグローバル・ロールへのIAMグループのマッピング
    • Oracle Databaseグローバル・ユーザーへのIAMユーザーの排他的マッピング

    IAMユーザーは、1つのスキーマにマップする必要があります(排他的にマップするか、共有スキーマにマップします)。ユーザーはオプションで、1つ以上のグローバル・ロールにマップされるIAMグループのメンバーにすることもできます。

  4. 次のユースケースは、集中管理されたIAM認証および認可を使用してOracle DBaaSに接続する、いくつかの一般的なシナリオです。
    • SQL*Plusの使用による、IAMユーザー名およびIAMデータベース・パスワードを使用したOracle DBaaSへの接続。
    • SQL*Plusの使用による、IAM SSOトークンを使用した接続。
    • SQLclの使用による、IAMパスワードまたはIAMトークンを使用したOracle DBaaSへの接続。
    • Oracle Cloud Infrastructure (OCI) Cloud Shell内のSQL*Plusの使用による、IAMパスワードまたはIAM SSOトークンを使用したOracle DBaaSへの接続。IAMを使用した認証と認可は、ローカル・データベース・ユーザー・アカウント(非グローバル)に対する認証とは対照的に、時間がかかります。

7.1.2 Oracle DBaaSとIAMの統合のアーキテクチャ

Oracle DBaaSインスタンスとIAMの統合のアーキテクチャは、DBaaSインスタンスに対する認証または接続に、IAMユーザーがOracle Cloud Infrastructure (OCI) IAMデータベース・パスワード・ベリファイアを使用しているか、OCI IAMトークンを使用しているかによって異なります。

次の図は、Oracle Cloud Infrastructure (OCI) IAMデータベース・パスワード・ベリファイアを使用してOracle DBaaSで認証する仕組みを示しています。

図7-1 OCI IAMデータベース・パスワード・ベリファイアを使用してOracle DBaaSへの認証を行うIAMユーザー

図7-1の説明が続きます
「図7-1 OCI IAMデータベース・パスワード・ベリファイアを使用してOracle DBaaSへの認証を行うIAMユーザー」の説明
  1. IAMユーザーが、Oracle Databaseクライアントに関連付けられているツールまたはアプリケーション・クライアントにログインします。このユーザーは、IAMユーザー名およびIAMデータベース・パスワードを使用してログインし、これによって認証プロセスが開始されます。ユーザーは、Oracle Database release12.1.0.2以降の任意のデータベース・クライアントを使用できます。以前のバージョンのデータベース・クライアントは、12Cデータベース検証をサポートしていません。
  2. IAMユーザーの接続リクエストが、データベース・クライアントを介して送信されます。
  3. IAMユーザー名がOracle DBaaSインスタンスに送信されると、データベースが、ユーザーのOracle Cloud Infrastructure (OCI) IAMデータベース・パスワード・ベリファイアをIAMからリクエストします。(IAMユーザー・プロファイルに、IAMデータベース・パスワード・ベリファイアが格納されます。)このベリファイアはパスワードをハッシュしたバージョンであり、クリアテキストではありません。IAMからのパスワード・ベリファイアが、データベース・クライアントによって生成されたパスワード・ベリファイアと一致する場合、ユーザーは認証されます。Oracle DBaaSインスタンスは、リソース・プリンシパルを使用してIAMと通信します。リソース・プリンシパルは、IAMによって認識され、データベースがIAMと安全に通信するために使用するOracle DBaaSのアイデンティティです。
  4. 認証が成功すると、Oracle DBaaSインスタンスがIAMユーザー・グループを取得します。そのIAMユーザーがOracle Databaseスキーマにマップされ、かつOCIアカウントからロック・アウトされていない場合、IAMユーザーはデータベースに正常にアクセスできます。ユーザーには、ユーザーがメンバーであるグループにマップされているグローバル・ロールも付与されます。
  5. Oracle Cloud Infrastructure (OCI)ログイン・カウンタが、OCIコンソール・パスワードとOCIデータベース・パスワードの両方のログインを追跡します。IAMデータベース・パスワードを使用したデータベースのログインが成功すると、このカウンタがリセットされます。
  6. 前述のステップの結果に基づいて、IAMユーザー・データベースのアクセス試行が成功または失敗します。

次の図は、IAMユーザーまたはOracle Cloud Infrastructure (OCI)アプリケーションがOCI IAMトークンを使用してOracle DBaaSインスタンスにアクセスしたときに実行されるアクションの開始を示しています。

図7-2 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート1

図7-2の説明が続きます
「図7-2 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート1」の説明
  1. データベースへのアクセスには、次のいずれかが必要です。
    • 1a: IAMユーザーの場合は、ユーザーがローカル・システムにAPI-keyを格納しているか、最近のOCIへのサインインからのセキュリティ・トークンを持っている必要があります。OCI CLIでは、API-key、セキュリティ・トークン、委任トークン、インスタンス・プリンシパルを使用できます。最新の有効なセキュリティ・トークンがない場合、ユーザーにOCI IAMでの認証を求めるプロンプトが表示される可能性があります。(使用可能なユーザー資格証明の詳細は、ユーザー資格証明を参照してください。)OCIクラウド・シェル環境では、委任トークンを使用できます。
    • 1b: OCIアプリケーションの場合は、インスタンス・プリンシパルまたはリソース・プリンシパルを持つようにアプリケーションが構成されている必要があります。OCI SDKでは、すべてのキー・タイプ(API-key、セキュリティ・トークン、委任トークン、インスタンス・プリンシパルおよびリソース・プリンシパル)を使用できます。
    • 1c: IAMユーザー名とIAMデータベース・パスワードを使用してIAMからdb-tokenをリクエストするようにデータベース・クライアントを構成できます。データベース・クライアントのみがこのタイプのトークンを使用してデータベースにアクセスできます。データベース・クライアントは、他の資格証明を使用してdb-tokenをリクエストできません。
  2. アプリケーション、OCI CLIまたはデータベース・クライアントは、いずれかのプリンシパル資格証明を使用して、db-tokenをリクエストするIAMへのコールを実行します。Oracle DBaaSへのアクセスに使用できるのは、db-tokenのみです。db-tokenのリクエストは、Oracle Cloud Infrastructure (OCI)パブリックSDKで、OCI IAMに接続するように記述されたアプリケーションによって実行できます。(ソフトウェア開発キットとコマンドライン・インタフェースを参照してください。)OCIパブリックSDKを使用してOCI IAMと直接接続するようにアプリケーションを変更できない場合は、OCIコマンドライン・インタフェース(OCI CLI)などのヘルパー・ツールを使用して、ユーザーのdb-tokenを取得できます。データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードを使用してdb-tokenをリクエストするように構成することもできます。
  3. IAMと連携するように更新されたアプリケーションまたはツールが、クライアントAPIを介してdb-tokenを属性としてデータベース・クライアントに直接渡すことができます。db-tokenを直接取得するようにアプリケーションを更新できない場合は、OCI CLIなどのヘルパー・ツールによって、ローカル・ディレクトリのデフォルトまたは指定した場所にdb-tokenを配置できます。接続文字列またはsqlnet.oraファイルのTOKEN_AUTH=OCI_TOKENの設定により、データベース・クライアントは、デフォルトまたは指定されたファイルの場所からdb-tokenを取得できます。ユーザーは、oci iam db-token getコマンドを実行し、ユーザー・アカウント資格証明を格納するプロファイルを指定することで、OCI CLIでトークンをリクエストできます。例:
    oci iam db-token get --profile PeterFitch

    db-tokenおよび対応する秘密キーのディレクトリの場所には、OCI CLIがファイルをその場所に書き込み、データベース・クライアントがこれらのファイルを取得するのに十分な権限のみ(プロセス・ユーザーによる読取りおよび書込みのみなど)が必要です。トークンとキーによってデータベースへのアクセスが許可されるため、これらはファイル・システム内で保護される必要があります。

次の図は、OCI IAMトークン認証プロセスの続きを示しています。

図7-3 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート2

図7-3の説明が続きます
「図7-3 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート2」の説明
  1. db-tokenが署名されて、Oracle DBaaSに送信されます。データベース・クライアント/サーバー・リンクおよびDN一致でTLSを有効にする必要があります。(Autonomous Databaseウォレット・ファイルを使用してAutonomous Databaseインスタンスに接続する場合、TLSおよびDNSの一致はすでに設定されています。)DN一致は、JDBCドライバでデフォルトでオンになっていますが、OCI-Cデータベース・クライアント(およびインスタント・クライアント)用に構成される必要があります。データベース・クライアントがIAMユーザー名およびIAMデータベース・パスワードを使用して取得するdb-tokenには秘密キーが含まれず、データベース・クライアントによって署名されません。
  2. 有効なコピーがまだローカルで使用できない場合、Oracle DBaaSインスタンスが、IAM公開キーをリクエストします。このキーは、db-tokenがIAMによって送信されたことを検証するために使用されます。Oracle DBaaSインスタンスは、リソース・プリンシパルを使用してIAMと通信します。
  3. この認可ステップが正常に完了すると、Oracle DBaaSインスタンスが、IAMからIAMユーザーのグループをリクエストします。このアクションにより、ユーザーがグローバル・スキーマにマップされて、さらにそのユーザーが、メンバーとして所属するグローバル・ロールにマップされます。IAMユーザーがこれらのステップを正常に完了すると、ユーザーはOracle DBaaSインスタンスにアクセスできます。

IAM SSOトークンベースの認証では、最新のOracle Database 19c (19.16)クライアントをダウンロードする必要があります。

7.1.3 Oracle DBaaSとマップするIAMユーザーおよびグループ

IAMユーザーは、IAMユーザーへのデータベース・スキーマの排他的マッピングと、ユーザーがメンバーとして所属するIAMグループへのデータベース共有スキーマのマッピングのいずれかで、スキーマにマップされる必要があります。

ログインおよび認可ステップを正常に完了するには、IAMユーザーをデータベース・スキーマにマップする必要があります。IAMユーザーが独自のスキーマ・オブジェクトを保持する必要がある場合は、IAMユーザーをデータベース・スキーマに直接マップできます(排他的マッピング)。より一般的には、IAMユーザーは、データベース・スキーマにマップされるIAMグループのメンバーとなります(共有スキーマ・マッピング)。共有スキーマ・マッピングを使用すると、複数のIAMユーザーが同じスキーマを共有できるため、新規ユーザーが組織に加入するたびに新しいデータベース・スキーマを作成する必要はありません。この運用効率により、データベース管理者は、新規ユーザーの構成、権限とロールの更新、およびアカウントの削除を行わずに、データベース・アプリケーションのメンテナンス、パフォーマンスおよびチューニングのタスクに集中できます。

データベース・グループのデータベース管理者は、IAMグループのメンバーにできます(たとえば、販売アプリケーションの販売アプリケーション開発者は、sales_app_dev_groupというIAMグループのメンバーです)。このシナリオでは、すべての関連データベースが共有スキーマをsales_app_dev_groupグループにマップできます。データベース・グローバル・ロールはスキーマに付与できません。IAMグループにのみマップできます。複数のIAMユーザーが同じ共有スキーマにマップされている場合、グローバル・ロールでIAMユーザー権限を区別できます。

IAMユーザーは、そのIAMユーザーがOracle DBaaSインスタンスにアクセスできるように、データベース・スキーマまたは共有スキーマに排他的にマップされる必要があることに注意してください。

7.2 IAM用のOracle DBaaSの構成

IAMと連携するようにOracle DBaaSを構成するには、Oracle DBaaSデータベースの管理者が、最初にIAM統合を有効にし、次にOracle DBaaSのIAMユーザーおよびロールを認可する必要があります。

7.2.1 Oracle DBaaSに対する外部認証の有効化

Oracle DBaaSでIAM接続を有効化する方法は、使用しているOracle DBaaSのプラットフォームによって異なります。

Oracle Autonomous Database Serverless以外のデータベース

  1. 前提条件およびその他の必要な情報については、Oracle DBaaSプラットフォームのドキュメントを参照してください。
  2. Oracle Autonomous Database以外のインスタンスの場合は、IDENTITY_PROVIDER_CONFIGパラメータを設定します。
    ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=OCI_IAM SCOPE=BOTH;

    IDENTITY_PROVIDER_CONFIGが別の値に設定されている場合は、次の文を実行します。

    ALTER SYSTEM RESET IDENTITY_PROVIDER_CONFIG SCOPE=BOTH;

    Microsoft Azureなどの別のアイデンティティ・プロバイダが使用されていたため、IDENTITY_PROVIDER_CONFIGパラメータが別の値に設定されている可能性があります。

7.2.2 IAMユーザーおよびOracle Cloud Infrastructureアプリケーションの認可の構成

Oracle DBaaSデータベースの管理者は、IAMユーザーおよびOracle Cloud Infrastructure (OCI)アプリケーションをOracle Databaseのグローバル・スキーマおよびグローバル・ロールにマップできます。

7.2.2.1 IAMユーザーおよびOracle Cloud Infrastructureアプリケーションの認可の構成について

Oracle DBaaSのデータベース・ユーザー(スキーマ)へのIAMユーザーおよびOracle Cloud Infrastructure (OCI)アプリケーションのマッピングを作成します。

IAMデータベース・パスワード認証とIAMトークンベースの認証の使用には、認可に違いがあります。IAMデータベース・パスワード・ベリファイアによる認可は、IAMユーザーおよびグループへのデータベース・スキーマおよびグローバル・ロールのマッピングのみに基づきます。IAMトークンベースの認証では、IAMポリシーは、IAMユーザーがテナンシ・データベースにアクセスするための追加の認可です。IAMユーザーは、IAMポリシーを介して認可され、さらにデータベース・グローバル・スキーマへのマッピング(排他的または共有)を介して認可されている必要があります。

トークンとパスワード・ベリファイアの両方のデータベース・アクセスのために、Oracle DBaaSインスタンスへのIAMユーザーおよびOCIアプリケーションのマッピングを作成します。IAMユーザー・アカウント自体はIAMで管理されます。ユーザー・アカウントとユーザー・グループは、デフォルト・ドメインまたはカスタムのデフォルト以外のドメイン内に存在できます。

IAMユーザーがトークンを使用してOracle DBaaSインスタンスにアクセスすると、データベースで、ユーザーによるデータベースへのアクセスが許可されていることを確認するために、IAMポリシーに対して認可チェックが実行されます。IAMポリシーによって、IAMユーザーによるデータベースへのアクセスが許可されている場合、データベースが、ユーザー・グループのIAMを問い合せます。パスワード・ベリファイア認証を使用する場合、IAMユーザーが認証を正常に完了すると、データベースが、ユーザー・グループのIAMを問い合せます。データベースは、IAMエンドポイントを問い合せて、ユーザーがメンバーとして所属するグループを検索します。デプロイメントが共有スキーマを使用している場合、いずれかのIAMグループが共有データベース・スキーマにマップされ、IAMユーザーはそのデータベース・スキーマに割り当てられます。IAMユーザーは、データベース・スキーマに付与されたロールと権限を所持します。複数のIAMユーザーを同じ共有データベース・スキーマに割り当てることができるため、最小限のロールと権限のセットのみを共有スキーマに付与する必要があります。場合によっては、共有スキーマに権限およびロールを付与しないでください。ユーザーには、データベース・グローバル・ロールを介して適切なロールとスキーマのセットが割り当てられます。グローバル・ロールはIAMグループにマップされます。このように、同じデータベース共有スキーマにマップされている場合でも、異なるユーザーが異なるロールおよび権限を持つことができます。新しく採用されたユーザーは、共有スキーマにマップされたIAMグループに割り当てられたうえで、タスクを完了するために必要な追加のロールと権限を取得するために、グローバル・ロールにマップされた1つ以上の追加グループに割り当てられます。共有スキーマとグローバル・ロールを組み合せると、データベース操作に対する変更を最小限にして、集中的な認可管理が可能になります。データベースは最初に、適切なIAMグループにマップされている共有スキーマとグローバル・ロールのセットでプロビジョニングされる必要がありますが、ユーザー認可管理はIAM内で発生する可能性があります。

IAMユーザーが、データベース・スキーマへの排他的マッピングを介して、または共有データベース・スキーマにマップされている1つのIAMグループのメンバーとして、1つのスキーマにのみマップされるようにします。IAMユーザーに複数のスキーマがマップされている場合、データベースでは、共有スキーマへのグループ・マッピングよりも、排他的マッピングが優先されます。1人のユーザーに対して複数のグループがマップされている場合は、最も古いマッピングが選択されます。

グローバル・ロールを使用してユーザーに権限およびロールを付与する場合、セッションで有効にできるロールの最大数は150であることに注意してください。

IAMユーザーおよびグループを削除して、同じ名前を使用して再作成した場合、同じ名前を使用するデータベースからIAMへのマッピングは引き続き機能します。ただし、IAMユーザーを再作成するには、IAMユーザーが、IAMデータベース・パスワードの作成、API公開キーの再アップロード、OCI構成ファイルの更新の1つ以上を実行して、IAMを使用したデータベースの認証と認可についてIAMポリシーを再度調べる必要があります。IAMポリシーで、database-connectionsおよびautonomous-database-familyリソース・タイプを使用または管理できるグループが指定されている場合、IAM認証および認可を許可するには、そのグループにユーザーを追加する必要があります。

トークンを使用してデータベースにアクセスするには、ユーザーがIAMポリシーおよびデータベース・マッピングによって認可される必要があります。IAMデータベース・パスワード・ベリファイアを使用してデータベースにアクセスするには、データベース・マッピングを介した認可が必要です。IAMユーザーのデータベース・スキーマ・マッピングが存在しない場合、有効なトークンまたはパスワードがある場合でも、IAMユーザーはデータベースにアクセスできません。

IAMユーザーは、付与されているロールに基づいて様々なタスクを実行するための認可を取得します。次の使用方法が可能です。

  • 共有Oracle Databaseグローバル・ユーザーにマップされたIAMグループ: 共有データベース・グローバル・ユーザー・アカウントでは、共有スキーマへのIAMグループのマッピングを介して、IAMユーザーが共有データベース・スキーマ(ユーザー)に割り当てられます。グループのメンバーであるIAMユーザーはこの共有スキーマを介してデータベースに接続できます。共有スキーマを使用すると、IAMでユーザー認可を集中管理できます。
  • Oracle Databaseグローバル・ロールにマップされたIAMグループ: 共有Oracle Databaseグローバル・ロールに付与された権限は、IAMグループに追加されたユーザーが使用できるようになります。
  • Oracle Databaseグローバル・ユーザーに排他的にマップされたローカルのIAMユーザー: 排他的なグローバル・ユーザー・マッピングでは、専用データベース・ユーザーがローカルのIAMユーザーに排他的にマップされます。共有データベース・スキーマほど一般的ではありませんが、このユーザーは、ユーザーが独自のスキーマ・オブジェクトを必要とする場合のために作成されます。認可の管理を容易にするため、グローバル・ロールを介してこれらのユーザーにデータベース権限を付与することをお薦めします。これらのユーザーは、排他スキーマに対する直接権限およびロール付与を持つこともできます。

    アイデンティティ・ドメインを使用するIAMでは、デフォルト・ドメインおよびカスタム非デフォルト・ドメインでユーザーおよびグループがサポートされます。デフォルト・ドメインでユーザーとグループを指定する場合、ドメイン接頭辞は必要ありません。デフォルト以外のドメインでユーザーとグループを指定する場合は、ドメインに接頭辞を付ける必要があります。

7.2.2.2 共有Oracle Databaseグローバル・ユーザーへのIAMグループのマッピング

IAMグループおよびIAM動的グループにマップされたOracle Databaseグローバル・ユーザーにより、IAMユーザーおよびOCIアプリケーションがログインするときに、スキーマおよびそのスキーマに付与された権限とロールがIAMユーザーおよびOCIアプリケーションに付与されます。

  1. CREATE USERまたはALTER USERシステム権限を持つユーザーとして、Oracle DBaaSインスタンスにログインします。
  2. IAMグループ名(動的グループでも可)を指定するIDENTIFIED GLOBALLY AS句を使用してCREATE USERまたはALTER USER文を実行します。
    たとえば、shared_sales_schemaという名前の新しいデータベース・グローバル・ユーザー・アカウントを作成し、それをWidgetSalesGroupという名前の既存のIAMグループにマップするには、次のようにします。
    CREATE USER shared_sales_schema IDENTIFIED GLOBALLY AS
    'IAM_GROUP_NAME=WidgetSalesGroup';

    次の例は、デフォルト以外のドメインでこれを実現する方法を示しています。

    CREATE USER shared_sales_schema IDENTIFIED GLOBALLY AS
    'IAM_GROUP_NAME=sales_domain/WidgetSalesGroup';
7.2.2.3 Oracle Databaseグローバル・ロールへのIAMグループのマッピング

IAMグループおよび動的グループにマップされたOracle Databaseグローバル・ロールは、メンバー・ユーザーおよびアプリケーションに、ログイン・スキーマを介して付与されている権限およびロールに加え、さらに権限およびロールを付与します。

グローバル・ロールはデータベース・スキーマ(ユーザー)に付与できません。グループにマップして、データベースへのアクセス時にIAMユーザーに割り当てることのみ可能です。
  1. CREATE ROLEまたはALTER ROLEシステム権限を付与されたユーザーとして、Oracle DBaaSインスタンスにログインします
  2. IAMグループ名(動的グループでも可)を指定するIDENTIFIED GLOBALLY AS句を使用してCREATE ROLEまたはALTER ROLE文を実行します。
    たとえば、widget_mgr_roleという名前の新しいデータベース・グローバル・ロールを作成し、それをデフォルト・ドメインを使用してWidgetManagerGroupという名前の既存のIAMグループにマップするには、次のようにします。
    CREATE ROLE widget_mgr_role IDENTIFIED GLOBALLY AS 
    'IAM_GROUP_NAME=WidgetManagerGroup';

    次の例は、デフォルト以外のドメインsales_domainを指定してロールを作成する方法を示しています:

    CREATE ROLE widget_sales_role IDENTIFIED GLOBALLY AS 
    'IAM_GROUP_NAME=sales_domain/WidgetManagerGroup';
    sales_domainドメイン内のWidgetManagerGroupのすべてのメンバーは、データベースにログインするときにデータベース・グローバル・ロールwidget_sales_roleで認可されます。
7.2.2.4 Oracle Databaseグローバル・ユーザーへのIAMユーザーの排他的マッピング

IAMユーザーをOracle Databaseグローバル・ユーザーに排他的にマップできます。

  1. CREATE USERまたはALTER USERシステム権限を付与されたユーザーとして、Oracle DBaaSインスタンスにログインします。
  2. IAMデータベース・ユーザー名を指定するIDENTIFIED GLOBALLY AS句を使用してCREATE USERまたはALTER USER文を実行します。
    デフォルトでは、IAMデータベース・ユーザー名はドメイン名を含むIAMユーザー名と同じです。データベースへの認証を容易にする一意のIAMデータベース・ユーザー名も作成できます。OCI IAMユーザー・プロファイルでは、データベースへの認証を容易にするために、一意のIAMデータベース・ユーザー名を作成できます。これは、IAMプロファイルでIAMデータベース・パスワードを作成および管理するときに設定できます。IAMデータベース・ユーザー名を追加または変更すると、IAMユーザーのスキーマへのマッピングが無効になるため、データベース・スキーマを新しいIAMデータベース・ユーザー名に再マップする必要があります。
    たとえば、peter_fitchという名前の新しいデータベース・グローバル・ユーザーを作成し、デフォルト・ドメインを使用して、IAMデータベース・ユーザー名peterfitchで指定した既存のIAMユーザーにこのユーザーをマップするには:
    CREATE USER peter_fitch IDENTIFIED GLOBALLY AS 
    'IAM_PRINCIPAL_NAME=peterfitch';

    次の例は、デフォルト以外のドメインsales_domainを指定してユーザーを作成する方法を示しています:

    CREATE USER peter_fitch2 IDENTIFIED GLOBALLY AS
    'IAM_PRINCIPAL_NAME=sales_domain/peterfitch';
7.2.2.5 IAMユーザー・マッピング定義の変更または移行

ALTER USER文を使用して、IAMユーザーからデータベース・グローバル・ユーザーへのマッピングを更新できます。

更新できるデータベース・スキーマは、IAMユーザーにマップされたデータベース・スキーマと、CREATE USER文の句IDENTIFIED BY password、IDENTIFIED EXTERNALLYまたはIDENTIFIED GLOBALLYのいずれかを使用してアカウントが作成されているデータベース・スキーマです。これは、既存のスキーマを、IAMの使用に移行する場合に役立ちます。IAMユーザーまたはIAMグループを削除して、以前のIAMユーザーまたはグループとまったく同じ名前を使用して再作成すると、そのIAMユーザーまたはIAMグループ名を使用するデータベースからの既存のマッピングは引き続き機能します。
  1. ALTER USERシステム権限が付与されたユーザーとして、Oracle DBaasインスタンスにログインします。
  2. IDENTIFIED GLOBALLY AS句を指定してALTER USER文を実行します。
    たとえば、既存のスキーマshared_sales_schemaを別のIAMグループに変更する場合は、次のようにします。
    ALTER USER shared_sales_schema IDENTIFIED GLOBALLY AS
    'IAM_GROUP_NAME=BiggerWidgetSalesGroup';

    次の例は、デフォルト以外のドメインsales_domainを指定してスキーマを変更する方法を示しています。

    ALTER USER shared_sales_schema IDENTIFIED GLOBALLY AS 
    'IAM_GROUP_NAME=sales_domain/BiggerWidgetSalesGroup';
7.2.2.6 インスタンス・プリンシパルおよびリソース・プリンシパルのマッピング

インスタンス・プリンシパルおよびリソース・プリンシパルは、アプリケーションでデータベース・トークンを取得して、Oracle DBaaSインスタンスへの接続を確立するために使用できます。

インスタンス・プリンシパルおよびリソース・プリンシパルを使用する場合は、動的グループのみをマップできます。インスタンス・プリンシパルおよびリソース・プリンシパルを排他的にマップすることはできません。これらをマップする場合は、共有マッピングを使用し、インスタンスまたはリソース・インスタンスをIAM動的グループに配置する必要があります。

7.2.2.7 IAMユーザーのログオン情報の確認

Oracle DBaaSインスタンスのIAMユーザーを構成および認可した後、Oracleデータベース側で一連のSQL問合せを実行して、ユーザー・ログオン情報を確認できます。

  1. 構成して認可したIAMユーザーとしてOracle DBaaSインスタンスにログインします。
    たとえば、IAMでデフォルト・ドメインを使用しているデータベース・グローバル・ユーザーpeterfitchとしてデータベース・インスタンスinst1にログインするには、次のようにします。
    sqlplus /nolog
    CONNECT "peterfitch"@inst1
    Enter password: password

    この例では、ユーザーpeterfitchがデフォルト以外のドメインsales_domainにある場合にログインする方法を示します。

    sqlplus /nolog
    CONNECT "sales_domain/peterfitch"@inst1
    Enter password: password
  2. マップされたグローバル・ユーザーを検証します。
    マップされたグローバル・ユーザーは、IAMユーザー認可を持つデータベース・ユーザー・アカウントです。ユーザーPETER_FITCH_SCHEMAはIAMユーザーpeterfitchの排他的マッピングを持つグローバル・ユーザーとみなされ、ユーザーWIDGET_SALESは、peterfitchがメンバーであるIAMグループwidget_sales_groupの共有マッピングを持つグローバル・ユーザーとみなされます。
    SHOW USER;

    排他的マッピングであるか共有マッピングであるかに応じて、次のような出力が表示されます。

    USER is "PETER_FITCH_SCHEMA"

    または

    USER is "WIDGET_SALES"
  3. 集中管理ユーザーに付与されたロールを確認します。
    SELECT ROLE FROM SESSION_ROLES ORDER BY ROLE;

    次のような出力が表示されます。

    ROLE
    ----------------------------------------------------------------------
    WIDGET_SALES_ROLE
    ...
  4. 次の問合せを実行して、このデータベース・セッションで使用されている現在のスキーマのSYS_CONTEXTネームスペース値、現在のユーザー名、セッション・ユーザー名、認証方式、認証済アイデンティティ、エンタープライズ・アイデンティティ、識別タイプおよびサーバー・タイプを確認します。
    • このデータベース・セッションで使用されている現在のスキーマを確認します。データベース・スキーマは、含まれているオブジェクトを識別するオブジェクト・コンテナです。現在のスキーマは、このデータベース・セッションのオブジェクト名解決のデフォルト・コンテナです。
      SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL;

      排他的マッピングであるか共有マッピングであるかに応じて、次のような出力が表示されます。

      SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
      ----------------------------------------------------------------------
      PETER_FITCH_SCHEMA

      または

      SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
      ----------------------------------------------------------------------
      WIDGET_SALES
    • 現行ユーザーを確認します。この場合、現行ユーザーは現行スキーマと同じです。
      SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER') FROM DUAL;

      排他的マッピングであるか共有マッピングであるかに応じて、次のような出力が表示されます。

      SYS_CONTEXT('USERENV','CURRENT_USER')
      ----------------------------------------------------------------------
      PETER_FITCH_SCHEMA

      または

      SYS_CONTEXT('USERENV','CURRENT_USER')
      ----------------------------------------------------------------------
      WIDGET_SALES
    • セッション・ユーザーを確認します。
      SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;

      排他的マッピングであるか共有マッピングであるかに応じて、次のような出力が表示されます。

      SYS_CONTEXT('USERENV','SESSION_USER')
      ----------------------------------------------------------------------
      PETER_FITCH_SCHEMA

      または

      SYS_CONTEXT('USERENV','SESSION_USER')
      ----------------------------------------------------------------------
      WIDGET_SALES
    • 認証方式を確認します。
      SELECT SYS_CONTEXT('USERENV', 'AUTHENTICATION_METHOD') FROM DUAL;

      次のような出力が表示されます。

      SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD')
      ----------------------------------------------------------------------
      PASSWORD_GLOBAL

      ユーザーがトークンを使用して認証している場合、出力はTOKEN_GLOBALです。

    • エンタープライズ・ユーザーの認証済アイデンティティを確認します。このユーザーがデータベースにログオンしたときに、IAM認証済ユーザー・アイデンティティが取得されて監査されます。
      SELECT SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY') FROM DUAL;

      次のような出力が表示されます。

      SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY')
      ----------------------------------------------------------------------
      sales_domain/peterfitch
    • ユーザーのニックネームがエンタープライズ・ユーザーに対して設定されている場合は、このニックネームを確認します。
      SELECT SYS_CONTEXT('USERENV', 'USER_NICKNAME') FROM DUAL;

      次のような出力が表示されます。

      SYS_CONTEXT('USERENV','USER_NICKNAME')
      ----------------------------------------------------------------------
      pfitch
    • 集中管理ユーザーのエンタープライズ・アイデンティティを確認します。
      SELECT SYS_CONTEXT('USERENV', 'ENTERPRISE_IDENTITY') FROM DUAL;

      エンタープライズ・アイデンティティには、IAMユーザーまたはOCIアプリケーションのOCIアイデンティティ(OCID)が表示されます。次のような出力が表示されます。

      SYS_CONTEXT('USERENV','ENTERPRISE_IDENTITY')
      ----------------------------------------------------------------------
      ocid1.user.region1..aaaaaaaaj7ot4g2sagkjtw3enbg4ied3x554zwyywurgrm2232j4crm5zha
      
    • 識別タイプを確認します。
      SELECT SYS_CONTEXT('USERENV', 'IDENTIFICATION_TYPE') FROM DUAL

      排他的マッピングであるか共有マッピングであるかに応じて、次のような出力が表示されます。

      SYS_CONTEXT('USERENV','IDENTIFICATION_TYPE')
      ----------------------------------------------------------------------
      GLOBAL EXCLUSIVE

      または

      SYS_CONTEXT('USERENV','IDENTIFICATION_TYPE')
      ----------------------------------------------------------------------
      GLOBAL SHARED
    • サーバー・タイプを確認します。
      SELECT SYS_CONTEXT('USERENV', 'LDAP_SERVER_TYPE') FROM DUAL;

      次のような出力結果が表示されます。この場合、LDAPサーバー・タイプはIAMです。

      SYS_CONTEXT('USERENV','LDAP_SERVER_TYPE')
      ----------------------------------------------------------------------
      OCI_IAM

7.2.3 IAMプロキシ認証の構成

プロキシ認証により、IAMユーザーはアプリケーションのメンテナンスなどのタスクのためにデータベース・スキーマにプロキシできます。

7.2.3.1 IAMプロキシ認証の構成について

IAMユーザーは、プロキシ認証を使用してOracle DBaaSに接続できます。

プロキシ認証は、通常、実際のユーザーを認証し、アプリケーションを管理するためにスキーマ権限およびロールを含むデータベース・スキーマの使用をユーザーに認可するために使用されます。アプリケーション・スキーマ・パスワードの共有などの代替方法は、安全でないものとみなされ、どの実際のユーザーがアクションを実行したかを監査できません。

たとえば、アプリケーション・データベース管理者である名前付きIAMユーザーが資格証明を使用して認証し、データベース・スキーマ・ユーザー(hrappなど)にプロキシできる環境でのユースケースが考えられます。この認証により、IAM管理者は、アプリケーションのメンテナンスを実行するためにhrapp権限およびロールをユーザーhrappとして使用できますが、認証にはIAM資格証明を使用します。アプリケーション・データベース管理者は、データベースにサインインし、アプリケーション・スキーマにプロキシしてこのスキーマを管理できます。

パスワード認証とトークン認証両方の方法について、プロキシ認証を構成できます。

7.2.3.2 IAMユーザーのプロキシ認証の構成

IAMユーザーのプロキシ認証を構成するには、IAMユーザーがグローバル・スキーマへのマッピング(排他的マッピングまたは共有マッピング)をすでに持っている必要があります。IAMユーザーがプロキシする別のデータベース・スキーマも使用可能である必要があります。

このタイプのユーザーがいることを確認したら、IAMユーザーにデータベース・ユーザーへのプロキシを許可するようにデータベース・ユーザーを変更します。
  1. ALTER USERシステム権限を持つユーザーとして、Autonomous Databaseインスタンスにログインします。
  2. ローカル・データベース・ユーザー・アカウントにプロキシする権限をIAMユーザーに付与します。
    IAMユーザーはコマンドで参照できないため、データベース・グローバル・ユーザー(IAMユーザーにマップ)とターゲット・データベース・ユーザーの間にプロキシを作成する必要があります。
    次の例では、hrappはプロキシ先のデータベース・スキーマで、peterfitch_schemaはユーザーpeterfitchに排他的にマップされるデータベース・グローバル・ユーザーです。
    ALTER USER hrapp GRANT CONNECT THROUGH peterfitch_schema;
この段階で、IAMユーザーはプロキシを使用してデータベース・インスタンスにログインできます。たとえば、パスワード・ベリファイアを使用して接続するには、次のようにします。
CONNECT peterfitch[hrapp]@connect_string
Enter password: password

トークンを使用して接続するには、次のようにします。

CONNECT [hrapp]/@connect_string
7.2.3.3 IAMユーザー・プロキシ認証の検証

パスワードとトークン両方の認証方法について、IAMユーザー・プロキシ構成を検証できます。

  1. CREATE USERおよびALTER USERシステム権限を持つユーザーとして、Autonomous Databaseインスタンスにログインします。
  2. IAMユーザーとして接続し、SHOW USERおよびSELECT SYS_CONTEXTコマンドを実行します。
    たとえば、データベース・ユーザーhrappにプロキシするときに、IAMユーザーpeterfitchのプロキシ認証を確認するとします。IAMユーザーを使用してデータベースをプロキシした後、次の問合せを実行します。データベースの認証およびアクセス方法に応じて、これらの問合せに対して異なる値が取得されます。
    • パスワード認証の場合、IAMユーザーがデフォルト・ドメインにあると仮定すると、次のようになります。
      CONNECT peterfitch[hrapp]/password\!@connect_string
      SHOW USER;
      --The output should be "USER is HRAPP"
      SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') FROM DUAL;
      --The output should be "PASSWORD_GLOBAL_PROXY"
      SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM DUAL;
      --The output should be "PETERFITCH_SCHEMA"
      SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL;
      --The output should be "HRAPP"
    • トークン認証の場合、デフォルト以外のドメインにあるユーザーに対し、sales_domain:
      CONNECT [hrapp]/@connect_string
      SHOW USER;
      --The output should be USER is "HRAPP "
      SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') FROM DUAL;
      --The output should be "TOKEN_GLOBAL_PROXY"
      SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM DUAL;
      --The output should be "PETERFITCH_SCHEMA"
      SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL;
      --The output should be "HRAPP"

7.3 Oracle DBaaS用のIAMの構成

Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し、ユーザーにIAMのデータベース・パスワードを作成させる必要があります。

7.3.1 トークンを使用して認証を行うユーザーを認可するためのIAMポリシーの作成

Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し(IAMトークンを使用している場合)、IAMグループを作成してグループ・メンバーシップを管理する必要があります。

IAM管理者は、データベース管理者と連携して、データベースの適切なIAMグループを作成する必要があります。個々のIAMユーザーは、パスワード・ベリファイアを使用している場合、プロファイルでIAMデータベース・パスワードを作成することが必要になります。
パスワード・ベリファイアを使用して認証するユーザーに対しては、ポリシーを作成する必要はありません。
  • allow groupコマンドを使用して、ポリシーを作成します。たとえば、次のようになります。
    allow group DBUsers to use database-connections in tenancy
  • コンパートメントtesting_compartmentでのみDBaaSインスタンスにアクセスするようにDBUsersグループのメンバーを制限するポリシーを作成するには、次のようにします
    allow group DBUsers to use autonomous-database-family in compartment testing_compartment
  • コンパートメント内の単一データベースにグループのアクセスを制限するポリシーを作成するには、次のようにします。
    allow group DBUsers to use autonomous-database-family in compartment testing_compartment where target.database.id = 'ocid1.autonomousdatabase.oc1.iad.aaaabbbbcccc'
次のことに注意してください。
  • database-connectionsリソース・タイプは、autonomous-database-familyリソース・タイプに含まれています。ユースケースに応じて、どちらのリソースも使用できます。
  • データベースへのアクセスを有効にする最小動詞はuseです。manage動詞を使用して、データベースへのアクセスを有効にすることもできます。

ポリシー文の構文の詳細は、Oracle Cloud Infrastructureドキュメンテーションを参照してください。

7.3.2 IAMデータベース・パスワードの作成

Oracle DBaaSパスワード検証プロセスには、Oracle Cloud Infrastructure (OCI)コンソール・パスワードとは異なる、IAMユーザーが設定したIAMデータベース・パスワードが必要です。

OCI IAMデータベース・パスワードで使用できる文字のセットは、OCIコンソール・パスワードで使用できる文字のセットと似ていますが、OCI IAMデータベース・パスワードでは二重引用符文字は使用できない点が異なります。IAMデータベース・パスワードの作成の詳細は、ユーザー資格証明の管理に関する項を参照してください。
  1. OCIコンソールにログインして、ユーザー・ページに移動します。
  2. 使用しているIAMバージョンに応じて、「自分のプロファイル」または「ユーザー設定」(ナビゲーション・ツールバーの右上)にアクセスします。
  3. プロファイルまたは設定の左側の「リソース」で、「データベース・パスワード」リンクをクリックします。
  4. 「データベース・パスワードの作成」ボタンをクリックします。
  5. リストされている複雑度のルールを確実に適用して、説明とパスワードを追加します。
  6. 「データベース・パスワードの作成」をクリックして、パスワードを保存します。
    パスワードが作成されると、その説明と作成日が「データベース・パスワード」の下に表示されます。

7.4 インスタンス・プリンシパルまたはリソース・プリンシパルを使用したデータベースへのアクセス

Oracle Cloud Infrastructure (OCI)アプリケーションまたは関数は、それ固有のインスタンス・プリンシパルまたはリソース・プリンシパルを使用してデータベース・インスタンスに接続できます。

動的グループへのマッピングを使用して、インスタンス・プリンシパルおよびリソース・プリンシパルをデータベース・グローバル・スキーマまたは共有スキーマに排他的にマップできます。インスタンス・プリンシパルとリソース・プリンシパルをデータベース・グローバル・スキーマに排他的にマップする場合は、プリンシパルのOCIDを使用する必要があります。例:

CREATE USER widget IDENTIFIED GLOBALLY 
AS 'IAM_PRINCIPAL_OCID=ocid1.instance.region1.sea.1234567890abcdef';

共有スキーマを使用する場合は、インスタンス・プリンシパルおよびリソース・プリンシパルを動的グループに追加し、その動的グループを共有スキーマにマップする必要があります。

7.5 データベース・クライアント接続の構成

IAMクライアント接続の構成によって、Oracle DBaaSインスタンスへのIAMユーザーの認証が制御されます。

7.5.1 IAMを使用したAutonomous Databaseインスタンスへの接続について

IAMユーザーは、IAMデータベース・パスワード・ベリファイアまたはIAMトークンを使用して、Autonomous Databaseインスタンスに接続できます。

IAMデータベース・パスワード・ベリファイアの使用は、Oracle Databaseパスワード認証プロセスに似ています。ただし、パスワード・ベリファイア(パスワードの暗号化ハッシュ)はOracle Databaseに格納されるのではなく、Oracle Cloud Infrastructure (OCI) IAMユーザー・プロファイルの一部として格納されます。

データベースにIAMトークンを使用する2番目の接続方法は、より新しいものです。トークン・ベース・アクセスの使用は、Autonomous Databaseなどのクラウド・リソースに適しています。トークンは、IAMエンドポイントで強制できる強度に基づいています。これはマルチファクタ認証にでき、パスワードのみを使用するより強力です。トークンを使用するもう1つの利点は、パスワード・ベリファイア(機密とみなされる)がメモリーに格納されることがなく、メモリーから取得できないことです。データベース・アクセスにトークンを使用する場合は、TCPS (TLS)接続が必要です。

ノート:

IAMトークンを渡すときにネイティブ・ネットワーク暗号化を設定することはできません。Transport Layer Security (TLS)のみがサポートされ、ネイティブ・ネットワーク暗号化やTLSによるネイティブ・ネットワーク暗号化はサポートされていません。

7.5.2 IAM接続でサポートされるクライアント・ドライバ

Oracle DBaaSは、IAM接続用の複数のタイプのクライアント・ドライバをサポートしています。

IAMデータベースのパスワード・ベリファイアは、サポートされているデータベース・クライアントと連携します。IAMトークンを使用するには、最新のOracle Database Client 19c (19.16以上)が必要です。以前の一部のクライアント(19cおよび21c)では、トークン・アクセス用の制限された機能セットが用意されています。Oracle Database Client 21cは、IAMトークン・アクセス機能を十分にはサポートしていません。Oracle Database Client 23cは、IAMトークン・アクセス機能をサポートしています。

7.5.3 IAMデータベース・パスワード・ベリファイアを使用するクライアント接続

IAMユーザーに必要な認可を構成すると、このユーザーは、追加の構成なしで、SQL*PlusやSQLclなどの既存のクライアント・アプリケーションを使用してログインできます。

IAMユーザーは、現在サポートされている任意のデータベース・クライアントを使用して、IAMユーザー名とIAMデータベース・パスワード(Oracle Cloud Infrastructure (OCI)コンソール・パスワードではありません)を入力します。唯一の制約は、データベース・クライアントのバージョンがOracle Databaseリリース12.1.0.2以降で、Oracle Database 12cのパスワードを使用することです。データベース・クライアントで、12Cのパスワード・ベリファイアを使用できる必要があります。11Gのベリファイア暗号化の使用は、IAMではサポートされていません。IAMユーザーがOCI DBaaSインスタンスに接続するために、特別なクライアントやツールの構成は必要ありません。

7.5.4 IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続

IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続を作成できます。

7.5.4.1 IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続について

IAMユーザーは、IAMユーザー名およびIAMデータベース・パスワードを使用して取得されたIAMトークンを使用して、Oracle DBaaSインスタンスに接続できます。

どちらの場合も、トークンは、SQL*PlusまたはSEPSを使用して、データベース・パスワードで取得されます。

以前のリリースでは、IAMのユーザー名とパスワードのみを使用して、IAMからパスワード・ベリファイアを取得できました。パスワード・ベリファイアは機密とみなされるため、これらの資格証明によるトークンの取得は、パスワード・ベリファイアの取得よりも安全です。トークンを使用することは、ベリファイアを渡したり使用する必要がないことを意味します。アプリケーションは、データベース・クライアントAPIを介してIAMのユーザー名およびパスワードで取得されたトークンを渡すことはできません。このタイプのトークンを取得できるのは、データベース・クライアントのみです。データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードを使用してのみデータベース・トークンを取得できます。

IAMユーザー名およびIAMデータベース・パスワードをツールに直接入力するか、SEPSウォレットを使用してこれらの資格証明を安全に格納できます。

7.5.4.2 IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続に設定するパラメータ

これらのパラメータを設定するには、sqlnet.oraファイルまたはtnsnames.oraファイルを変更します。

IAMユーザー名およびデータベース・パスワードのトークン・リクエストのトークン固有パラメータ

  • PASSWORD_AUTHパラメータ

    認証方法を設定します。この構成では、OCI_TOKENの設定を使用する必要があります。パスワード・ベリファイアは機密とみなされるため、ユーザーおよびパスワード資格証明を使用したトークンの取得は、パスワード・ベリファイアを使用するよりも安全です。このパラメータは、IAMユーザー名およびデータベース・パスワードでIAMベアラー・トークンを取得するために必要です。

    構文:

    PASSWORD_AUTH=authentication_method

    例:

    PASSWORD_AUTH=OCI_TOKEN
  • OCI_IAM_URLパラメータ

    データベース・トークンを取得するためにデータベース・クライアントが接続する必要があるIAM URLを指定します。このパラメータは、IAMユーザー名およびデータベース・パスワードを使用してIAMベアラー・トークンを取得するために必要です。この設定はリージョンに固有です。リージョンの適切なURLは、Identity and Access Managementデータ・プレーンAPIを参照してください。次に、リージョンURLに/v1/actions/generateScopedAccessBearerTokenを追加します。

    構文:

    OCI_IAM_URL=authentication_regional_endpoint.com/v1/actions/generateScopedAccessBearerToken

    例:

    次の例では、Phoenix URL (https://auth.us-phoenix-1.oraclecloud.com)を使用しています。

    https://auth.us-phoenix-1.oraclecloud.com/v1/actions/generateScopedAccessBearerToken
  • OCI_TENANCYパラメータ

    ユーザーのテナンシのOCIDを指定します。この設定は、OCIコンソールの右上にあるユーザーのアイコンの下にあります。このパラメータは、IAMユーザー名およびデータベース・パスワードを使用してIAMベアラー・トークンを取得するために必要です。

    構文:

    OCI_TENANCY=tenancy_OCI..OCID

    例:

    region1の後に2つのピリオドがあることに注意してください。

    
    OCI_TENANCY=ocid1.tenancy.region1..12345
  • OCI_COMPARTMENTパラメータ

    データベース・トークン・リクエストのスコープを指定します。region_nameの後に2つのピリオドがあることに注意してください。トークンは、指定したコンパートメント内のデータベースにのみ使用できます。この値を省略すると、テナンシ全体がリクエストの範囲になります。OCI_DATABASEが設定されている場合を除き、このパラメータはオプションです。

    構文:

    OCI_COMPARTMENT=compartment_OCID

    例:

    region1の後に2つの期間があることに注意してください。

    OCI_COMPARTMENT=ocid1.compartment.region1..12345
  • OCI_DATABASEパラメータ

    アクセスするデータベースのOCIDを指定します。このパラメータは、トークンをデータベースのみに制限します。このパラメータは省略可能です。

    構文:

    OCI_DATABASE=database_OCID

    例:

    OCI_DATABASE=ocid1.autonomousdatabase.oc1.iad.12345

IAMユーザー名およびデータベース・パスワードのトークン・リクエストのDN固有パラメータ

  • SSL_SERVER_CERT_DNパラメータ

    このクライアントのデータベース・サーバーの識別名(DN)を指定します。(このパラメータはベアラー・トークンに固有ではありません。)

    構文:

    SSL_SERVER_CERT_DN=DN

    例:

    SSL_SERVER_CERT_DN="C=US,O=ExampleCorporation,CN=sslserver2"
  • SSL_SERVER_DN_MATCHパラメータ

    DN一致を介してサーバー側の検証を強制します。このパラメータをTRUEに設定します。

    構文:

    SSL_SERVER_DN_MATCH=TRUE|FALSE

    例:

    SSL_SERVER_DN_MATCH=TRUE

sqlnet.oraの例

PASSWORD_AUTH=OCI_TOKEN
OCI_IAM_URL=https://auth.region1.example.com/v1/actions/generateScopedAccessBearerToken
OCI_TENANCY=ocid1.tenancy..12345
OCI_COMPARTMENT=ocid1.compartment.region1..12345
OCI_DATABASE=ocid1.autonomousdatabase.oc1.iad.12345
SSL_SERVER_CERT_DN="C=US,O=ExampleCorporation,CN=sslserver2",
SSL_SERVER_DN_MATCH=TRUE

tnsnames.oraの例

db_connection=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcps)(HOST=sales1-svr)(PORT=5678))
    (SECURITY=
      (PASSWORD_AUTH=OCI_TOKEN)
      (OCI_IAM_URL=https://auth.region1.example.com/v1/actions/generateScopedAccessBearerToken)
      (OCI_TENANCY=ocid1.tenancy..12345)
      (OCI_COMPARTMENT=ocid1.compartment.region1..12345)
      (OCI_DATABASE=ocid1.autonomousdatabase.oc1.iad.12345)
      (SSL_SERVER_CERT_DN="C=US,O=ExampleCorporation,CN=sslserver2")
      (SSL_SERVER_DN_MATCH=TRUE))
    (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))

詳細は、次のとおりです。

  • (PROTOCOL=tcps)は、プロトコルをTCPSに設定します。プロトコルとしてTCPSを使用する必要があります。そうしないと、接続に失敗します。データベース・クライアントからサーバーにトークンを渡す場合は、TCPSを有効にする必要があります。
  • SECURITYでは、認証およびDNパラメータを設定します。
7.5.4.3 IAMユーザー名およびデータベース・パスワードを使用してトークンを取得するためのデータベース・クライアントの構成

指定したIAMユーザー名およびIAMデータベース・パスワードを使用してIAMデータベース・トークンを取得するようにデータベース・クライアントを構成できます。

  1. Oracle DBaaSクライアントにログインします。
  2. IAMユーザー名およびデータベース・パスワードでリクエストされるトークンを取得するように適切なパラメータを設定します。
  3. sqlnet.oraファイルで、WALLET_LOCATIONパラメータをクライアントの場所に設定します。ルート証明書はこのディレクトリに格納されます。
    例:
    WALLET_LOCATION = 
      (SOURCE=
        (METHOD=FILE)
          (METHOD_DATA=
            DIRECTORY=/ora_db/wallet)
7.5.4.4 IAMトークンを取得するための安全性の高い外部パスワード・ストア・ウォレットの構成

IAMユーザー名および安全性の高い外部パスワード・ストア(SEPS)でIAMデータベース・トークンをリクエストするように設定できます。

  1. Oracle DBaaSクライアントにログインします。
  2. 安全性の高い外部パスワード・ストアを使用するようにこのクライアントを構成します。
  3. IAMユーザー名およびデータベース・パスワードによってリクエストされたトークンを取得するように、適切なパラメータを設定します。

7.5.5 クライアント・アプリケーションまたはツールによってリクエストされたトークンを使用するクライアント接続

Autonomous DatabaseへのIAMトークン・アクセスの場合、クライアント・アプリケーションまたはツールによって、IAMユーザーのために、IAMからデータベース・トークンがリクエストされます。

クライアント・アプリケーションは、データベース・クライアントAPIを介してデータベース・トークンを直接データベース・クライアントに渡します。

IAMトークンをリクエストするようにアプリケーションまたはツールが更新されていない場合、IAMユーザーはOracle Cloud Infrastructure (OCI)コマンドライン・インタフェース(CLI)を使用して、データベース・トークンをリクエストおよび格納できます。次の資格証明を使用して、データベース・アクセス・トークン(db-token)をリクエストできます。

  • セキュリティ・トークン(IAM認証あり)、委任トークン(OCIクラウド・シェル内)およびAPI-keys。これらは、認証を有効にするためにIAMユーザーを表す資格証明です
  • インスタンス・プリンシパル・トークン。これは、認証後にインスタンスが、サービス・リソースに対してアクションを実行するための認可されたアクター(またはプリンシパル)となることができるようにします
  • リソース・プリンシパル・トークン。これは、アプリケーションが他のOracle Cloud Infrastructureサービスに対してそれ自体を認証できるようにする資格証明です
  • IAMユーザー名およびIAMデータベース・パスワードの使用(データベース・クライアントのみがリクエスト可能)。

IAMユーザーがスラッシュ/ログインを使用してクライアントにログインし、OCI_IAMパラメータが構成されている場合(sqlnet.oratnsnames.oraまたは接続文字列の一部として)、データベース・クライアントはファイルからデータベース・トークンを取得します。IAMユーザーがユーザー名とパスワードを送信すると、接続で、IAMデータベース・パスワード・ベリファイアを使用するクライアント接続について記述されているIAMデータベース・ベリファイア・アクセスが使用されます。このガイドの手順では、データベース・トークンのヘルパーとしてOCI CLIを使用する方法を示します。アプリケーションまたはツールがIAMと連携するように更新されている場合は、アプリケーションまたはツールの手順に従います。一般的なユースケースには、SQLPlusオンプレミス、SQLclオンプレミス、Cloud ShellのSQL*Plus、SEPウォレットを使用するアプリケーションなどがあります。

7.5.6 クライアント・ウォレットを使用しないTLS接続

クライアント・ウォレットを使用しないTransport Layer Security (TLS)接続の使用は、IAM接続でサポートされています。

このタイプの接続を構成する前に、Oracle DBaaS環境が要件を満たしていることを確認してください。

7.5.7 クライアントによるIAMトークンの直接取得の有効化

クライアント自身がIAMトークンを直接取得できるようにパラメータを設定できます。

この機能は、JDBCシン・クライアント、ODP.NET CoreクラスまたはODP.NET管理対象ドライバ・クラスを使用する環境で使用できます。これにより、クライアントは、ユーザーの認証を求めるダイアログ・ボックスを表示できます。この機能を有効にするには、クライアントのsqlnet.oraファイルまたは接続文字列で次のパラメータを設定する必要があります。接続文字列はsqlnet.oraよりも優先されます。

表7-1トークンを直接取得するパラメータ

パラメータ 説明

TOKEN_AUTHOCI_INTERACTIVE設定

TNSを使用してEZconnectの使用を有効にします。例: ....

OCI_CONFIG_FILE

ユーザーのクライアント接続情報を含むOracle Cloud Infrastructure (OCI)構成ファイルの場所を指定します。

このパラメータを設定しない場合、Oracle DatabaseはC:/user_profile/.oci/configでこの構成ファイルを検索します。構成ファイルがその場所にない場合は、ユーザーが選択できるリージョンIDのリストがOracle Databaseによってユーザーに表示され、リージョンIDが表示されます。

OCI_PROFILE

OCI構成ファイルに設定されているデフォルトのユーザー・プロファイルを指定します。

7.5.8 一般的なデータベース・クライアント構成

IAMユーザーは、ラップトップでSQLclなどのクライアント・ツールを使用して、Oracle DBaaSインスタンスに接続できます。

7.5.8.1 IAMデータベース・パスワードを使用するSQL*Plusのクライアント接続の構成

IAMデータベース・パスワードを使用するようにSQL*Plusを構成できます。

  • IAMユーザーとして、次の構文を使用してAutonomous Databaseインスタンスにログインします。
    CONNECT user_name@db_connect_string
    Enter password: password

    ここで、user_nameはIAMユーザー名です。結合されたdomain_name/user_nameには128バイトの制限があります。

    次の例は、IAMユーザーpeter_fitchAutonomous Databaseインスタンスにログインする方法を示しています。

    sqlplus /nolog
    connect peter_fitch@db_connect_string
    Enter password: password

    いくつかの特殊文字によって、user_nameおよびpasswordの前後に二重引用符が必要になります。例:

    "peter_fitch@example.com"@db_connect_string
    
    "IAM database password"
7.5.8.2 IAMトークンを使用するSQL*Plusのクライアント接続の構成

IAMトークンを使用するSQL*Plusのクライアント接続を構成できます。

  1. IAMユーザー・アカウントがあることを確認します。
  2. IAM管理者およびOracle Database管理者に問い合せて、コンパートメントまたはテナンシ内のデータベースにアクセスできるポリシーがあり、データベースのグローバル・スキーマにマップされていることを確認します。
  3. アプリケーションまたはツールで直接のIAM統合がサポートされていない場合は、OCI CLIをダウンロードしてインストールし、構成します。(OCIコマンドライン・インタフェースのクイックスタートに関する項を参照。)OCI CLI構成の一部としてAPIキーを設定し、デフォルト値を選択します。
    1. IAMユーザーのAPIキー・アクセスを設定します。
    2. db-tokenを取得します。たとえば、次のようにします。
      • Oracle Cloud Infrastructure (OCI)コマンドライン・インタフェースで、API-keyを使用してdb-tokenを取得するには、次のようにします。
        oci iam db-token get
      • セキュリティ(またはセッション)トークンを使用してdb-tokenを取得するには、次のようにします。
        oci iam db-token get --auth security_token

        セキュリティ・トークンの有効期限が切れると、ユーザーがOCIに再度ログインするためのウィンドウが表示されます。これにより、ユーザーのセキュリティ・トークンが生成されます。OCI CLIでは、このリフレッシュされたトークンを使用してdb-tokenを取得します。

      • 委任トークンを使用したdb-tokenの取得: クラウド・シェルにログインすると、委任トークンが自動的に生成され、/etcディレクトリに配置されます。このトークンを取得するには、クラウド・シェルで次のコマンドを実行します。
        oci iam db-token get
      • OCIコマンドライン・インタフェースを使用してインスタンス・トークンを取得するには、次のようにします。
        oci iam db-token get --auth instance_principal
    3. データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードを使用してデータベース・トークンを取得するように構成することもできます。
    詳細は、必要なキーとOCIDを参照してください。
  4. Oracle Databaseクライアント・リリース19cおよび21cの最新リリース更新を使用していることを確認します。
    この構成は、Oracle Databaseクライアント・リリース19cまたは21cでのみ機能します。
  5. 既存のプロセスに従ってAutonomous Databaseからウォレットをダウンロードし、SQL*Plusで使用するためにウォレットを構成する手順に従います。
    1. sqlnet.oraSSL_SERVER_DN_MATCH=ONを検索して、DN一致が有効になっていることを確認します。
    2. sqlnet.oraファイルにTOKEN_AUTH=OCI_TOKENを追加して、IAMトークンを使用するようにデータベース・クライアントを構成します。データベース・トークン・ファイルのデフォルトの場所を使用するため、トークンの場所を含める必要はありません。
    tnsnames.ora接続文字列内のTOKEN_AUTHおよびTOKEN_LOCATION値は、その接続のsqlnet.ora設定より優先されます。たとえば、接続文字列について、トークンがデフォルトの場所(Linuxの場合は~/.oci/db-token)にあるとします。
    (description= 
      (retry_count=20)(retry_delay=3)
      (address=(protocol=tcps)(port=1522)
      (host=example.us-phoenix-1.oraclecloud.com))
      (connect_data=(service_name=aaabbbccc_exampledb_high.example.oraclecloud.com))
      (security=(ssl_server_dn_match=yes))
      (TOKEN_AUTH=OCI_TOKEN)))
    
接続文字列をTOKEN_AUTHパラメータで更新した後、IAMユーザーは次のコマンドを実行してSQL*Plusを起動し、Autonomous Databaseインスタンスにログインできます。接続記述子自体を含めるか、tnsnames.oraファイルからの記述子の名前を使用できます。
connect /@exampledb_high

または:

connect /@(description= 
  (retry_count=20)(retry_delay=3)
  (address=(protocol=tcps)(port=1522)
  (host=example.us-phoenix-1.oraclecloud.com))
  (connect_data=(service_name=aaabbbccc_exampledb_high.example.oraclecloud.com))
  (security=(ssl_server_cert_dn="CN=example.uscom-east-1.oraclecloud.com, 
     OU=Oracle BMCS US, O=Example Corporation, 
     L=Redwood City, ST=California, C=US")
  (TOKEN_AUTH=OCI_TOKEN)))

TOKEN_AUTHsqlnet.oraファイルまたは接続文字列のいずれかによってすでに設定されているため、データベース・クライアントはdb-tokenを取得するようにすでに構成されています。データベース・クライアントは、db-tokenを取得し、秘密キーを使用して署名してからトークンをAutonomous Databaseに送信します。スラッシュ/のかわりにIAMユーザー名とIAMデータベース・パスワードが指定されている場合、データベース・クライアントは、db-tokenではなくパスワードを使用して接続します。

7.6 Oracle DBaaSとIAMの統合でのデータべース・リンク

IAM資格証明を使用してOracle DBaaSデータベースにアクセスする際のデータベース・リンクの使用がサポートされています。

IAMへのOracle DBaaS接続のデータベース・リンクを構成する方法は、Oracle DBaaSプラットフォームによって異なります。Oracle DBaaSプラットフォームに対応する次のトピックを確認し、詳細は関連リンクをクリックしてください。

  • Oracle Autonomous Database Serverless: 固定データベース・リンクにデータベース・ユーザーが使用される、固定ユーザー・データベース・リンクを使用できます。データベース・リンクを作成するためのデータベース・ユーザーは、データベース・リンクでパスワード認証のみを使用できます。IAMユーザーは、パスワードまたはトークン・アクセスを使用してソース・データベースに対する認証を行えます。IAMユーザーを固定データベース・リンクとして構成することや、接続ユーザーまたは現行のユーザーのデータベース・リンクを使用することはできません。「Oracle Autonomous Database Serverlessの使用」を参照してください
  • Oracle Autonomous Database on Dedicated Exadata InfrastructureおよびAutonomous Database以外のすべてのDBaaSプラットフォーム: 接続ユーザーおよび固定ユーザーのデータベース・リンクは使用できますが、現行ユーザーのデータベース・リンクは使用できません。接続ユーザー・データベース・リンクの場合、IAMユーザーはソース・リンク・データベースとターゲット・リンク・データベースの両方にプロビジョニングされている必要があります。データベース・パスワード・ベリファイアまたはIAMデータベース・トークンを使用して、接続ユーザー・データベース・リンクに接続および使用できます。固定ユーザー・データベース・リンクの場合、ユーザーはターゲット・データベース・ユーザーを使用してパスワード認証により、ターゲット・データベースに接続できます。また、IAMユーザーは、IAMのユーザー名とパスワードまたはIAMトークンを使用して、最初のPDBに接続できます。専用ExadataインフラストラクチャでのOracle Autonomous Databaseの使用を参照してください

7.7 IAM接続のトラブルシューティング

「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました」エラーは、Identity and Access Management (IAM)とOracle DBaaSの統合全体の様々な問題が原因である可能性があります。

7.7.1 ORA-01017エラーについてクライアント側で確認する領域

クライアント側のORA-01017エラーは、IAM資格証明の問題、クライアント構成またはIAMプロファイルの問題が原因で発生する可能性があります。

IAMトークンのトラブルシューティング

  • トークンに使用されるOracle Cloud Infrastructure (OCI) CLIのバージョンを確認します。OCI CLIは、OCIバージョン3.4以上である必要があります。これには、IAMから新しいdb-tokenを取得するコマンドが含まれています。OCIのバージョンを確認するには、次のコマンドを実行します。
    oci --version
  • Oracle Databaseクライアント・バージョンを確認します。最新バージョンを確認するには、Oracle Databaseのドキュメントを確認します。現在、次のドライバのみがサポートされています。
    • JDBC: バージョン19.13.0.0.1以降のバージョンの19c JDBCクライアント、JDBC: バージョン21.5以降のバージョンの21c
    • Instant Client/SQL*Plus (Linuxのみ): バージョン19.13 (-2の注釈付き)以降のバージョンの19c
    • Instant Client/OCI/SQL*Plus (Linuxのみ): バージョン21.5以降のバージョンの21c (すべての機能がInstant Client/OCIバージョン21cでサポートされているわけではありません。可能な場合は最新の19cまたはバージョン23cクライアントを使用してください。)
    • SQLcl: バージョン21.4以降
    • ODP.net: バージョン19.13以降のバージョンの19c
    • ODP.net: バージョン21.4以降のバージョンの21c
    • Oracle Databaseリリース23c: すべてのクライアント

    これらのドライバの最新バージョンは、IAMトークンを使用してデータベースにアクセスするときに必要です。サポートされているすべてのデータベース・クライアントは、IAMデータベースのパスワードの使用時に動作します。

  • tnsnames.oraファイルに指定されたトークンの場所を確認します。データベース・クライアントとOCI CLIは、データベース・トークンと秘密キーを格納および取得するのに、同じデフォルトの場所(~/.oci/db-token)を使用します。異なる場所を指定できますが、OCI CLIとデータベース・クライアントの両方が同じディレクトリを使用するように構成される必要があります。正しいTOKEN_LOCATION値がtnsnames.oraまたはsqlnet.oraファイルの接続文字列で指定されていることを確認します。sqlnet.oraTOKEN_LOCATIONの値よりもtnsnames.oraが優先され、それよりも接続文字列が優先されます。
  • トークンが期限切れかどうかを確認します。IAMデータベース・トークンは1時間のみ有効です。データベース・トークンの期限が切れたら、API-keyを使用している場合は、次のOCI CLIコマンドを再実行して、別のトークンをリクエストします。
    oci iam db-token get
  • tnsnames.oraのTOKEN_AUTHパラメータ値を確認します。パラメータTOKEN_AUTH=OCI_TOKENが接続文字列、tnsnames.oraまたはsqlnet.oraのいずれかで設定されていることを確認します。TOKEN_AUTHの値については、接続文字列、tnsnames.orasqlnet.oraの順に優先されます。
  • デフォルトのユーザー指定のトークンの場所で、トークンまたは秘密キーが欠落しているかどうかを確認します。OCI CLIコマンドoci cli db-token getを実行した後で、TOKEN_LOCATIONで指定されたディレクトリにトークンと秘密キーの両方があることを確認します。db-tokenおよび秘密キーの場所は、次のコマンドを実行して確認できます。
    [oracle@localhost ~]$ oci iam db-token get
    

    次のような出力が表示されます。

    Private key written at /home/oracle/.oci/db-token/oci_db_key.pem
    db-token written at: /home/oracle/.oci/db-token/token
    db-token is valid until 2022-01-05 15:36:51
    

    場所がTOKEN_LOCATIONの設定と一致しない場合は、OCI CLIコマンドを更新するか、TOKEN_LOCATIONパラメータを更新します。

  • 自分のOCI IAMプロファイルを確認します。
    • 公開APIキーがOCIユーザー・アカウントに存在することを確認します。OCI CLIでは、デフォルトで、クライアントでAPI-keyを使用して、IAMからdb-tokenをリクエストします。公開APIキーがOCIユーザー・アカウントに存在しない場合、IAMはデータベース・トークンを戻しません。
    • IAMアカウントがロックされていないことを確認します。ロックされている場合は、IAM管理者にロック解除を依頼します。
    • IAMデータベース・パスワードを使用している場合は、IAMプロファイルでIAMデータベース・パスワードを設定していることを確認します。
  • APIキーを使用していない場合は、セキュリティ・トークンを使用していることを明示的に指定します。次のコマンドを使用します。
    oci iam db-token get --auth security_token

    セキュリティ・トークンが存在しないか期限切れの場合、このコマンドは、IAM (またはフェデレーテッドIdP)へのサインインのためにブラウザを開こうとします。環境にブラウザがない場合、このコマンドは失敗します。

IAMデータベース・パスワードとIAMトークンの両方のトラブルシューティング

  • Oracle Instant Clientのクライアント・トレースのみを確認します。SQL*PlusとInstant Clientを併用すると、クライアント・トレースで、いくつかの情報が示されます。Oracle Databaseクライアント・トレース・ファイルは、2つの異なるトレース・レベルを使用して生成できます。

7.7.2 データベース・クライアントのトレース・ファイル

クライアント側でIAM接続をトラブルシューティングするために、2つのレベルのトレース・ファイルを生成できます。

生成できるトレース・ファイルの2つのレベルは次のとおりです。

  • 低レベル・トレースでは、エラーの発生時にトレースが出力されます。

    • TCPSがIAM接続用に設定されていない場合は、プロトコルがTCPSである必要があるというメッセージが出力されます。

    • SSL_SERVER_DN_MATCHTRUEに設定されていない場合は、値がFALSEであるというメッセージが出力されます。

    • 無効なTOKEN_LOCATIONが指定されている場合は、トークンの場所が存在しないというメッセージが出力されます。

    • 指定されたTOKEN_LOCATIONまたはデフォルトのトークンの場所にdb-tokenおよび秘密キーが存在しない場合は、メッセージが出力されます。

    • アプリケーションがdb-tokenまたは秘密キーのみを渡した場合は、欠落している属性のメッセージが出力されます。

    • db-tokenが期限切れの場合は、メッセージが出力されます。

  • 高レベル・トレースでは、前述のようにエラーの発生時にトレースが出力されます。さらに、次のように、成功時にトレースが出力されます。
    • SSL_SERVER_DN_MATCHが存在する場所(tnsnames.oraまたはsqlnet.ora)が出力されます。また、TRUEに設定されている場合は、TRUEの値が出力されます。

    • db-tokenと秘密キーの両方がアプリケーションによって設定されている場合は、メッセージが出力されます。

    • TOKEN_AUTHに、正しい値OCI_TOKENがある場合は、値が出力されます。

    • db-tokenが期限切れでない場合は、メッセージが出力されます。

IAM接続のクライアント・トレースを制御する場合は、次のいずれかの方法を使用できます。

  • クライアント側のsqlnet.oraファイルに次の設定を追加します。

    • EVENT_25701=14 (低レベル・トレースの場合)

    • EVENT_25701=15 (高レベル・トレースの場合)

  • 環境変数EVENT_25701を設定します。
    • EVENT_25701=14 (低レベル・トレースの場合)

    • EVENT_25701=15 (高レベル・トレースの場合)

クライアント・トレース・ファイルは、次の場所に作成されます。

  • Linux: $ORACLE_HOME/log/diag/clients

  • Windows: %ORACLE_HOME%\log\diag\clients

クライアント側のsqlnet.oraADR_BASEパラメータを使用して、トレース・メッセージが格納されるディレクトリを指定できます。ディレクトリ・パスが有効で、書込み権限があることを確認します。diag_adr_enabledパラメータがfalseに設定されていないことを確認します。

ADR_BASEの設定例を次に示します。

ADR_BASE=/oracle/iam/trace

7.7.3 Oracle Cloud Infrastructure IAMおよびOracle DatabaseでのORA-01017エラーの確認

Oracle DatabaseインスタンスのORA-01017エラーは、IAMと連携するようにデータベースを設定した方法が原因で発生する可能性があります。

  • IAM構成が有効になっているかどうかを確認します。IAM統合用にOCIサーバーが構成されおり、1つ以上のデータベース・スキーマ(データベース・ユーザー)がIAMユーザーまたはグループにマップされている必要があります。これは、IAMトークンとIAMデータベース・パスワードの両方のユースケースに適用されます。構成が有効になっているかどうかを確認するには、SQL*Plusで次のコマンドを実行します。
    SELECT NAME, VALUE 
    FROM V$PARAMETER 
    WHERE NAME='identity_provider_type';

    あるいは、次のコマンドを使用します。

    SHOW PARAMETER IDENTITY_PROVIDER_TYPE

    戻り値がOCI_IAMではない場合は、外部認証を有効にします。

  • IAMにマップされているスキーマを確認します。どのIAMユーザーおよびIAMグループがマッピングで使用されるかに注意してください。この情報を確認するには、SQL*Plusで次の問合せを実行します。
    SELECT USERNAME, EXTERNAL_NAME, CREATED
    FROM DBA_USERS 
    WHERE AUTHENTICATION_TYPE='GLOBAL';

    出力で、IAM_USERまたはIAM_GROUPで始まるEXTERNAL_NAMEが少なくとも1つあることを確認します。IAMユーザーまたはグループの名前を書き留めます。グローバル・スキーマがない場合は、新しいスキーマを作成するか、既存のスキーマを変更し、そのユーザーがメンバーであるIAMユーザーまたはIAMグループにマップする必要があります。

  • Oracle Databaseインスタンスを再起動する必要があるかどうかをチェックします。場合によっては、IAM構成が導入される前に存在していたデータベース・インスタンスを再起動する必要があります。ただし、それを行う前に、他のすべてのトラブルシューティング・ガイドラインに従ってから、データベースを再起動してください

7.7.4 不適切に構成されたIAMユーザーが原因のORA-01017エラー

不適切に構成されたIAMユーザーから、いくつかのORA-01017エラーが発生する可能性があります。

  • IAMユーザーがOracle DBaaSインスタンスにログインできることを確認します。IAMユーザーに、フェデレーテッド・ユーザーとしてではなく、IAMユーザーのログインを試行するように依頼します。このユーザーがアカウントからロックアウトされていないことを確認します。(これが発生した場合は、ユーザーがIAM管理者に連絡する必要があります。)ユーザーのIAMアカウントがロックされている場合、このユーザーはOracle DBaaSインスタンスにログインできません。

    また、IAMユーザー名と、ユーザーがメンバーとして所属するIAMグループも確認する必要があります。これらのユーザー名またはグループ名のいずれかが、Oracle DBaaSサーバーから検出された、マップされたIAMユーザーおよびグループ名と一致する必要があります。マッピングがない場合、ユーザーのデータベースへのアクセスが拒否されます。その場合、IAM管理者が、ユーザーがアクセスする必要があるDBaaSインスタンスにマップされているIAMグループに、ユーザーを追加する必要があります。

  • API公開キーがIAMユーザー・プロファイルに登録されていることを確認します。IAMを使用したOracle DBaaSインスタンス構成でトークンが使用され、API-keyを使用してデータベース・トークンを取得する場合、API公開キーがユーザーのIAMユーザー・プロファイルに登録される必要があります。
  • IAMユーザー・プロファイルでIAMデータベース・パスワードが設定されていることを確認します。IAMを使用したOracle DBaaSインスタンス構成でデータベース・パスワード認証が使用されている場合は、IAMデータベース・パスワードがユーザーのIAMユーザー・プロファイルに設定されていることを確認します。また、Database Passwordsが、IAMユーザー・プロファイルのUser Capabilityセクションの許可される設定であることを確認します。

7.7.5 トークンを使用してデータベースにアクセスしようとしたときにORA-12599およびORA-03114エラーが発生する

ORA-12599: 「TNS: 暗号チェックサムの不一致が発生しました」エラーおよびORA-03114: 「Oracleに接続されていません。」エラーは、接続しようとしているデータベースがネイティブ・ネットワーク暗号化によって保護されていることを示します。

トークンを使用してOracleデータベースにアクセスする場合は、ネットワーク・ネイティブ暗号化ではなくTransport Layer Security (TLS)接続を確立する必要があります。これらのエラーを修正するには、TLSがデータベースに対して適切に構成されていることを確認してください。ローカル・データベースのユーザー名とパスワードを使用して構成をテストし、次のSYSCONTEXT USERENVパラメータを確認する必要があります。

  • NETWORK_PROTOCOL

  • TLS_VERSION

7.7.6 IAM管理者がORA-01017エラーに対処するために実行できるアクション

ORA-01017エラーに対処するいくつかのアクションは、IAM管理者のみが実行できます。

  • IAMユーザーがAPIキーを再作成する必要があるかどうかを確認します。IAMユーザーが削除されてから、まったく同じユーザー名で再作成された場合、Oracle Cloud Infrastructure (OCI) IAMでは、これは別のユーザーOCIDを持つ別のユーザーとみなされます。この場合、IAMユーザーはユーザー・アカウントおよびAPI-keyを再作成する必要があります。このアクションは、データベースのIAMユーザーおよびIAMグループ・マッピングには影響しません。
  • 必要に応じて、IAMユーザー・アカウントのロックを解除します。ユーザーが非アクティブであるか、ロックされている場合、データベース・アクセスが許可されるようにするには、IAM管理者がユーザー・アカウントのロックを解除する必要があります。
  • IAMポリシーを確認します。ユーザーがIAMデータベース・トークンを使用してデータベースにアクセスできるようにするには、IAMポリシーが必要です。リソースはdatabase-connectionsと呼ばれ、autonomous-database-familyのメンバーでもあります。Oracle DBaaSインスタンスでIAMデータベース・パスワードを使用している場合、IAMポリシーを作成する必要はありません。IAMポリシーを構成する場合は、ポリシーにuseまたはmanageのタグが必要であることに注意してください。例:
    • テナンシでautonomous-database-familyを使用するようにallow all-usersを設定します。これにより、すべてのIAMテナンシ・ユーザーは、IAMデータベース・トークンを使用して、テナンシ内のすべてのOracle DBaaSインスタンスにアクセスできます。
    • production_compartmentコンパートメントでdatabase-connectionsを使用するようにallow group DBUsersを設定します。これにより、DBUsers IAMグループのメンバーであるIAMユーザーは、IAMトークンを使用して、production_compartmentコンパートメントのデータベースにアクセスできます。
  • IAMユーザーおよびグループのマッピングを確認します。IAMユーザーは、データベース内のスキーマ(つまり、データベース・ユーザー)からの排他的マッピングを持っているか、データベース内のスキーマにマップされているIAMグループのメンバーです。次のSQL*Plus問合せを実行し、その出力を確認して、マップされたIAMユーザーおよびグループを探します。ユーザーにデータベース・スキーマへの1つのマッピングがあることを確認します。
    SELECT USERNAME, EXTERNAL_NAME, 
    FROM DBA_USERS 
    WHERE AUTHENTICATION_TYPE='GLOBAL';

7.8 Oracle DBaaS用のIAMの構成

Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し、ユーザーにIAMのデータベース・パスワードを作成させる必要があります。

7.8.1 トークンを使用して認証を行うユーザーを認可するためのIAMポリシーの作成

Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し(IAMトークンを使用している場合)、IAMグループを作成してグループ・メンバーシップを管理する必要があります。

IAM管理者は、データベース管理者と連携して、データベースの適切なIAMグループを作成する必要があります。個々のIAMユーザーは、パスワード・ベリファイアを使用している場合、プロファイルでIAMデータベース・パスワードを作成することが必要になります。
パスワード・ベリファイアを使用して認証するユーザーに対しては、ポリシーを作成する必要はありません。
  • allow groupコマンドを使用して、ポリシーを作成します。たとえば、次のようになります。
    allow group DBUsers to use database-connections in tenancy
  • コンパートメントtesting_compartmentでのみDBaaSインスタンスにアクセスするようにDBUsersグループのメンバーを制限するポリシーを作成するには、次のようにします。
    allow group DBUsers to use autonomous-database-family in compartment testing_compartment
  • コンパートメント内の単一データベースにグループのアクセスを制限するポリシーを作成するには、次のようにします。
    allow group DBUsers to use autonomous-database-family in compartment testing_compartment where target.database.id = 'ocid1.autonomousdatabase.oc1.iad.aaaabbbbcccc'
次のことに注意してください。
  • database-connectionsリソース・タイプは、autonomous-database-familyリソース・タイプに含まれています。ユースケースに応じて、どちらのリソースも使用できます。
  • データベースへのアクセスを有効にする最小動詞はuseです。manage動詞を使用して、データベースへのアクセスを有効にすることもできます。

ポリシー文の構文の詳細は、Oracle Cloud Infrastructureドキュメンテーションを参照してください。

7.8.2 IAMデータベース・パスワードの作成

Oracle DBaaSパスワード検証プロセスには、Oracle Cloud Infrastructure (OCI)コンソール・パスワードとは異なる、IAMユーザーが設定したIAMデータベース・パスワードが必要です。

OCI IAMデータベース・パスワードで使用できる文字のセットは、OCIコンソール・パスワードで使用できる文字のセットと似ていますが、OCI IAMデータベース・パスワードでは二重引用符文字は使用できない点が異なります。IAMデータベース・パスワードの作成の詳細は、ユーザー資格証明の管理に関する項を参照してください。
  1. OCIコンソールにログインして、ユーザー・ページに移動します。
  2. 使用しているIAMバージョンに応じて、「自分のプロファイル」または「ユーザー設定」(ナビゲーション・ツールバーの右上)にアクセスします。
  3. プロファイルまたは設定の左側の「リソース」で、「データベース・パスワード」リンクをクリックします。
  4. 「データベース・パスワードの作成」ボタンをクリックします。
  5. リストされている複雑度のルールを確実に適用して、説明とパスワードを追加します。
  6. 「データベース・パスワードの作成」をクリックして、パスワードを保存します。
    パスワードが作成されると、その説明と作成日が「データベース・パスワード」の下に表示されます。