7 Oracle DBaaSデータベースに対するIAMユーザーの認証と認可
Identity and Access Management (IAM)ユーザーは、Oracle Database as a service (Oracle DBaaS)インスタンスに接続するように構成できます。
- Oracle DBaaSに対するIAMユーザーの認証と認可の概要
Oracle DBaaSインスタンスに対するIAMユーザーの認証および認可を開始する前に、全体的なプロセスについて理解する必要があります。 - IAM用のOracle DBaaSの構成
IAMと連携するようにOracle DBaaSを構成するには、Oracle DBaaSデータベースの管理者が、最初にIAM統合を有効にし、次にOracle DBaaSのIAMユーザーおよびロールを認可する必要があります。 - Oracle DBaaS用のIAMの構成
Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し、ユーザーにIAMのデータベース・パスワードを作成させる必要があります。 - インスタンス・プリンシパルまたはリソース・プリンシパルを使用したデータベースへのアクセス
Oracle Cloud Infrastructure (OCI)アプリケーションまたは関数は、それ固有のインスタンス・プリンシパルまたはリソース・プリンシパルを使用してデータベース・インスタンスに接続できます。 - データベース・クライアント接続の構成
IAMクライアント接続の構成によって、Oracle DBaaSインスタンスへのIAMユーザーの認証が制御されます。 - IAM統合を使用したデータベース・クロステナンシへのアクセス
あるテナンシのユーザーおよびグループは、両方のテナンシのポリシーで許可されている場合、別のテナンシのDBaaSデータベース・インスタンスにアクセスできます。 - Oracle DBaaSとIAMの統合でのデータべース・リンク
IAM資格証明を使用してOracle DBaaSデータベースにアクセスする際のデータベース・リンクの使用がサポートされています。 - IAM接続のトラブルシューティング
「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました」
エラーは、Identity and Access Management (IAM)とのOracle DBaaS統合全体のいくつかの異なる問題によって発生する可能性があります。
親トピック: ユーザー認証および認可の管理
7.1 Oracle DBaaSに対するIAMユーザーの認証と認可の概要
Oracle DBaaSインスタンスに対するIAMユーザーの認証および認可を開始する前に、全体的なプロセスについて理解する必要があります。
- Oracle DBaaSに対するIAMユーザーの認証と認可について
Oracle DBaaSインスタンスのユーザーは、Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)で集中管理できます。 - Oracle DBaaSとIAMの統合のアーキテクチャ
Oracle DBaaSインスタンスとIAMの統合のアーキテクチャは、DBaaSインスタンスに対する認証または接続に、IAMユーザーがOracle Cloud Infrastructure (OCI) IAMデータベース・パスワード・ベリファイアを使用しているか、OCI IAMトークンを使用しているかによって異なります。 - Oracle DBaaSとマップするIAMユーザーおよびグループ
IAMユーザーは、データベース・スキーマのIAMユーザーへの排他的マッピングと、ユーザーがメンバーとして所属する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は、アイデンティティ・ドメインを含むOCI IAMと、アイデンティティ・ドメインを含まないレガシーIAMに対するOracle DBaaS統合をサポートしています。アイデンティティ・ドメインでIAMを使用する場合、デフォルト・ドメイン・ユーザーおよびデフォルト以外のドメイン・ユーザーとグループの両方がサポートされます。Oracle Databaseでは、レガシーIAMテナンシを使用する場合、OCI IAMとローカルIAMユーザーのOracle DBaaS統合のみがサポートされます。フェデレーテッド・ユーザーは、アイデンティティ・ドメインでIAMを使用する場合にサポートされます。
DBaaSとOCI IAMの統合では、管理権限(SYSDBA
、SYSOPER
、SYSBACKUP
、SYSDG
、SYSKM
およびSYSRAC
)を持つユーザーはサポートされません。
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インスタンスに接続できるようにするための一般的なプロセスは次のとおりです。
- IAM管理者は、IAMユーザー・アカウントおよびグループを作成および管理し、タスクに基づいてIAMユーザーを適切なIAMグループに追加します。
- Oracle DBaaSインスタンスでは、データベース管理者がOracle DBaaSとIAMエンドポイント間の接続を有効にします。
データベースがAutonomous Database on Dedicated Exadata Infrastructureの場合は、新しいPDBのIAM接続が自動的に有効になります。詳細は、Oracle DBaaSのドキュメントを参照してください。
- Oracle DBaaSサーバーで、データベース管理者が、次のタイプのマッピングを実行してIAMユーザーの認可を有効にします。
- 共有Oracle Databaseグローバル・ユーザー・アカウントへのIAMグループのマッピング
- Oracle Databaseグローバル・ロールへのIAMグループのマッピング
- Oracle Databaseグローバル・ユーザーへのIAMユーザーの排他的マッピング
IAMユーザーは、1つのスキーマにマップする必要があります(排他的にマップするか、共有スキーマにマップします)。ユーザーはオプションで、1つ以上のグローバル・ロールにマップされるIAMグループのメンバーにすることもできます。
- 次のユースケースは、集中管理された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 OCI IAMデータベース・パスワード・ベリファイアを使用してOracle DBaaSへの認証を行うIAMユーザー」の説明
- IAMユーザーが、Oracle Databaseクライアントに関連付けられているツールまたはアプリケーション・クライアントにログインします。このユーザーは、IAMユーザー名およびIAMデータベース・パスワードを使用してログインし、これによって認証プロセスが開始されます。ユーザーは、Oracle Database release12.1.0.2以降の任意のデータベース・クライアントを使用できます。以前のバージョンのデータベース・クライアントは、
12C
データベース検証をサポートしていません。 - IAMユーザーの接続リクエストが、データベース・クライアントを介して送信されます。
- IAMユーザー名がOracle DBaaSインスタンスに送信されると、データベースが、ユーザーのOracle Cloud Infrastructure (OCI) IAMデータベース・パスワード・ベリファイアをIAMからリクエストします。(IAMユーザー・プロファイルに、IAMデータベース・パスワード・ベリファイアが格納されます。)このベリファイアはパスワードをハッシュしたバージョンであり、クリアテキストではありません。IAMからのパスワード・ベリファイアが、データベース・クライアントによって生成されたパスワード・ベリファイアと一致する場合、ユーザーは認証されます。Oracle DBaaSインスタンスは、リソース・プリンシパルを使用してIAMと通信します。リソース・プリンシパルは、IAMによって認識され、データベースがIAMと安全に通信するために使用するOracle DBaaSのアイデンティティです。
- 認証が成功すると、Oracle DBaaSインスタンスがIAMユーザー・グループを取得します。そのIAMユーザーがOracle Databaseスキーマにマップされ、かつOCIアカウントからロック・アウトされていない場合、IAMユーザーはデータベースに正常にアクセスできます。ユーザーには、ユーザーがメンバーであるグループにマップされているグローバル・ロールも付与されます。
- Oracle Cloud Infrastructure (OCI)ログイン・カウンタが、OCIコンソール・パスワードとOCIデータベース・パスワードの両方のログインを追跡します。IAMデータベース・パスワードを使用したデータベースのログインが成功すると、このカウンタがリセットされます。
- 前述のステップの結果に基づいて、IAMユーザー・データベースのアクセス試行が成功または失敗します。
次の図は、IAMユーザーまたはOracle Cloud Infrastructure (OCI)アプリケーションがOCI IAMトークンを使用してOracle DBaaSインスタンスにアクセスしたときに実行されるアクションの開始を示しています。
図7-2 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート1
「図7-2 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート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
をリクエストできません。
- 1a: IAMユーザーの場合は、ユーザーがローカル・システムに
- アプリケーション、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
をリクエストするように構成することもできます。 - 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 OCI IAMトークンを使用してOracle DBaaSへの認証を行うIAMユーザーまたはOCIアプリケーション、パート2」の説明
db-token
が署名されて、Oracle DBaaSに送信されます。データベース・クライアント/サーバー・リンクおよびDN一致でTLSを有効にする必要があります。(Autonomous Databaseウォレット・ファイルを使用してAutonomous Databaseインスタンスに接続する場合、TLSおよびDNSの一致はすでに設定されています。)DN一致は、JDBCドライバでデフォルトでオンになっていますが、OCI-Cデータベース・クライアント(およびインスタント・クライアント)用に構成される必要があります。データベース・クライアントがIAMユーザー名およびIAMデータベース・パスワードを使用して取得するdb-token
には秘密キーが含まれず、データベース・クライアントによって署名されません。- 有効なコピーがまだローカルで使用できない場合、Oracle DBaaSインスタンスが、IAM公開キーをリクエストします。このキーは、
db-token
がIAMによって送信されたことを検証するために使用されます。Oracle DBaaSインスタンスは、リソース・プリンシパルを使用してIAMと通信します。 - この認可ステップが正常に完了すると、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ユーザーおよびロールを認可する必要があります。
- Oracle DBaaSに対する外部認証の有効化
Oracle DBaaSでIAM接続を有効化する方法は、使用しているOracle DBaaSのプラットフォームによって異なります。 - IAMユーザーおよびOracle Cloud Infrastructureアプリケーションの認可の構成
Oracle DBaaSデータベースの管理者は、IAMユーザーおよびOracle Cloud Infrastructure (OCI)アプリケーションをOracle Databaseのグローバル・スキーマおよびグローバル・ロールにマップできます。 - IAMプロキシ認証の構成
プロキシ認証により、IAMユーザーはアプリケーションのメンテナンスなどのタスクのためにデータベース・スキーマにプロキシできます。
7.2.1 Oracle DBaaSに対する外部認証の有効化
Oracle DBaaSでIAM接続を有効化する方法は、使用しているOracle DBaaSのプラットフォームによって異なります。
-
Oracle Autonomous Database on Dedicated Exadata Infrastructure: IAM接続は、このプラットフォームで機能するように自動的に構成されます。専用ExadataインフラストラクチャでのOracle Autonomous Databaseの使用を参照してください
-
Oracle Autonomous Database Serverless: このプラットフォームを使用するには、IAM接続を有効にする必要があります。「Oracle Autonomous Database Serverlessの使用」を参照してください。
-
Oracle Base Database Service: ベース・データベース・サービスでのアイデンティティおよびアクセス管理認証の使用を参照してください。
-
Oracle Exadata Database Service on Dedicated Infrastructure: Oracle Exadata Database Service on Dedicated InfrastructureへのIdentity and Access Management (IAM)ユーザーの接続を参照してください。
Oracle Autonomous Database Serverless以外のデータベース
- 前提条件およびその他の必要な情報については、Oracle DBaaSプラットフォームのドキュメントを参照してください。
- 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
パラメータが別の値に設定されている可能性があります。
親トピック: IAM用のOracle DBaaSの構成
7.2.2 IAMユーザーおよびOracle Cloud Infrastructureアプリケーションの認可の構成
Oracle DBaaSデータベースの管理者は、IAMユーザーおよびOracle Cloud Infrastructure (OCI)アプリケーションをOracle Databaseのグローバル・スキーマおよびグローバル・ロールにマップできます。
- IAMユーザーおよびOracle Cloud Infrastructureアプリケーションの認可の構成について
Oracle DBaaSのデータベース・ユーザー(スキーマ)へのIAMユーザーおよびOracle Cloud Infrastructure (OCI)アプリケーションのマッピングを作成します。 - 共有Oracle Databaseグローバル・ユーザーへのIAMグループのマッピング
IAMグループおよびIAM動的グループにマップされたOracle Databaseグローバル・ユーザーにより、IAMユーザーおよびOCIアプリケーションがログインするときに、スキーマおよびそのスキーマに付与された権限とロールがIAMユーザーおよびOCIアプリケーションに付与されます。 - Oracle Databaseグローバル・ロールへのIAMグループのマッピング
IAMグループおよび動的グループにマップされたOracle Databaseグローバル・ロールは、メンバー・ユーザーおよびアプリケーションに、ログイン・スキーマを介して付与されている権限およびロールに加えて、さらに権限およびロールを付与します。 - Oracle Databaseグローバル・ユーザーへのIAMユーザーの排他的マッピング
IAMユーザーをOracle Databaseグローバル・ユーザーに排他的にマッピングできます。 - IAMユーザー・マッピング定義の変更または移行
ALTER USER
文を使用して、IAMユーザーからデータベース・グローバル・ユーザーへのマッピングを更新できます。 - インスタンス・プリンシパルおよびリソース・プリンシパルのマッピング
アプリケーションは、インスタンス・プリンシパルおよびリソース・プリンシパルを使用して、データベース・トークンを取得し、Oracle DBaaSインスタンスへの接続を確立できます。 - IAMユーザーのログオン情報の確認
Oracle DBaaSインスタンスのIAMユーザーを構成および認可した後、Oracleデータベース側で一連のSQL問合せを実行して、ユーザー・ログオン情報を確認できます。
親トピック: IAM用のOracle DBaaSの構成
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アプリケーションに付与されます。
7.2.2.3 Oracle Databaseグローバル・ロールへのIAMグループのマッピング
IAMグループおよび動的グループにマップされたOracle Databaseグローバル・ロールは、メンバー・ユーザーおよびアプリケーションに、ログイン・スキーマを介して付与されている権限およびロールに加え、さらに権限およびロールを付与します。
7.2.2.5 IAMユーザー・マッピング定義の変更または移行
ALTER USER
文を使用して、IAMユーザーからデータベース・グローバル・ユーザーへのマッピングを更新できます。
CREATE USER
文の句IDENTIFIED BY
password、IDENTIFIED EXTERNALLY
またはIDENTIFIED GLOBALLY
のいずれかを使用してアカウントが作成されているデータベース・スキーマです。これは、既存のスキーマを、IAMの使用に移行する場合に役立ちます。IAMユーザーまたはIAMグループを削除して、以前のIAMユーザーまたはグループとまったく同じ名前を使用して再作成すると、そのIAMユーザーまたはIAMグループ名を使用するデータベースからの既存のマッピングは引き続き機能します。
7.2.2.6 インスタンス・プリンシパルおよびリソース・プリンシパルのマッピング
アプリケーションは、インスタンス・プリンシパルおよびリソース・プリンシパルを使用して、データベース・トークンを取得し、Oracle DBaaSインスタンスへの接続を確立できます。
インスタンス・プリンシパルおよびリソース・プリンシパルをグローバル・スキーマ(データベース・ユーザー)に排他的にマップすることも、動的グループを使用して共有スキーマにマップすることもできます。
インスタンス・プリンシパルおよびリソース・プリンシパルOCID
のみを使用して、それらを排他的に、または共有スキーマにマップできます。インスタンス・プリンシパルおよびリソース・プリンシパルの動的グループもグローバル・ロールにマップできます。
次に例を示します。
- インスタンス・プリンシパル(
ip_user
)およびリソース・プリンシパル(rp_user
)を使用した排他的スキーマ・マッピング:CREATE USER ip_user IDENTIFIED GLOBALLY AS 'IAM_PRINCIPAL_OCID=ocid1.instance.region1.sea.abcdef123456'; CREATE USER rp_user IDENTIFIED GLOBALLY AS 'IAM_PRINCIPAL_OCID=ocid1.dbsystem.oc1.sea.abcdef123456';
- 動的グループを使用した共有スキーマ・マッピング:
CREATE USER iam_dg IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=DB_Principals';
- グローバル・ロールへのマッピング;
CREATE ROLE app_role IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=application_principals';
7.2.3 IAMプロキシ認証の構成
プロキシ認証により、IAMユーザーはアプリケーションのメンテナンスなどのタスクのためにデータベース・スキーマにプロキシできます。
- IAMプロキシ認証の構成について
IAMユーザーは、プロキシ認証を使用してOracle DBaaSに接続できます。 - IAMユーザーのプロキシ認証の構成
IAMユーザーのプロキシ認証を構成するには、IAMユーザーがグローバル・スキーマへのマッピング(排他的マッピングまたは共有マッピング)をすでに持っている必要があります。IAMユーザーがプロキシする別のデータベース・スキーマも使用可能である必要があります。 - IAMユーザー・プロキシ認証の検証
パスワードとトークン両方の認証方法について、IAMユーザー・プロキシ構成を検証できます。
親トピック: IAM用のOracle DBaaSの構成
7.2.3.1 IAMプロキシ認証の構成について
IAMユーザーは、プロキシ認証を使用してOracle DBaaSに接続できます。
プロキシ認証は、通常、実際のユーザーを認証し、アプリケーションを管理するためにスキーマ権限およびロールを含むデータベース・スキーマの使用をユーザーに認可するために使用されます。アプリケーション・スキーマ・パスワードの共有などの代替方法は、安全でないものとみなされ、どの実際のユーザーがアクションを実行したかを監査できません。
たとえば、アプリケーション・データベース管理者である名前付きIAMユーザーが資格証明を使用して認証し、データベース・スキーマ・ユーザー(hrapp
など)にプロキシできる環境でのユースケースが考えられます。この認証により、IAM管理者は、アプリケーションのメンテナンスを実行するためにhrapp
権限およびロールをユーザーhrapp
として使用できますが、認証にはIAM資格証明を使用します。アプリケーション・データベース管理者は、データベースにサインインし、アプリケーション・スキーマにプロキシしてこのスキーマを管理できます。
パスワード認証とトークン認証両方の方法について、プロキシ認証を構成できます。
親トピック: IAMプロキシ認証の構成
7.2.3.2 IAMユーザーのプロキシ認証の構成
IAMユーザーのプロキシ認証を構成するには、IAMユーザーがグローバル・スキーマへのマッピング(排他的マッピングまたは共有マッピング)をすでに持っている必要があります。IAMユーザーがプロキシする別のデータベース・スキーマも使用可能である必要があります。
CONNECT peterfitch[hrapp]@connect_string
Enter password: password
トークンを使用して接続するには、次のようにします。
CONNECT [hrapp]/@connect_string
親トピック: IAMプロキシ認証の構成
7.3 Oracle DBaaS用のIAMの構成
Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し、ユーザーにIAMのデータベース・パスワードを作成させる必要があります。
- トークンで認証されるユーザーを認可するためのIAMポリシーの作成
Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し(IAMトークンを使用している場合)、IAMグループを作成してグループ・メンバーシップを管理する必要があります。 - IAMデータベース・パスワードの作成
Oracle DBaaSパスワード検証プロセスには、Oracle Cloud Infrastructure (OCI)コンソール・パスワードとは異なる、IAMユーザーが設定したIAMデータベース・パスワードが必要です。
7.3.1 トークンを使用して認証を行うユーザーを認可するためのIAMポリシーの作成
Oracle DBaaSインスタンスと連携するようにIAMを構成するには、IAM管理者がIAMポリシーを作成し(IAMトークンを使用している場合)、IAMグループを作成してグループ・メンバーシップを管理する必要があります。
database-connections
リソース・タイプは、autonomous-database-family
リソース・タイプに含まれています。ユースケースに応じて、どちらのリソースも使用できます。- データベースへのアクセスを有効にする最小動詞は
use
です。manage
動詞を使用して、データベースへのアクセスを有効にすることもできます。 - 動的グループ名は、このポリシーで使用される場合、大/小文字が区別されます。このポリシーで使用する場合は、動的グループ名に正確な大/小文字を使用する必要があります。
ポリシー文の構文の詳細は、Oracle Cloud Infrastructureドキュメンテーションを参照してください。
親トピック: Oracle DBaaS用のIAMの構成
7.3.2 IAMデータベース・パスワードの作成
Oracle DBaaSパスワード検証プロセスには、Oracle Cloud Infrastructure (OCI)コンソール・パスワードとは異なる、IAMユーザーが設定したIAMデータベース・パスワードが必要です。
親トピック: Oracle DBaaS用のIAMの構成
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ユーザーの認証が制御されます。
- IAMを使用したAutonomous Databaseインスタンスへの接続について
IAMユーザーは、IAMデータベース・パスワード・ベリファイアまたはIAMトークンのいずれかを使用して、Autonomous Databaseインスタンスに接続できます。 - IAM接続でサポートされるクライアント・ドライバ
Oracle DBaaSは、IAM接続用の複数のタイプのクライアント・ドライバをサポートしています。 - ネット・ネーミングおよびシークレットのための集中管理されたOracle Cloud Infrastructureサービスの使用
Oracle Cloud Infrastructure (OCI)オブジェクト・ストアおよびボールトを使用して、ネット名とシークレットを一元的に格納できます。 - IAMデータベース・パスワード・ベリファイアを使用するクライアント接続
IAMユーザーに必要な認可を構成すると、このユーザーは、追加の構成なしで、SQL*PlusやSQLclなどの既存のクライアント・アプリケーションを使用してログインできます。 - IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続
IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続を作成できます。 - クライアント・アプリケーションまたはツールでリクエストされたトークンを使用するクライアント接続
Oracle DBaaSへのIAMトークン・アクセスの場合、クライアント・アプリケーションまたはツールによって、IAMユーザーのために、IAMからデータベース・トークンがリクエストされます。 - クライアント・ウォレットを使用しないTLS接続
クライアント・ウォレットを使用しないTransport Layer Security (TLS)接続の使用は、IAM接続でサポートされています。 - 一般的なデータベース・クライアント構成
IAMユーザーは、ラップトップでSQLclなどのクライアント・ツールを使用して、Oracle DBaaSインスタンスに接続できます。
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 ネット・ネーミングおよびシークレットのための集中管理されたOracle Cloud Infrastructureサービスの使用
Oracle Cloud Infrastructure (OCI)オブジェクト・ストアおよびボールトを使用して、ネット名とシークレットを一元的に格納できます。
この機能は現在、JDBCシン・ドライバおよび.NETシン・ドライバでサポートされています。
次のガイドを参照してください:
親トピック: データベース・クライアント接続の構成
7.5.4 IAMデータベース・パスワード・ベリファイアを使用するクライアント接続
IAMユーザーに必要な認可を構成すると、このユーザーは、追加の構成なしで、SQL*PlusやSQLclなどの既存のクライアント・アプリケーションを使用してログインできます。
12C
のパスワード・ベリファイアを使用できる必要があります。11G
のベリファイア暗号化の使用は、IAMではサポートされていません。IAMユーザーがOCI DBaaSインスタンスに接続するために、特別なクライアントやツールの構成は必要ありません。
親トピック: データベース・クライアント接続の構成
7.5.5 IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続
IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続を作成できます。
- IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続について
IAMユーザーは、IAMユーザー名およびIAMデータベース・パスワードを使用して取得されたIAMトークンを使用して、Oracle DBaaSインスタンスに接続できます。 - IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続に設定するパラメータ
これらのパラメータを設定するには、sqlnet.ora
ファイルまたはtnsnames.ora
ファイルを変更します。 - IAMユーザー名およびデータベース・パスワードを使用してトークンを取得するためのデータベース・クライアントの構成
指定したIAMユーザー名およびIAMデータベース・パスワードを使用してIAMデータベース・トークンを取得するようにデータベース・クライアントを構成できます。 - IAMトークンを取得するための安全性の高い外部パスワード・ストア・ウォレットの構成
IAMユーザー名および安全性の高い外部パスワード・ストア(SEPS)でIAMデータベース・トークンをリクエストするようにできます。
親トピック: データベース・クライアント接続の構成
7.5.5.1 IAMユーザー名およびデータベース・パスワードでリクエストされたトークンを使用するクライアント接続について
IAMユーザーは、IAMユーザー名およびIAMデータベース・パスワードを使用して取得されたIAMトークンを使用して、Oracle DBaaSインスタンスに接続できます。
どちらの場合も、トークンは、SQL*PlusまたはSEPSを使用して、データベース・パスワードで取得されます。
以前のリリースでは、IAMのユーザー名とパスワードのみを使用して、IAMからパスワード・ベリファイアを取得できました。パスワード・ベリファイアは機密とみなされるため、これらの資格証明によるトークンの取得は、パスワード・ベリファイアの取得よりも安全です。トークンを使用することは、ベリファイアを渡したり使用する必要がないことを意味します。アプリケーションは、データベース・クライアントAPIを介してIAMのユーザー名およびパスワードで取得されたトークンを渡すことはできません。このタイプのトークンを取得できるのは、データベース・クライアントのみです。データベース・クライアントは、IAMユーザー名およびIAMデータベース・パスワードを使用してのみデータベース・トークンを取得できます。
IAMユーザー名およびIAMデータベース・パスワードをツールに直接入力するか、SEPSウォレットを使用してこれらの資格証明を安全に格納できます。
7.5.5.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
例:
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.5.3 IAMユーザー名およびデータベース・パスワードを使用してトークンを取得するためのデータベース・クライアントの構成
指定したIAMユーザー名およびIAMデータベース・パスワードを使用してIAMデータベース・トークンを取得するようにデータベース・クライアントを構成できます。
7.5.6 クライアント・アプリケーションまたはツールによってリクエストされたトークンを使用するクライアント接続
Oracle DBaaSへのIAMトークン・アクセスの場合、クライアント・アプリケーションまたはツールによって、IAMユーザーのために、IAMからデータベース・トークンがリクエストされます。
クライアント・アプリケーションは、データベース・クライアントAPIを介してデータベース・トークンを直接データベース・クライアントに渡します。
IAMトークンをリクエストするようにアプリケーションまたはツールが更新されていない場合、IAMユーザーはOracle Cloud Infrastructure (OCI)コマンドライン・インタフェース(CLI)を使用して、データベース・トークンをリクエストおよび格納できます。次の資格証明を使用して、データベース・アクセス・トークン(db-token
)をリクエストできます。
- セキュリティ・トークン(IAM認証あり)、委任トークン(OCIクラウド・シェル内)および
API-keys
。これらは、認証を有効にするためにIAMユーザーを表す資格証明です - インスタンス・プリンシパル・トークン。これは、認証後にインスタンスが、サービス・リソースに対してアクションを実行するための認可されたアクター(またはプリンシパル)となることができるようにします
- リソース・プリンシパル・トークン。これは、アプリケーションが他のOracle Cloud Infrastructureサービスに対してそれ自体を認証できるようにする資格証明です
IAMユーザーがスラッシュ/
ログインを使用してクライアントにログインし、OCI_IAM
パラメータが構成されている場合(sqlnet.ora
、tnsnames.ora
または接続文字列の一部として)、データベース・クライアントはファイルからデータベース・トークンを取得します。IAMユーザーがユーザー名とパスワードを送信すると、接続で、IAMデータベース・パスワード・ベリファイアを使用するクライアント接続について記述されているIAMデータベース・ベリファイア・アクセスが使用されます。このガイドの手順では、データベース・トークンのヘルパーとしてOCI CLIを使用する方法を示します。アプリケーションまたはツールがIAMと連携するように更新されている場合は、アプリケーションまたはツールの手順に従います。一般的なユースケースには、SQLPlusオンプレミス、SQLclオンプレミス、Cloud ShellのSQL*Plus、SEPウォレットを使用するアプリケーションなどがあります。
親トピック: データベース・クライアント接続の構成
7.5.7 クライアント・ウォレットを使用しないTLS接続
クライアント・ウォレットを使用しないTransport Layer Security (TLS)接続の使用は、IAM接続でサポートされています。
このタイプの接続を構成する前に、Oracle DBaaS環境が要件を満たしていることを確認してください。
7.5.8 一般的なデータベース・クライアント構成
IAMユーザーは、ラップトップでSQLclなどのクライアント・ツールを使用して、Oracle DBaaSインスタンスに接続できます。
- IAMデータベース・パスワードを使用するSQL*Plusのクライアント接続の構成
IAMデータベース・パスワードを使用するようにSQL*Plusを構成できます。 - IAMトークンを使用するSQL*Plusのクライアント接続の構成
IAMトークンを使用するSQL*Plusのクライアント接続を構成できます。
親トピック: データベース・クライアント接続の構成
7.5.8.1 IAMデータベース・パスワードを使用するSQL*Plusのクライアント接続の構成
IAMデータベース・パスワードを使用するようにSQL*Plusを構成できます。
親トピック: 一般的なデータベース・クライアント構成
7.5.8.2 IAMトークンを使用するSQL*Plusのクライアント接続の構成
IAMトークンを使用するSQL*Plusのクライアント接続を構成できます。
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_AUTH
はsqlnet.ora
ファイルまたは接続文字列のいずれかによってすでに設定されているため、データベース・クライアントはdb-token
を取得するようにすでに構成されています。データベース・クライアントは、db-token
を取得し、秘密キーを使用して署名してからトークンをAutonomous Databaseに送信します。スラッシュ/
のかわりにIAMユーザー名とIAMデータベース・パスワードが指定されている場合、データベース・クライアントは、db-token
ではなくパスワードを使用して接続します。
親トピック: 一般的なデータベース・クライアント構成
7.6 IAM統合を使用したデータベース・クロステナンシへのアクセス
あるテナンシのユーザーおよびグループは、両方のテナンシのポリシーで許可されている場合、別のテナンシのDBaaSデータベース・インスタンスにアクセスできます。
- DBaaSインスタンスへのIAMユーザーのクロステナンシ・アクセスについて
Oracle Cloud Infrastructure (OCI) DBaaSインスタンスへのクロステナンシ・アクセスは、単一のテナンシのシナリオに似ていますが、マッピングおよびトークン・リクエストにテナンシ情報が必要であり、このクロステナンシ・データベース・リソース・アクセスを許可するために両方のテナンシでポリシーが必要である点を除きます。 - ポリシーの構成
クロステナンシ・データベース・アクセスを許可するには、ユーザー・テナンシとデータベース・リソース・テナンシの両方にポリシーを作成する必要があります。 - 別のテナンシのユーザーおよびグループへのデータベース・スキーマおよびロールのマッピング
このタイプのマッピングを実行する場合は、テナンシOCIDをマッピング情報に追加して、データベースがクロステナンシ・アクセスであることを認識できるようにする必要があります。 - クロステナンシ・アクセス用のデータベース・クライアントの構成
一部のデータベース・クライアントを直接構成できます。 - OCIコマンドライン・インタフェースを使用したクロステナンシ・トークンのリクエスト
クロステナンシ・リクエストのdb-token
を取得するには、Oracle Cloud Infrastructure (OCI)コマンドライン・インタフェース・コマンドに--scope
パラメータを追加する必要があります。
7.6.1 DBaaSインスタンスへのIAMユーザーのクロステナンシ・アクセスについて
Oracle Cloud Infrastructure (OCI) DBaaSインスタンスへのクロステナンシ・アクセスは、単一のテナンシのシナリオに似ていますが、マッピングおよびトークン・リクエストにテナンシ情報が必要であり、このクロステナンシ・データベース・リソース・アクセスを許可するために両方のテナンシでポリシーが必要である点を除きます。
次の図は、OCI DBaaSインスタンスへのクロステナンシ・アクセスのプロセスを示しています。
クロステナンシ・プロセスは次のとおりです:
- ポリシーは、両方のテナンシでクロステナンシへのアクセスを承認および許可するために必要です。
- IAMプリンシパル(ユーザーまたはアプリケーション)は、クロステナンシ・リソースのdb-tokenをリクエストします。
db-token
が返され、別のテナンシのデータベースへのアクセスに使用されます- データベースは、ユーザーのグループに対するクロステナンシ・グループ問合せを行い、プリンシパルをグローバル・スキーマおよびオプションのグローバル・ロールにマップします。
データベースが存在するリージョンと同じリージョンにユーザー・テナンシをサブスクライブする必要があります。たとえば、データベース・テナンシのデータベースがPHX
およびIAD
リージョンにある場合、ユーザー・テナンシをこれらのリージョンにサブスクライブする必要があります。これはホーム・リージョンではなく、ユーザー・テナンシの追加のサブスクライブ済リージョンです。
7.6.2 ポリシーの構成
クロステナンシ・データベース・アクセスを許可するには、ユーザー・テナンシとデータベース・リソース・テナンシの両方にポリシーを作成する必要があります。
- ソース・ユーザー・テナンシの構成
ユーザー・テナンシでクロステナンシ・アクセスを許可するには、2つのポリシーが必要です。 - ターゲット・データベース・リソース・テナンシの構成
データベース・テナンシには、ユーザー・テナンシからのユーザーへのアクセスを有効にする照合ポリシーと、ユーザー・テナンシ内のグループ情報を問い合せる独自のデータベースを許可する照合ポリシーが必要です - クロステナンシ・アクセスのポリシーの例
たとえば、WHERE
句を使用してクロステナンシ構成を調整することや、このタイプの構成を実行するその他の方法があります。
7.6.2.1 ソース・ユーザー・テナンシの構成
ユーザー・テナンシでクロステナンシ・アクセスを許可するには、2つのポリシーが必要です。
親トピック: ポリシーの構成
7.6.2.2 ターゲット・データベース・リソース・テナンシの構成
データベース・テナンシには、ユーザー・テナンシからのユーザーへのアクセスを有効にする照合ポリシーと、ユーザー・テナンシ内のグループ情報を問い合せる独自のデータベースを許可する照合ポリシーが必要です
any-user
を使用すると、必要なポリシーを簡単に認識しやすくなりますが、Oracleでは、any-user
に加えて、またはこれを使用するかわりに、より強力な制約を使用することをお薦めします。any-user
オプションを使用すると、すべてのプリンシパルまたはリソースがuser_tenancy
内のユーザー・グループを問い合せることができます。理想的には、これを制限して、データベース・リソース(リソース・プリンシパル)がグループ問合せを実行できるようにする必要があります。これを実行するには、ポリシーにWHERE
句を追加するか、動的グループのメンバーに制限するための動的グループを追加します。動的グループおよびポリシーを指定する可能なすべての方法の定義は、このトピックの範囲外です。詳細は、次のソースを参照してください:
親トピック: ポリシーの構成
7.6.2.3 クロステナンシ・アクセスのポリシーの例
たとえば、WHERE
句を使用してクロステナンシ構成を調整することや、このタイプの構成を実行するその他の方法があります。
WHERE
句を追加して、クロステナンシ・グループ問合せの実行を許可するデータベース・リソースを制限できます:
ADMIT any-user of tenancy db_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy where request.principal.type = 'dbsystem'
この許可ポリシーにより、db_tenancy
内の任意のベース・データベース・サービス(リソース・タイプ: dbsystem
)は、ユーザー・テナンシからユーザーのグループ情報を問い合せることができます。リソース・タイプ名は次の表にあります。
同じリソース・タイプを動的グループに配置すると、同様の方法を実行できます:
dynamic group: db_principals
any {resource.type = 'dbsystem', resource.type = 'vmcluster', resource.type = 'cloudvmcluster'}
前述の例の動的グループには、Oracle Base Database Service (dbsystem
)、Oracle Exadata Cloud@Customer (vmcluster
)およびOracle Exadata Database Service (cloudvmcluster
)のデータベース・インスタンスが含まれます。
この例では、any-user
のかわりに動的グループを使用します:
ADMIT dynamic group db_principals of tenancy db_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy
resource.compartment.id
を使用して、コンパートメント内のすべてのリソース・プリンシパルを追加することもできます。ただし、これによって、他の非データベース・リソース・プリンシパルがクロステナンシ・グループ問合せを実行できる場合もあります。次の表に、様々なリソース・タイプとDBaaSプラットフォーム名のマッピングを示します:
DBaaSプラットフォーム名 | リソース・タイプ名 |
---|---|
ADB-S |
|
ADB-D (OPC) |
|
Base DBS |
|
ExaCS |
|
ExaCC |
|
* 古いADBDインスタンスは、引き続きautonomousexainfrastructure
リソース・タイプを使用している可能性があります。
親トピック: ポリシーの構成
7.6.3 別のテナンシのユーザーおよびグループへのデータベース・スキーマおよびロールのマッピング
このタイプのマッピングを実行する場合は、テナンシOCIDをマッピング情報に追加して、データベースがクロステナンシ・アクセスであることを認識できるようにする必要があります。
CREATE USER
文およびCREATE ROLE
文を使用するときは、コロンを使用してテナンシOCIDを区切ります。
7.6.4 クロステナンシ・アクセス用のデータベース・クライアントの構成
一部のデータベース・クライアントを直接構成できます。
データベース・テナンシは、OCI IAMからアクセス・トークンを直接取得するようにクライアントが構成されている場合、接続文字列またはsqlnet.ora
のいずれかで識別する必要があります。特定のパラメータ値(JDBC-thin、ODP.NET-core、Managed)について、クライアント固有のドキュメントを確認します。
7.6.5 OCIコマンドライン・インタフェースを使用したクロステナンシ・トークンのリクエスト
クロステナンシ・リクエストのdb-token
を取得するには、Oracle Cloud Infrastructure (OCI)コマンドライン・インタフェース・コマンドに--scope
パラメータを追加する必要があります。
oci get
コマンドのオプション・パラメータの使用方法の詳細は、オプションのパラメータを参照してください。
テナンシ全体に対してスコープを指定することも、テナンシのコンパートメントまたはデータベースにスコープを指定することもできます。クロステナンシ・コンパートメントまたはデータベースにスコープを指定する場合、コンパートメントおよびデータベースOCIDはOCI全体で一意であるため、テナンシ情報を追加する必要はありません。
特定のクライアントは、MSEIから直接トークンをリクエストできます。MSEI OAuth2
アクセス・トークンを取得するためのパラメータの設定に関するドキュメントを参照してください。
7.7 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.8 IAM接続のトラブルシューティング
「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました」
エラーは、Identity and Access Management (IAM)とOracle DBaaSの統合全体の様々な問題が原因である可能性があります。
- ORA-01017エラーについてクライアント側で確認する領域
クライアント側のORA-01017
エラーは、IAM資格証明の問題、クライアント構成またはIAMプロファイルの問題が原因で発生する可能性があります。 - データベース・クライアントのトレース・ファイル
クライアント側でIAM接続をトラブルシューティングするために、2つのレベルのトレース・ファイルを生成できます。 - Oracle Cloud Infrastructure IAMおよびOracle DatabaseでのORA-01017エラーのチェック
Oracle DatabaseインスタンスのORA-01017
エラーは、IAMと連携するようにデータベースを設定した方法が原因で発生する可能性があります。 - 不適切に構成されたIAMユーザーが原因のORA-01017エラー
不適切に構成されたIAMユーザーから、いくつかのORA-01017
エラーが発生する可能性があります。 - トークンを使用してデータベースにアクセスしようとしたときに発生するORA-12599およびORA-03114エラー
ORA-12599: 「TNS: 暗号チェックサムの不一致が発生しました」
エラーおよびORA-03114: 「Oracleに接続されていません。」
エラーは、接続しようとしているデータベースがネイティブ・ネットワーク暗号化によって保護されていることを示しています。 - IAM管理者がORA-01017エラーに対処するために実行できるアクション
ORA-01017
エラーに対処するいくつかのアクションは、IAM管理者のみが実行できます。
7.8.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.ora
のTOKEN_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.ora
、sqlnet.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ユーザー・アカウントに存在することを確認します。OCI CLIでは、デフォルトで、クライアントで
- APIキーを使用していない場合は、セキュリティ・トークンを使用していることを明示的に指定します。次のコマンドを使用します。
oci iam db-token get --auth security_token
セキュリティ・トークンが存在しないか期限切れの場合、このコマンドは、IAM (またはフェデレーテッドIdP)へのサインインのためにブラウザを開こうとします。環境にブラウザがない場合、このコマンドは失敗します。
IAMデータベース・パスワードとIAMトークンの両方のトラブルシューティング
- Oracle Instant Clientのクライアント・トレースのみを確認します。SQL*PlusとInstant Clientを併用すると、クライアント・トレースで、いくつかの情報が示されます。Oracle Databaseクライアント・トレース・ファイルは、2つの異なるトレース・レベルを使用して生成できます。
関連トピック
親トピック: IAM接続のトラブルシューティング
7.8.2 データベース・クライアントのトレース・ファイル
クライアント側でIAM接続をトラブルシューティングするために、2つのレベルのトレース・ファイルを生成できます。
生成できるトレース・ファイルの2つのレベルは次のとおりです。
-
低レベル・トレースでは、エラーの発生時にトレースが出力されます。
-
TCPSがIAM接続用に設定されていない場合は、プロトコルがTCPSである必要があるというメッセージが出力されます。
-
SSL_SERVER_DN_MATCH
がTRUE
に設定されていない場合は、値が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.ora
のADR_BASE
パラメータを使用して、トレース・メッセージが格納されるディレクトリを指定できます。ディレクトリ・パスが有効で、書込み権限があることを確認します。diag_adr_enabled
パラメータがfalse
に設定されていないことを確認します。
ADR_BASE
の設定例を次に示します。
ADR_BASE=/oracle/iam/trace
親トピック: IAM接続のトラブルシューティング
7.8.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.8.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.8.5 トークンを使用してデータベースにアクセスしようとしたときにORA-12599およびORA-03114エラーが発生する
ORA-12599: 「TNS: 暗号チェックサムの不一致が発生しました」
エラーおよびORA-03114: 「Oracleに接続されていません。」
エラーは、接続しようとしているデータベースがネイティブ・ネットワーク暗号化によって保護されていることを示します。
トークンを使用してOracleデータベースにアクセスする場合は、ネットワーク・ネイティブ暗号化ではなくTransport Layer Security (TLS)接続を確立する必要があります。これらのエラーを修正するには、TLSがデータベースに対して適切に構成されていることを確認してください。ローカル・データベースのユーザー名とパスワードを使用して構成をテストし、次のSYSCONTEXT USERENV
パラメータを確認する必要があります。
-
NETWORK_PROTOCOL
-
TLS_VERSION
親トピック: IAM接続のトラブルシューティング
7.8.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';
親トピック: IAM接続のトラブルシューティング