6.7 データベースへの接続

Oracleデータベースに接続するには、いくつかの方法があります。

表6-1 データベース接続方法と構文

接続のタイプ 接続構文 説明

コマンドラインから

コマンドラインからアプリケーションをデータベース・サーバーに接続させるための一般的な書式を次に示します。

tool username@connect_identifier

暗号化されたパスワードの入力を求めるメッセージが表示されます。

たとえば:

SQLPLUS system@sales
Enter password: password

ほとんどのOracleのツール製品は、オペレーティング・システムのコマンドラインを使用して接続できますが、他の方法でも接続できます。

ログイン画面から

username@connect_identifier

一部のツールには、ログインの代替形式としてログイン画面が用意されています。ユーザーがデータベース・サーバーにログインするには、ツールのログイン画面のユーザー名フィールドにユーザー名と接続識別子の両方を指定し、パスワード・フィールドにパスワードを入力します。

3GLアプリケーションから

exec sql connect :username identified by :password 

前述の接続要求で、:usernameおよび:passwordは3GLの変数です。これらの変数は、静的にまたはユーザーからの入力によってプログラム内で設定できます。データベース・サーバーに接続する場合、:username変数の値の書式は次のとおりです。

username@net_service_name 

:password変数には、接続先データベース・アカウントのパスワードが入ります。

OCIやプリコンパイラなど、3GLで作成されたアプリケーションは、クライアントからの直接データベース・アクセス用に中間層およびデータベース・アプリケーション開発者によって使用されます。

SQL*Plus内から

SQLPLUS /nolog
SQL> CONNECT username@net_service_name

たとえば:

SQLPLUS /nolog
SQL> CONNECT scott@serverx
Enter password: password

前述のコマンドで、usernamepasswordは、データベース・ユーザーとパスワードで、net_service_nameはネットワーク・サービス名です。

一部のOracleツールには、ツールを終了せずに、異なるユーザー名を指定してデータベースに接続できるコマンドがあります。

他のOracleのツール製品では、この説明とは異なる独自の機能やインタフェースに固有の方法が使用されます。たとえば、Oracle CDE Toolsでは、ログイン・ボタンと、ユーザー名、パスワードおよびリモート・データベースIDのフィールドが使用されます。

KERBEROS5_CC_NAMEパラメータの使用

(DESCRIPTION=
      (ADDRESS=(PROTOCOL=tcp)(HOST=sales-svr)(PORT=1521))
      (CONNECT_DATA=(SERVICE_NAME=sales.example.com)) 
      (SECURITY=(SQLNET.KERBEROS5_CC_NAME=/usr/tmp/krbcache))
)

このパラメータは、複数のKerberosプリンシパルがデータベース・クライアント経由でログインする必要がある場合に、Kerberosプリンシパル(user)のKerberos資格証明キャッシュ・ファイルへの完全パスを指定するために使用します。

Kerberos認証を使用してデータベースに接続する場合は、KERBEROS5_CC_NAMEを使用して資格証明キャッシュへの完全パスを指定する必要があります。単一のKerberosプリンシパルの場合は、sqlnet.oraファイルに資格証明キャッシュ・パスを指定できます。クライアントが複数のデータベース接続を行うために複数のKerberosプリンシパルを使用する必要がある場合は、個々の接続のCONNECT文字列またはtnsnames.oraファイルでKERBEROS5_CC_NAMEパラメータを指定します。

KERBEROS5_CC_NAMEにより、複数のプリンシパルがサポートされ、Key Distribution Center (KDC)によって戻される資格証明が暗号化形式で格納されるようになりました。

Oracle Databaseセキュリティ・ガイドを参照してください。

KERBEROS5_PRINCIPALパラメータの使用

(DESCRIPTION=
      (ADDRESS=(PROTOCOL=tcp)(HOST=sales-svr)(PORT=1521))
      (CONNECT_DATA=(SERVICE_NAME=sales.example.com)) 
      (SECURITY=
          (KERBEROS5_CC_NAME=/tmp/krbuser1/krb.cc)
          (KERBEROS5_PRINCIPAL=krbprinc1@example.com))
)

このパラメータは、データベース・クライアントのKerberosプリンシパルを指定するために使用されます。

これはオプションのパラメータです。ただし、このパラメータを使用する場合は、KERBEROS5_PRINCIPALが、(KERBEROS5_CC_NAMEを使用して指定される)Kerberos資格証明キャッシュから取得されるプリンシパルと一致することを確認してください。プリンシパル名が一致しないと、認証は失敗します。

IAMデータベース・パスワード検証認証の使用

SQLPLUS /nolog
SQL> CONNECT username@net_service_name
Enter password: password

この接続リクエストでは、usernameはIAMユーザー名、net_service_nameはネットワーク・サービス名、passwordはIAMデータベース・パスワードです。

IAMユーザーは、パスワードベースのプロキシ認証を使用して、データベース・プロキシ・ユーザー・アカウントを介して接続できます。

SQLPLUS [user1]/password123\!@cdb1_pdb2
SQL> SHOW USER;
select sys_context('USERENV','AUTHENTICATION_METHOD') from dual;
select sys_context('USERENV','PROXY_USER') from dual;
select sys_context('USERENV','CURRENT_USER') from dual;

ユーザー認証および認可用にOracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)を構成した場合、IAMユーザーがIAMユーザー名およびIAMデータベース・パスワードを使用してOCI Database as a Service (DBaaS)に接続できます。この接続方法では、IAMデータベース・パスワード検証(パスワードの暗号化されたハッシュ)がユーザーを認証するためにIAMから取得されます。

このIAMデータベース・パスワードは、OCIコンソール・パスワードとは異なります。IAMユーザーが、OCIコンソールからこのパスワードを設定できます(OCI IAMパスワードの作成のビデオを参照)。

必要な認可が付与された後、SQL*Plusなどのオンプレミス・クライアント・アプリケーションを使用して、サポートされている任意のデータベース・クライアントからログインできます。

IAMデータベース検証でのIAMユーザー名およびIAMデータベース・パスワードの使用はデフォルトの構成であり、クライアントに追加のパラメータを設定する必要はありません。ただし、クライアント側のsqlnet.oraファイルでPASSWORD_AUTHOCI_TOKENに設定されている場合、データベース・クライアントはOCI IAMに接続し、IAMユーザー名およびIAMデータベース・パスワードを使用してデータベース・トークンを取得しようとします。この場合、PASSWORD_AUTH=PASSWORD_VERIFIERを設定することで、特定の接続に対してこの設定をオーバーライドできます。

プロキシ認証を使用するようにクライアント接続(通常は中間層環境)を構成できます。この場合、パスワードベースのプロキシ認証を使用することで、プロキシ・データベースのユーザー・アカウントを介して接続するために必要な権限を持つ既存のIAMユーザーを変更できます。プロキシ・ユーザー・セッションに、IAMユーザーに付与されたすべての権限があります。

Oracle Databaseセキュリティ・ガイドを参照してください。

IAMトークンベースの認証(ベアラー・トークン)の使用

SQLPLUS /nolog
SQL> CONNECT /@connect_identifier

PASSWORD_AUTH設定により、ベアラー・トークンを使用してIAMトークンベースの認証が強制されます:

(DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcps)(HOST=salesserver1)(PORT=1522))
    (SECURITY=
        (SSL_SERVER_DN_MATCH=TRUE)
        (SSL_SERVER_CERT_DN="C=US,O=example,CN=OracleContext")
        (PASSWORD_AUTH=OCI_TOKEN)
        (OCI_IAM_URL=https://auth.us-region-1.example.com/v1/actions/generateScopedAccessBearerToken)
        (OCI_TENANCY=ocid1.tenancy..12345))
    (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com))
)

オプションのOCI_COMPARTMENTおよびOCI_DATABASEパラメータを使用して、トークン・リクエストの範囲を制限できます。

(DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcps)(HOST=salesserver1)(PORT=1522))
     (SECURITY=
        (SSL_SERVER_DN_MATCH=TRUE)
        (SSL_SERVER_CERT_DN="C=US,O=example,CN=OracleContext")
        (PASSWORD_AUTH=OCI_TOKEN)
        (OCI_IAM_URL=https://auth.us-region-1.example.com/v1/actions/generateScopedAccessBearerToken)
        (OCI_TENANCY=ocid1.tenancy..12345)
        (OCI_COMPARTMENT=ocid1.compartment..12345)
        (OCI_DATABASE=ocid1.autonomousdatabase.oc1.12345))
     (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com))  
  )

ユーザー認証および認可用にIAMを構成した場合、IAMユーザーがIAMデータベース・トークン(db-token)を使用してOracle DBaaSに接続できます。このタイプのトークンはベアラー・トークンであり、秘密キーは付属していません。

IAMユーザー名およびIAMデータベース・パスワードを使用して、db-tokenをリクエストするようにデータベース・クライアントを構成できます。アプリケーションはこのタイプのトークンをクライアントに渡せません。この場合、PASSWORD_AUTHパラメータをOCI_TOKENに設定します。

IAMユーザーが、OCIコンソールからIAMデータベース・パスワードを設定できます(OCI IAMパスワードの作成のビデオを参照)。

データベース・クライアントは、OCI IAMエンドポイントから直接トークンを取得します。データベース・クライアントが追加メタデータとともにIAMエンドポイントを検出できるように、追加パラメータを設定する必要があります。追加のパラメータはOCI_IAM_URLおよびOCI_TENANCYで、スコープを制限するオプションOCI_COMPARTMENTおよびOCI_DATABASEがあります。

IAMユーザーが/@connect_identifierを使用してIAMユーザー名およびIAMデータベース・パスワードでログインすると、PASSWORD_AUTH=OCI_TOKEN設定および/@connect_identifierは、REST APIリクエストを使用してOCI IAMエンドポイントからトークンを直接取得するようにデータベース・クライアントに指示します。

これらのパラメータは、tnsnames.oraファイル、sqlnet.oraファイルで指定するか、接続文字列の一部として直接指定できます。

Oracle Databaseセキュリティ・ガイドを参照してください。

IAMトークンベースの認証(PoPトークン)の使用

SQLPLUS /nolog
SQL> CONNECT /@connect_identifier

TOKEN_AUTH設定により、PoPトークンを使用してIAMトークンベースの認証が強制されます。

(DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcps)(HOST=sales_db)(PORT=1522))
   (SECURITY=
        (SSL_SERVER_DN_MATCH=TRUE)
        (SSL_SERVER_CERT_DN="C=US,O=example,CN=OracleContext")
        (TOKEN_AUTH=OCI_TOKEN))
   (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com))
)

オプションのTOKEN_LOCATIONパラメータを使用して、データベース・トークンおよび秘密キーが格納されているデフォルト・ディレクトリをオーバーライドできます。

(DESCRIPTION= 
    (ADDRESS=(PROTOCOL=tcps)(HOST=sales_db)(PORT=1522)) 
    (SECURITY=
        (SSL_SERVER_DN_MATCH=TRUE)
        (SSL_SERVER_CERT_DN="C=US,O=example,CN=OracleContext")
        (TOKEN_AUTH=OCI_TOKEN)
        (TOKEN_LOCATION="/home/oracle/.oci/db-token")) 
    (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com))
)

IAMユーザーは、トークンベースのプロキシ認証を使用して、データベース・プロキシ・ユーザー・アカウントを介して接続できます。

SQLPLUS [user1]/@pop_token_connstr
SQL> SHOW USER;
select sys_context('USERENV','AUTHENTICATION_METHOD') from dual;
select sys_context('USERENV','PROXY_USER') from dual;
select sys_context('USERENV','CURRENT_USER') from dual;

ユーザー認証および認可用にIAMを構成した場合、IAMユーザーがIAMデータベース・トークン(db-token)を使用してOracle DBaaSに接続できます。このタイプのトークンは、有効期限と有効範囲を持つProof-of-possession (PoP)トークンです。Oracle Cloud Infrastructure (OCI)コマンドライン・インタフェース(CLI)を使用してIAMから、またはOCI Software Development Kit (SDK)からプログラム的にトークンをリクエストできます。

この接続方法では、APIキー、セキュリティ・トークン、リソース・プリンシパル、サービス・プリンシパル、インスタンス・プリンシパルまたは委任トークン(委任トークンはCloud Shellでのみ使用可能)などのIAMユーザー資格証明のいずれかを使用して、IAMからdb-tokenおよび秘密キーを取得できます。

クライアント・アプリケーションは、次のいずれかの方法で接続リクエストを送信できます。
  • IAMユーザーが/@connect_identifierを使用してログインした場合(およびTOKEN_AUTHOCI_TOKENに設定されている場合)、データベース・クライアントは、デフォルト・ディレクトリまたはTOKEN_LOCATIONで指定された場所のいずれかからdb-tokenおよび秘密キーを取得します(IAMトークンベースの認証を使用)。

  • クライアント・アプリケーションがIAMからトークンを取得するように更新されている場合、IAMは、データベース・クライアントAPIを使用して、db-tokenおよび秘密キーを属性としてデータベース・クライアントに直接渡します。この場合、TOKEN_AUTHおよびTOKEN_LOCATIONパラメータを指定する必要はありません。

これらのパラメータは、tnsnames.oraファイル、sqlnet.oraファイルで指定するか、接続文字列の一部として直接指定できます。

プロキシ認証を使用するようにクライアント接続を構成できます。この場合、トークンベースのプロキシ認証を使用することで、プロキシ・データベースのユーザー・アカウントを介して接続するために必要な権限を持つIAMユーザーを変更できます。プロキシ・ユーザー・セッションに、IAMユーザーに付与されたすべての権限があります。

Oracle Databaseセキュリティ・ガイドを参照してください。

Azureトークンベースの認証の使用

SQLPLUS /nolog
SQL> CONNECT /@connect_identifier

TOKEN_AUTH設定により、Azureトークンベースの認証が強制適用されます:また、TOKEN_LOCATIONパラメータを使用して、アクセス・トークンが格納されるディレクトリ・パスを指定する必要があります。

トークン・ファイルの名前がtokenの場合、クライアントは指定されたディレクトリ・パス(たとえば、/home/dbuser1/access-token)内のファイルを自動的に検索します。

(DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcps)(HOST=salesserver1)(PORT=1522))
    (SECURITY=
        (SSL_SERVER_DN_MATCH=TRUE)
        (SSL_SERVER_CERT_DN="C=US,O=example,CN=OracleContext")
        (TOKEN_AUTH=OAUTH)
        (TOKEN_LOCATION="/home/dbuser1/access-token"))
    (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com))
)

トークン・ファイル名がtokenと異なる場合は、ディレクトリ・パスとともにファイル名(mytokenなど)を指定する必要があります。

(DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcps)(HOST=salesserver1)(PORT=1522))
    (SECURITY=
        (SSL_SERVER_DN_MATCH=TRUE)
        (SSL_SERVER_CERT_DN="C=US,O=example,CN=OracleContext")
        (TOKEN_AUTH=OAUTH)
        (TOKEN_LOCATION="/home/dbuser1/access-token/mytoken"))
    (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com))
)

ユーザー認証および認可用にMicrosoft Entra ID (旧称はMicrosoft Azure Active Directory)を構成してある場合、Azureユーザーは、Entra ID OAuth2アクセス・トークンを使用してOracle Databaseに接続できます。このアクセス・トークンは、有効期限と範囲があるベアラー・トークンであり、Entra ID拡張機能を備えたOAuth2.0標準に準拠しています。

TOKEN_AUTH設定(TOKEN_AUTH=OAUTH)は、トークン・ファイルがtokenという名前の場合に、TOKEN_LOCATIONで指定されたディレクトリからアクセス・トークンを取得するようにデータベース・クライアントに指示します。そうでない場合は、TOKEN_LOCATIONパラメータを指定するときに、トークン・ファイル名とディレクトリの場所を使用する必要があります。

TOKEN_LOCATIONパラメータは、Azureトークンベースの認証では必須です。データベース・クライアントはこの場所からアクセス・トークンを取得し、データベース・サーバーに送信します。

TOKEN_AUTHおよびTOKEN_LOCATIONパラメータを、tnsnames.orasqlnet.oraファイルに指定するか、接続文字列の一部として直接指定します。

トークンは、Linux、Microsoft PowerShellまたはその他の環境で実行されるツールおよびスクリプトからリクエストできます。これらのトークンは、Microsoft SDKを使用してプログラム的にリクエストすることもできます。

クライアント・アプリケーションは、次のいずれかの方法で接続リクエストを送信できます。
  • Azureユーザーは、サポートされている認証フロー(リソース所有者のパスワード資格証明、認可コード、On-Behalf-Of (OBO)フローまたはクライアント資格証明)のいずれかを使用してEntra IDからアクセス・トークンをリクエストし、それをローカル・ファイル・ディレクトリに格納できます。

  • Entra IDからトークンを取得するようにクライアント・アプリケーションが更新されている場合は、そのアプリケーションで、Entra IDから直接アクセス・トークンをリクエストし、データベース・クライアントAPIを使用してそれを属性としてデータベース・インスタンスに渡すこともできます。この場合、TOKEN_AUTHおよびTOKEN_LOCATIONパラメータを指定する必要はありません。

Oracle Databaseセキュリティ・ガイドを参照してください。

ノート:

IAMトークンベースの認証を構成した場合は、OCI_INTERACTIVEOCI_API_KEYOCI_INSTANCE_PRINCIPALOCI_DELEGATION_TOKENOCI_RESOURCE_PRINCIPALなどのOCI認証フローを使用して、IAMシングルサインオン(SSO)資格証明でデータベース・クライアントがdb-tokenを直接取得できます。

同様に、Azureトークンベースの認証を構成してある場合は、データベース・クライアントで、AZURE_INTERACTIVEAZURE_SERVICE_PRINCIPALAZURE_MANAGED_IDENTITYAZURE_DEVICE_CODEなどの認証フローを使用してAzure SSO資格証明でアクセス・トークンを直接取得できます。

この機能は、JDBCシン・クライアント、ODP.NET CoreクラスまたはODP.NET管理対象ドライバ・クラスを使用する環境で使用できます。JDBCシン・クライアントに対してこの機能を構成するには、Oracle Database JDBC開発者ガイドを参照し、ODP.NETについては、Oracle Data Provider for .NET開発者ガイドを参照してください。