Identity and Access Management (IAM)ユーザーのOracle Exadata Database Service on Dedicated Infrastructureへの接続

Oracle Cloud Infrastructure Identity and Access Management (IAM)認証および認可を使用するようにOracle Exadata Database Service on Dedicated Infrastructureを構成し、IAMユーザーがIAM資格証明を使用してOracle Databaseにアクセスできるようにします。

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証

Oracle Exadata Database Service on Dedicated Infrastructure上のOracle Databaseインスタンスで、Oracle Cloud Infrastructure IAMデータベース・パスワード(パスワード・ベリファイアを使用)、またはSSOトークンによるユーザー・アクセスを可能にする方法について学習します。

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証について

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

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

データベースにIAMトークンを使用する2つ目の接続方法は、より先進的です。トークンベースのアクセスの使用は、Exadata Cloud InfrastructureのOracle Databaseなどのクラウド・リソースに適しています。トークンは、IAMエンドポイントで強制できる強度に基づきます。これはマルチファクタ認証である可能性があり、パスワードのみを使用するよりも強力です。トークンを使用するもう1つの利点は、パスワード・ベリファイア(機密とみなされる)がメモリーに格納されず、メモリーで使用できないことです。

ノート

Oracle Databaseは、アイデンティティ・ドメインを含むOracle Cloud Infrastructure (OCI) IAMと、アイデンティティ・ドメインを含まないレガシーIAMに対するOracle DBaaS統合をサポートしています。アイデンティティ・ドメインでIAMを使用するときは、デフォルトと非デフォルトの両方のドメイン・ユーザーおよびグループがサポートされます。

デフォルト以外のカスタム・ドメインのサポートは、Oracle Databaseリリース19c、バージョン19.21以上でのみ使用できます(ただし、Oracle Databaseリリース21cでは使用できません)。

Oracle Cloud Infrastructure IAMとOracle Exadata Database Service on Dedicated Infrastructureとの統合によって、次のことがサポートされます:

  • Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)データベース・パスワード・ベリファイア認証
  • Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM) SSOトークン・ベース認証

Oracle Exadata Database Service on Dedicated InfrastructureでIAMユーザーを使用するためのアーキテクチャの詳細は、Oracle DBaaSデータベースに対するIAMユーザーの認証と認可を参照してください。

Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)データベース・パスワード・ベリファイア認証

Oracle Databaseインスタンスで、Oracle Cloud Infrastructure IAMデータベース・パスワード(パスワード・ベリファイアを使用)によるユーザー・アクセスを可能にすることができます。

Note

Any supported 12c and above database client can be used for IAM database password access to Oracle Database.

Oracle Cloud Infrastructure IAMデータベース・パスワードを使用すると、Oracle Databaseユーザーが通常ユーザー名とパスワードでログインするようにIAMユーザーがOracle Databaseインスタンスにログインできます。ユーザーは、IAMユーザー名およびIAMデータベース・パスワードを入力します。IAMデータベースのパスワードは、Oracle Cloud Infrastructureコンソールのパスワードとは異なります。IAMユーザーとパスワード・ベリファイアを使用すると、サポートされている任意のデータベース・クライアントでOracle Databaseにログインできます。

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

IAMデータベース・パスワードの管理の詳細は、ユーザー資格証明の管理を参照してください。

Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM) SSOトークン・ベース認証

データベースへのIAMトークン・アクセスの場合、クライアント・アプリケーションまたはツールは、IAMからIAMユーザーのデータベース・トークンをリクエストします。

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

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

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

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

データベース・クライアントがIAMデータベース・トークンを取得するには、いくつかの方法があります:
  • クライアント・アプリケーションまたはツールは、IAMからユーザーのデータベース・トークンをリクエストでき、クライアントAPIを介してデータベース・トークンを渡すことができます。APIを使用してトークンを送信すると、データベース・クライアント内の他の設定がオーバーライドされます。IAMトークンを使用するには、最新のOracle Databaseクライアント19c (19.16以上)が必要です。一部の以前のクライアント(19cおよび21c)は、トークン・アクセス用の限られた一連の機能を提供します。Oracle Databaseクライアント21cは、IAMトークン・アクセス機能を完全にはサポートしていません:
    • すべてのプラットフォーム上のJDBC-thin
      • 詳細は、IAMトークンベース認証のサポートおよびJDBCおよびUCPダウンロードを参照してください。
    • Linux上のSQL*PlusおよびOracle Instant Client OCI-C:

      詳細は、Identity and Access Management (IAM)トークンベース認証を参照してください

    • Oracle Data Provider for .NET (ODP.NET) Core: .NETクライアント(最新バージョンのLinuxまたはWindows)。.NETソフトウェア・コンポーネントは、次のサイトから無償でダウンロードできます:
      • Oracle Data Access Components - .NETのダウンロード
      • NuGet Gallery
      • Visual Studio Code Market Place
  • アプリケーションまたはツールがクライアントAPIを介したIAMデータベース・トークンのリクエストをサポートしていない場合、IAMユーザーはまずOracle Cloud Infrastructureコマンドライン・インタフェース(CLI)を使用してIAMデータベース・トークンを取得し、ファイルの場所に保存できます。たとえば、この接続方法を使用してSQL*Plusおよびその他のアプリケーションおよびツールを使用するには、最初にOracle Cloud Infrastructure (OCI)コマンドライン・インタフェース(CLI)を使用してデータベース・トークンを取得します。詳細は、db-token getを参照してください。データベース・クライアントがIAMデータベース・トークン用に構成されている場合、ユーザーがスラッシュ・ログイン形式でログインすると、データベース・ドライバは、デフォルトまたは指定されたファイルの場所に保存されたIAMデータベース・トークンを使用します。
  • クライアント・アプリケーションまたはツールは、Oracle Cloud Infrastructure IAMインスタンス・プリンシパルまたはリソース・プリンシパルを使用してIAMデータベース・トークンを取得し、IAMデータベース・トークンを使用してOracle Databaseインスタンスに対して自身を認証できます。詳細は、インスタンス・プリンシパルおよびリソース・プリンシパルのマッピングを参照してください。
  • IAMユーザーおよびOCIアプリケーションは、APIキーの使用など、いくつかの方法でIAMからデータベース・トークンをリクエストできます。例については、IAMトークンを使用するSQL*Plusのクライアント接続の構成を参照してください。OCIクラウド・シェル内での委任トークンの使用など、その他の方法の詳細は、Oracle DBaaSデータベースに対するIAMユーザーの認証と認可を参照してください。
ノート

データベースが制限モードの場合、RESTRICTED SESSION権限を持つDBAのみがデータベースに接続できます。

ユーザーがログインのためにユーザー名/パスワードを入力すると、データベース・ドライバはパスワード・ベリファイアを使用してデータベースにアクセスします。パラメータPASSWORD_AUTH=OCI_TOKENの場合、データベース・ドライバは、かわりにユーザー名とパスワードを使用してIAMに直接接続し、データベース・トークンをリクエストします。

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証の前提条件

Oracle DatabaseでのIdentity and Access Management (IAM)認証の前提条件を確認します。

Oracle DatabaseでのIAM認証の前提条件

Exadata Cloud Infrastructureのデータベース上でIAM認証を使用する前に、ネットワーキング・サービスを使用して、データベース・リソースが存在するVirtual Cloud Network (VCN)およびサブネットにサービス・ゲートウェイ、ルート・ルールおよびエグレス・セキュリティ・ルールを追加する必要があります。

  1. OCIドキュメントのタスク1: サービス・ゲートウェイの作成の手順に従って、データベース・リソースが存在するVCN内にサービス・ゲートウェイを作成します。
  2. サービス・ゲートウェイを作成したら、データベース・リソースが存在する(VCN内の)各サブネットにルート・ルールおよびエグレス・セキュリティ・ルールを追加して、これらのリソースがゲートウェイを使用してIAM認証を使用できるようにします:
    1. サブネットの「サブネットの詳細」ページに移動します。
    2. 「サブネット情報」タブで、サブネットの「ルート表」の名前をクリックして、その「ルート表の詳細」ページを表示します。
    3. 既存のルート・ルールの表で、次の特性を持つルールがすでに存在するかどうかを確認します:
      • 宛先: Oracle Services NetworkのすべてのIADサービス
      • ターゲット・タイプ: サービス・ゲートウェイ
      • ターゲット: VCN内に作成したサービス・ゲートウェイの名前

      そのようなルールが存在しない場合は、「ルート・ルールの追加」をクリックし、これらの特性を持つルート・ルールを追加します。

    4. サブネットの「サブネットの詳細」ページに戻ります。
    5. サブネットの「セキュリティ・リスト」表で、サブネットのセキュリティ・リストの名前をクリックして、その「セキュリティ・リストの詳細」ページを表示します。
    6. サイド・メニューの「リソース」で、「エグレス・ルール」をクリックします。
    7. 既存のエグレス・ルールの表で、次の特性を持つルールがすでに存在するかどうかを確認します:
      • ステートレス: いいえ
      • 宛先: Oracle Services NetworkのすべてのIADサービス
      • IPプロトコル: TCP
      • ソース・ポート範囲: すべて
      • 宛先ポート範囲: 443
    8. そのようなルールが存在しない場合は、「エグレス・ルールの追加」をクリックし、これらの特性を持つエグレス・ルールを追加します。

外部認証スキームの無効化

IAMユーザーによるOracle Databaseへのアクセスを有効にするための前提条件を確認します。

データベースで別の外部認証スキームが有効になっている場合は、Oracle DatabaseインスタンスでIAMを使用することを確認します。ある時点において有効化できる外部認証スキームは1つのみです。

IAMを使用し、別の外部認証スキームを有効にする場合は、まず他の外部認証スキームを無効にする必要があります。

IAMトークンを使用するためのTLSの構成

データベース・クライアントからデータベース・サーバーにIAMトークンを送信する場合は、TLS接続を確立する必要があります。ExaDB-Dサービス・インスタンスのデータベース証明書を含むTLSウォレットは、WALLET_ROOTの場所に格納する必要があります。WALLET_ROOT/<PDB GUID>/tlsのようになるようにtlsディレクトリを作成します。

データベース・クライアントとサーバー間にTLSを構成する場合は、いくつかのオプションを検討する必要があります。

  • 自己署名データベース・サーバー証明書と、既知の認証局によって署名されたデータベース・サーバー証明書の使用の比較
  • 一方向TLS (TLS)と相互または双方向TLS (mTLS)の比較
  • クライアントのウォレットの有無

自己署名証明書

自己署名証明書を使用することは、内部でITリソースに接続する場合の一般的なプラクティスです。これらは独自に作成でき、無料であるためです。リソース(この場合はデータベース・サーバー)には、データベース・クライアントに対して自身を認証するための自己署名証明書があります。自己署名証明書とルート証明書は、データベース・サーバー・ウォレットに格納されます。データベース・クライアントがデータベース・サーバー証明書を認識できるようにするには、ルート証明書のコピーがクライアントにも必要です。この自己作成ルート証明書は、クライアント側のウォレットに格納することも、クライアント・システムのデフォルト証明書ストアにインストールすることもできます(WindowsおよびLinuxのみ)。セッションが確立されると、データベース・クライアントは、データベース・サーバーによって送信された証明書が同じルート証明書によって署名されていることを確認します。

既知の認証局

既知のルート認証局を使用すると、ルート証明書がすでにクライアント・システムのデフォルト証明書ストアに格納されている可能性が高いという点でいくつかの利点があります。一般的なルート証明書の場合、クライアントがルート証明書を格納するための追加のステップはありません。欠点は、通常、これに関連付けられたコストがあることです。

一方向TLS

標準のTLSセッションでは、サーバーのみがクライアントに証明書を提供し、自身の認証を行います。クライアントは、サーバーに対して自身を認証するために個別のクライアント証明書を必要としません(HTTPSセッションの確立方法と同様)。データベースにはサーバー証明書を格納するためのウォレットが必要ですが、クライアントに必要なのはサーバー証明書の署名に使用されるルート証明書のみです。

双方向TLS (相互TLS、mTLSとも呼ばれる)

mTLSでは、クライアントとサーバーの両方に、相互に提供されるアイデンティティ証明書があります。ほとんどの場合、同じルート証明書がこれらの証明書の両方に署名するため、データベース・サーバーおよびクライアントで同じルート証明書を使用して他の証明書を認証できます。mTLSは、ユーザー・アイデンティティが証明書を介してデータベース・サーバーによって認証されるため、ユーザーの認証に使用されることがあります。これは、IAMトークンを渡すためには不要ですが、IAMトークンを渡すときに使用できます。

ウォレットありのクライアント

クライアント証明書を格納するためにmTLSを使用する場合、クライアント・ウォレットは必須です。ただし、ルート証明書は、同じウォレットまたはシステムのデフォルト証明書ストアのいずれかに格納できます。

ウォレットなしのクライアント

次の条件でTLSを使用する場合、ウォレットなしでクライアントを構成できます: 1)クライアントに独自の証明書がない状態で一方向TLSが構成されており、2)データベース・サーバー証明書に署名したルート証明書がシステムのデフォルト証明書ストアに格納されています。サーバー証明書が一般的な認証局によって署名されている場合、ルート証明書はすでに存在している可能性があります。自己署名証明書の場合は、クライアント・ウォレットを使用しないように、システムのデフォルト証明書ストアにルート証明書をインストールする必要があります。

データベース・クライアントとデータベース・サーバー間のTLSを構成する方法の詳細(前述のオプションを含む)は、『Oracle Databaseセキュリティ・ガイド』Transport Layer Security認証の構成を参照してください。

自己署名証明書の使用および追加のウォレット関連タスクの詳細は、『Oracle Databaseセキュリティ・ガイド』公開キー・インフラストラクチャ(PKI)要素の管理を参照してください。

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証の有効化、無効化および再有効化

Oracle DatabaseでのIdentity and Access Management (IAM)認証の有効化、無効化および再有効化について学習します。

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証の有効化

IAMユーザーによるOracle Databaseへのアクセスを有効化または再有効化するステップを確認します。

Note

Oracle Database supports the Oracle DBaaS integration for Oracle Cloud Infrastructure (OCI) IAM with identity domains as well as the legacy IAM, which does not include identity domains. Both default and non-default domain users and groups are supported when using IAM with Identity Domains.
  1. Oracle DatabaseでのIAM認可および認証の前提条件を実行します。詳細は、Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証の前提条件を参照してください。
  2. ALTER SYSTEMコマンドを使用して、Oracle Cloud Infrastructure (IAM)認証および認可を有効にします。
    ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=OCI_IAM SCOPE=BOTH;
  3. IDENTITY_PROVIDER_TYPEシステム・パラメータの値を確認します。
    SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
    
    NAME                     VALUE
    ----------------------   -------
    identity_provider_type   OCI_IAM

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)認証の無効化

Oracle DatabaseのIAM外部認証ユーザー・アクセスを無効にするステップについて説明します。

Oracle DatabaseインスタンスでのIAMユーザー・アクセスを無効にするには:

  1. ALTER SYSTEMコマンドを使用して、IAM統合を無効にします。
    ALTER SYSTEM RESET IDENTITY_PROVIDER_TYPE SCOPE=BOTH;
  2. データベース・アクセスを許可するIAMポリシーも削除する場合は、IAMユーザーによるデータベースへのアクセスを許可するために設定したIAMグループおよびポリシーを確認して変更または削除する必要があります。

Oracle DatabaseツールとIdentity and Access Management (IAM)認証の使用

IAM認証を有効にした状態でOracle Databaseツールを使用する場合の注意事項を確認します。

  • Oracle APEXは、Oracle Databaseを使用するIAMユーザーではサポートされていません。
  • データベース・アクションは、Oracle Databaseを使用するIAMユーザーではサポートされていません。Oracle Databaseでの通常のデータベース・ユーザーの使用の詳細は、データベース・ユーザーへのデータベース・アクション・アクセス権の付与を参照してください。
  • Oracle Machine Learning Notebooksおよびその他のコンポーネントは、Oracle Databaseを使用するIAM認可済ユーザーではサポートされていません。Oracle Databaseでの通常のデータベース・ユーザーの使用の詳細は、Oracle Machine Learningコンポーネントへの既存のデータベース・ユーザー・アカウントの追加を参照してください。

Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)のグループとポリシー、ユーザー、ロールおよびデータベース・パスワードの管理

IAMユーザー用のOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)グループおよびポリシーの作成

IAMグループのポリシー・ステートメントを記述し、IAMユーザーがIAMデータベース・トークンを使用してOracle Cloud Infrastructureリソース(特にOracle Databaseインスタンス)にアクセスできるようにするステップを確認します。

ポリシーは、特定のリソースにアクセスできるユーザーとその方法を指定するステートメントのグループです。アクセスは、テナンシ全体、コンパートメント内のデータベースまたは個々のデータベースに対して付与できます。つまり、特定のコンパートメント内の特定のタイプのリソースへの特定のアクセス・タイプを特定のグループに付与するポリシー・ステートメントを記述します。

ノート: IAMトークンを使用してOracle Databaseにアクセスするには、ポリシーの定義が必要です。IAMデータベース・パスワード・ベリファイアを使用してOracle Databaseにアクセスする場合、ポリシーは不要です。

  1. データベースにアクセスするIAMユーザーのIAMグループを作成します。グループの作成およびIAMユーザーのグループへの追加については、OCI IAMドキュメントを確認してください。

    たとえば、グループDBUsersを作成します。詳細は、グループの管理を参照してください。

  2. Oracle Cloud Infrastructureリソースへのアクセスを有効にするポリシー・ステートメントを記述します。
    1. Oracle Cloud Infrastructureコンソールで、「アイデンティティとセキュリティ」をクリックし、「ポリシー」をクリックします。
    2. ポリシーを記述するには、「ポリシーの作成」をクリックし、「名前」および「説明」を入力します。
    3. ポリシー・ビルダーを使用してポリシーを作成します。たとえば、IAMグループDBUsersのユーザーがテナンシ内のOracle Databaseにアクセスできるようにするポリシーを作成するには:
      Allow group DBUsers to use database-connections in tenancy

      ここで、database-connectionsはデータベースに接続するためのOCIリソース名です。Useは、データベースへのアクセスを許可する最小動詞です。usemanageの両方を使用できます。

      たとえば、DBUsersグループのメンバーがコンパートメントtesting_compartment内のOracle Databaseにのみアクセスするように制限するポリシーを作成するには:
      allow group DBUsers to use database-connections in compartment testing_compartment
      たとえば、グループのアクセスをコンパートメント内の単一データベースに制限するポリシーを作成するには:
      allow group DBUsers to use database-connections in compartment testing_compartment where target.database.id = 'ocid1.database.oc1.iad.aaaabbbbcccc'
    4. 「作成」をクリックします。

      ポリシーの詳細は、「ポリシーの管理」を参照してください。

Oracle Database上のIAMユーザーに使用するポリシーの作成に関するノート:
  • ポリシーにより、IAMユーザーがテナンシ全体やコンパートメント内のOracle Databaseインスタンスにアクセスできるようにしたり、単一のOracle Databaseインスタンスにアクセスを制限したりできます。
  • インスタンス・プリンシパルおよびリソース・プリンシパルには、動的グループを使用する必要があります。動的グループを作成し、作成したポリシーで動的グループを参照してOracle Cloud Infrastructureにアクセスできます。詳細は、ポリシーおよびロールの構成によるクラウド・リソースへのアクセスおよび動的グループの管理を参照してください。

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)ユーザーの認可

Oracle DatabaseインスタンスでIAMユーザーを認可するステップを確認します。

IAMユーザーにOracle Databaseへのアクセスを許可するには、IDENTIFIED GLOBALLY AS句を指定したCREATE USERまたはALTER USER文を使用してデータベース・グローバル・ユーザーをIAMグループにマップするか、IAMユーザーに直接マップします。

IAMユーザーのOracle Databaseインスタンスへの認可は、IAMグローバル・ユーザー(スキーマ)をIAMユーザー(排他的マッピング)またはIAMグループ(共有スキーマ・マッピング)にマップすることで機能します。

データベース・インスタンスでIAMユーザーを認可するには:

  1. DBA権限を持つユーザーとして、IAMを使用できるデータベースにログインします。DBAロールを持つユーザーには、これらのステップに必要なCREATE USERおよびALTER USERシステム権限が必要です。
  2. CREATE USER文またはALTER USER文を使用してOracle Databaseユーザー(スキーマ)間のマッピングを作成し、IAMグループ名を指定してIDENTIFIED GLOBALLY AS句を含めます。グローバル・ユーザーをIAMグループにマップするには、次の構文を使用します:
    CREATE USER global_user IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_GROUP_NAME';
    たとえば、db_sales_groupという名前のIAMグループをsales_groupという名前の共有データベース・グローバル・ユーザーにマップするには:
    CREATE USER sales_group IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=db_sales_group';

    これにより、共有グローバル・ユーザー・マッピングが作成されます。グローバル・ユーザーsales_groupを使用したマッピングは、IAMグループ内のすべてのユーザーに対して有効です。したがって、db_sales_groupのユーザーは、sales_groupグローバル・ユーザーの共有マッピングを介してIAM資格証明を使用してデータベースにログインできます。

    他のIAMグループまたはユーザーの追加のグローバル・ユーザー・マッピングを作成する場合は、各IAMグループまたはユーザーについて次のステップに従います。

    ノート

    IDENTIFIED GLOBALLYではないデータベース・ユーザーは、Oracle DatabaseでIAM認証が有効になっている場合でも、以前と同様にログインできます。

ローカルIAMユーザーをOracle Databaseグローバル・ユーザーに排他的にマップするには

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

  1. DBA権限を持つユーザーとして、IAMを使用できるデータベースにログインします。DBAロールを持つユーザーには、これらのステップに必要なCREATE USERおよびALTER USERシステム権限が必要です。
  2. CREATE USER文またはALTER USER文を使用してOracle Databaseユーザー(スキーマ)間のマッピングを作成し、IAMローカルIAMユーザー名を指定してIDENTIFIED GLOBALLY AS句を含めます。たとえば、peter_fitchという名前の新しいデータベース・グローバル・ユーザーを作成し、このユーザーをpeterfitchという名前の既存のローカルIAMユーザーにマップするには:
    CREATE USER peter_fitch IDENTIFIED GLOBALLY AS 'IAM_PRINCIPAL_NAME=peterfitch'

インスタンス・プリンシパルまたはリソース・プリンシパルのいずれかを使用して、データベース・トークンを取得し、アプリケーションからOracle Databaseインスタンスへの接続を確立できます。

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

Oracle DatabaseでのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)ロールの追加

オプションで、複数のIAMユーザーが同じ共有グローバル・ユーザーにマップされている場合に、追加のデータベース・ロールおよび権限をIAMユーザーに提供するグローバル・ロールを作成します。

グローバル・ロールの作成はオプションですが、共有スキーマにユーザーを割り当てるときに便利です。

グローバル・ロールを使用して、同じ共有スキーマを使用するユーザーを任意に区別できます。たとえば、一連のユーザーがすべて同じ共有スキーマを持ち、共有スキーマにCREATE SESSION権限を設定できます。その後、グローバル・ロールを使用して、すべてのユーザーが同じ共有スキーマを使用する異なるユーザー・グループに異なる権限およびロールを割り当てることができます。

Oracle DatabaseのIAMユーザーへの追加のロールの付与は、Oracle Databaseグローバル・ロールをIAMグループにマッピングすることで行えます。

  1. DBA権限を持つユーザーとして、IAMを使用できるデータベースにログインします。これらのステップには、DBA権限CREATE ROLEおよびALTER ROLEシステム権限を持つユーザーが必要です。
  2. CREATE ROLEまたはALTER ROLE文を使用してOracle Databaseロールのデータベース認可を設定し、IAMグループ名を指定してIDENTIFIED GLOBALLY AS句を含めます。次の構文を使用して、グローバル・ロールをIAMグループにマップします:
    CREATE ROLE global_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_GROUP_of_WHICH_the_IAM_USER_IS_a_MEMBER';
    たとえば、ExporterGroupという名前のIAMグループをexport_roleという名前の共有データベース・グローバル・ロールにマップするには:
    CREATE ROLE export_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=ExporterGroup';
  3. GRANT文を使用して、必要な権限またはその他のロールをグローバル・ロールに付与します。
    GRANT CREATE SESSION TO export_role;
    GRANT DWROLE TO export_role;
  4. 既存のデータベース・ロールをIAMグループに関連付ける場合は、ALTER ROLE文を使用して、既存のデータベース・ロールを変更し、ロールをIAMグループにマップします。次の構文を使用して、既存のデータベース・ロールを変更してIAMグループにマップします:
    ALTER ROLE existing_database_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_Group_Name';

IAMグループごとにこれらのステップに従って、他のIAMグループに追加のグローバル・ロール・マッピングを追加します。

IAMユーザーのOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)データベース・パスワードの作成

IAMユーザーを追加し、IAMユーザーがユーザー名とパスワードを指定してOracle Databaseにログインできるようにするには、IAMデータベース・パスワードを作成する必要があります。

詳細は、IAMデータベース・パスワードの使用を参照してください。

関連トピック

クライアント接続の構成

IAM認証を使用するように様々なクライアントを構成します。

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

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

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

この指定では、user_nameはIAMユーザー名です。domain_name/user_nameの組合せには128バイトの制限があります。

次の例は、IAMユーザーpeter_fitchがデータベース・インスタンスにログインする方法を示しています。
sqlplus /nolog
connect peter_fitch@db_connect_string
Enter password: password
一部の特殊文字では、user_nameおよびの前後に二重引用符が必要です。例:
"peter_fitch@example.com"@db_connect_string

"IAM database password"

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

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

  1. IAMユーザー・アカウントがあることを確認します。
  2. IAM管理者およびデータベース管理者に問い合せて、コンパートメントまたはテナンシ内のデータベースへのアクセスを許可するポリシーがあり、データベース内のグローバル・スキーマにマップされていることを確認します。
  3. アプリケーションまたはツールが直接IAM統合をサポートしていない場合は、OCI CLIをダウンロード、インストールおよび構成します。(OCIコマンドライン・インタフェースのクイックスタートを参照。)OCI CLI構成の一部としてAPIキーを設定し、デフォルト値を選択します。
    1. IAMユーザーのAPIキー・アクセスを設定します。
    2. db-tokenを取得します。例:
      • OCI CLIを使用して、API-keydb-tokenを取得します:
        oci iam db-token get
      • セキュリティ(またはセッション)・トークンを使用してdb-tokenを取得します:
        oci iam db-token get --auth security_token
      • 委任トークンを使用してdb-tokenを取得します: クラウド・シェルにログインすると、委任トークンが自動的に生成され、/etcディレクトリに配置されます。このトークンを取得するには、OCI CLIで次のコマンドを実行します:
        oci iam db-token get
      • OCI CLIでインスタンス・プリンシパルを使用してdb-tokenを取得します:
        oci iam db-token get --auth instance_principal

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

      詳細は、必要なキーとOCIDを参照してください。

  4. Oracle Databaseクライアント・リリース19cの最新リリース更新を使用していることを確認します。

    この構成は、Oracle Databaseクライアント・リリース19cでのみ機能します。

  5. 既存のプロセスに従ってデータベースからウォレットをダウンロードし、SQL*Plusで使用する構成手順に従います。
    1. sqlnet.oraSSL_SERVER_DN_MATCH=ONを検索して、DN一致が有効であることを確認します。
    2. TOKEN_AUTH=OCI_TOKENsqlnet.oraファイルに追加して、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_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_AUTHパラメータで更新したら、IAMユーザーは、次のコマンドを実行してSQL*Plusを起動することで、データベース・インスタンスにログインできます。接続記述子自体を含めることも、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を取得し、秘密キーを使用して署名してから、トークンをデータベースに送信します。スラッシュ(/)のかわりにIAMユーザー名およびIAMデータベース・パスワードが指定されている場合、データベース・クライアントはdb-tokenを使用するかわりに、パスワードを使用して接続します。

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

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

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

    詳細は、IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続についてを参照してください

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

    詳細は、IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続に設定するパラメータを参照してください

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

    詳細は、IAMユーザー名およびデータベース・パスワードを使用してトークンを取得するためのデータベース・クライアントの構成を参照してください

  • IAMユーザー名およびセキュアな外部パスワード・ストア(SEPS)を有効にして、IAMデータベース・トークンをリクエストできます。

    詳細は、IAMトークンを取得するための安全性の高い外部パスワード・ストア・ウォレットの構成を参照してください

インスタンス・プリンシパルを使用したIAM認証によるデータベースへのアクセス

ADMINユーザーがデータベースでOCI IAMを有効にすると、アプリケーションはインスタンス・プリンシパルを使用してOCI IAMデータベース・トークンを介してデータベースにアクセスできます。

詳細は、インスタンス・プリンシパルを使用したOracle Cloud Infrastructure APIへのアクセスを参照してください。

詳細は、インスタンス・プリンシパルまたはリソース・プリンシパルを使用したデータベースへのアクセスを参照してください。

プロキシ認証の構成

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

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

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

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

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

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

このタイプのユーザーがあることを確認したら、IAMユーザーにプロキシを許可するようにデータベース・ユーザーを変更します。

  1. ALTER USERシステム権限を持つユーザーとしてデータベース・インスタンスにログインします。
  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

IAMユーザー・プロキシ認証の検証

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

  1. IAMユーザーとして接続し、データベース・ユーザーにプロキシされます。SHOW USERおよびSELECT SYS_CONTEXTコマンドを実行します。

    たとえば、データベース・ユーザーhrappにプロキシされる場合のIAMユーザーpeterfitchのプロキシ認証を確認するとします。ここに示す様々なタイプの認証方法を使用してデータベースに接続する必要がありますが、実行したコマンドの出力はすべてのタイプで同じになります。

    • パスワード認証の場合:
      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" 
      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"
    • トークン認証の場合:
      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"
      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"

IAM認証済ユーザーでのデータベース・リンクの使用

データベース・リンクを使用して、あるデータベース・インスタンスから別のデータベース・インスタンスにOCI IAMユーザーとして接続できます。

接続ユーザーまたは固定ユーザーのデータベース・リンクを使用して、OCI IAMユーザーとしてデータベースに接続できます。

ノート

現在のユーザー・データベース・リンクは、OCI IAMユーザーとしてのExadata Cloud Infrastructure内のデータベースへの接続にはサポートされていません。
  • 接続ユーザー・データベース・リンク: 接続ユーザー・データベース・リンクの場合、IAMユーザーは、データベース・リンクによって接続されたソース・データベースとターゲット・データベースの両方のスキーマにマップされている必要があります。データベース・パスワード・ベリファイアまたはIAMデータベース・トークンを使用して、接続ユーザー・データベース・リンクを使用できます。

  • 固定ユーザー・データベース・リンク: 固定ユーザー・データベース・リンクは、データベース・ユーザーまたはIAMユーザーを使用して作成できます。IAMユーザーを固定ユーザー・データベース・リンクとして使用する場合、IAMユーザーはターゲット・データベースにスキーマ・マッピングを持っている必要があります。データベース・リンクのIAMユーザーは、パスワード・ベリファイアでのみ構成できます。

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

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

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ユーザーに排他的にマップされます。共有データベース・スキーマほど一般的ではありませんが、このユーザーは、ユーザーが独自のスキーマ・オブジェクトを必要とする場合のために作成されます。Oracleでは、認可管理を容易にするグローバル・ロールを使用して、これらのユーザーにデータベース権限を付与することをお薦めします。これらのユーザーは、排他スキーマに対する直接権限およびロール付与を持つこともできます。

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

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

IAMグループおよびIAM動的グループにマップされているOracle Databaseグローバル・ユーザーは、ログイン時にIAMユーザーおよびOCIアプリケーションに、そのスキーマに付与された権限およびロールとともにスキーマを提供します。

  1. CREATE USERまたはALTER USERシステム権限を持つユーザーとして、Oracle DBaaSインスタンスにログインします。
  2. Run the CREATE USER or ALTER USER statement with the IDENTIFIED GLOBALLY AS clause specifying the IAM group name (which can be a dynamic group).
    たとえば、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';

Oracle Databaseグローバル・ロールへのIAMグループのマッピング

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

グローバル・ロールはデータベース・スキーマ(ユーザー)に付与できません。グループにマップして、データベースへのアクセス時にIAMユーザーに割り当てることのみ可能です。
  1. CREATE ROLEまたはALTER ROLEシステム権限を付与されたユーザーとして、Oracle DBaaSインスタンスにログインします
  2. Run the CREATE ROLE or ALTER ROLE statement with the IDENTIFIED GLOBALLY AS clause specifying the name of the IAM group (which can be a dynamic group).
    たとえば、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で認可されます。

Oracle Databaseグローバル・ユーザーへのIAMユーザーの排他的マッピング

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

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

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';

インスタンス・プリンシパルおよびリソース・プリンシパルのマッピング

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

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

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

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

  1. たとえば、データベース・インスタンスinst1に、IAMでデフォルト・ドメインを使用しているデータベース・グローバル・ユーザーpeterfitchとしてログインするには:
    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"

    Or

    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

      Or

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

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

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

      Or

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

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

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

      Or

      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

      Or

      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