10 Oracle Database Real Application Security SQL ファンクション

この章では、Oracle Database Real Application Securityで使用可能なSQLファンクションおよびプロシージャについて説明します。

表10-1に、これらのファンクションおよびプロシージャをまとめます。各ファンクションおよびプロシージャの詳細情報は、この表の後にあります。

表10-1 Oracle Database Real Application Security SQLファンクションおよびプロシージャ

SQLファンクションまたはプロシージャ 簡単な説明

COLUMN_AUTH_INDICATORファンクション

指定した表の列が特定の表の行で認可されているかどうかを確認します。

XS_SYS_CONTEXTファンクション

現在のアプリケーション・セッションのセッション属性およびXS$GLOBAL_VARネームスペース属性を取得します。

ORA_CHECK_ACLファンクション

アプリケーション・ユーザーがACLのリストに従って問い合せられたアプリケーション権限を持つかどうかを確認します。

ORA_GET_ACLIDSファンクション

現在のアプリケーション・ユーザーのXDS対応の表のオブジェクト・インスタンスに関連付けられているACL識別子のリストを戻します。

ORA_CHECK_PRIVILEGEファンクション

指定したシステム権限がアプリケーション・ユーザーに付与されているかどうかを確認します

TO_ACLIDファンクション

指定されたACL名のACL IDを戻します

COLUMN_AUTH_INDICATORファンクション

COLUMN_AUTH_INDICATORファンクションは、指定した表の列が特定の表の行で認可されているかどうかを確認します。現在のアプリケーション・ユーザーがデータ・セキュリティ・ポリシーによって現在の行の列値へのアクセスを認可されている場合、または列がデータ・セキュリティ・ポリシーによって保護されていない場合は、1を戻します。アプリケーション・ユーザーが認可されていない場合は0を戻します。

構文

COLUMN_AUTH_INDICATOR(col)
RETURN BOOLEAN;

パラメータ

パラメータ 説明

col

表またはビューの列。

このパラメータは、オブジェクト・タイプの列または式を受け入れません。

SELECT po_number, project_id, region, 
 DECODE(COLUMN_AUTH_INDICATOR(price), 0, 'xxxxxx', 1, price) price  
 FROM purchaseorder  
 WHERE po_number 
 BETWEEN 10000 and 10003;

関連項目:

XS_SYS_CONTEXTファンクション

XS_SYS_CONTEXTファンクションでは、PL/SQL APIを使用した結果として生じるオーバーヘッドを発生させずに、現在のアプリケーション・セッションのセッション属性に迅速にアクセスできます。SYS_XS_CONTEXTファンクション定義は、SYS_CONTEXTファンクションの定義をミラーリングし、SYS_CONTEXTに対応するアプリケーション・セッションとして説明できます。XS_SYS_CONTEXTは、リクエストされたネームスペースと属性を戻します。存在しない場合は、NULLを戻します。

表10-2に、事前定義済のネームスペースXS$SESSIONの属性を示します。

表10-2 事前定義済パラメータ

パラメータ 戻り値

CREATED_BY

現在のアプリケーション・セッションを作成した所有者。

CREATE_TIME

現在のアプリケーション・セッションが作成された時刻。

COOKIE

Cookie値が変更されるかセッションが破棄されるまで、新規に作成されたReal Application Securityアプリケーション・セッションを将来のコールで識別するために使用できる、パラメータとして渡されるセキュアなセッションCookie。

CURRENT_XS_USER

権限が現在アクティブになっているReal Application Securityセッション・アプリケーション・ユーザーの名前。

CURRENT_XS_USER_GUID

権限が現在アクティブになっているReal Application Securityセッション・アプリケーション・ユーザーの識別子。

INACTIVITY_TIMEOUT

現在のアプリケーション・セッションに対して指定された非アクティブ・タイムアウト値(分単位)。

LAST_ACCESS_TIME

セッション・アプリケーション・ユーザーによってセッションが最後にアクセスされた時刻。

LAST_AUTHENTICATION_TIME

セッション・アプリケーション・ユーザーが最後に認証された時刻。

LAST_UPDATED_BY

アプリケーション・セッションが前回更新された時刻。

PROXY_GUID

SESSION_XS_USERにかわって現在のセッションを開いたReal Application Securityセッション・アプリケーション・ユーザーの識別子。

SESSION_ID

アプリケーション・セッションのセッション識別子。

SESSION_XS_USER

ログオン時のReal Application Securityセッション・アプリケーション・ユーザーの名前。

SESSION_XS_USER_GUID

ログオン時のReal Application Securityセッション・アプリケーション・ユーザーの識別子。

USERNAME

セッション・アプリケーション・ユーザー名。

USER_ID

セッション・アプリケーション・ユーザーの識別子。

現在連結されているReal Application Securityセッション・アプリケーション・ユーザーの名前を取得するには、次の形式のXS_SYS_CONTEXTファンクションを使用できます。

XS_SYS_CONTEXT('XS$SESSION', 'SESSION_XS_USER')

データベース・セッションに現在接続されているReal Application Securityセッションがない場合、ファンクションはNULLを戻します。定義者の権限ビューなど、定義者の権限単位の本体からコールされた場合でも、ファンクションは現在連結されているReal Application Securityセッション・アプリケーション・ユーザーを戻します。

現在連結されているReal Application Securityセッション・アプリケーション・ユーザーの識別子(ID)を取得するには、次の形式のXS_SYS_CONTEXTファンクションを使用できます。

XS_SYS_CONTEXT('XS$SESSION', 'SESSION_XS_USER_GUID')

データベース・セッションに現在接続されているReal Application Securityセッションがない場合、ファンクションはNULLを戻します。定義者の権限ビューなど、定義者の権限単位の本体からコールされた場合でも、ファンクションは現在連結されているReal Application Securityセッション・アプリケーション・ユーザーIDを戻します。

構文

XS_SYS_CONTEXT(
 namespace   IN VARCHAR2 
 attribute   IN VARCHAR2)
RETURN VARCHAR2;

パラメータ

パラメータ 説明

namespace

アプリケーション・コンテキストの名前。文字列または式のいずれかで指定できます。

現在のアプリケーション・セッションのネームスペースと属性に関する情報を検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。

attribute

namespaceアプリケーション・コンテキスト内のパラメータ。

SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL; 

ORA_CHECK_ACLファンクション

ORA_CHECK_ACLファンクションは、アプリケーション・ユーザーがACLのリストに従って問い合せられたアプリケーション権限を持つかどうかを確認します。Oracleデータベースでは、データ・セキュリティ・ポリシーが有効になっている表に対してアプリケーション・ユーザーが問合せを実行したときに、このファンクションが自動的に使用されます。指定されたアプリケーション権限がアプリケーション・ユーザーに付与されている場合、ORA_CHECK_ACL1を戻します。アプリケーション・ユーザーに付与されていない場合は、0を戻します。

構文

ORA_CHECK_ACL(
 acls        IN RAW,
 (privileges IN VARCHAR(128))+)
return NUMBER;

パラメータ

パラメータ 説明

acls

8バイトのACL IDのRAWリスト。許可されるaclsの最大数は250です。

privileges

チェックされているアプリケーション権限名。許可されるアプリケーション権限の最大数は100です。

次の例では、ORA_CHECK_ACLを使用して、ACL1 ACLでアプリケーション・ユーザーにP1およびP2アプリケーション権限が付与されているかどうかを確認します。

SELECT ORA_CHECK_ACL(TO_ACLID('ACL1'),'P1', 'P2') INTO ACLRESULT FROM DUAL;

ORA_GET_ACLIDSファンクション

ORA_GET_ACLIDSファンクションは、現在のアプリケーション・ユーザーのデータ・セキュリティ・ポリシー対応の表のオブジェクト・インスタンスに関連付けられているACL IDのリストを戻します。現在の行へのアクセス権が付与されている場合、ORA_GET_ACLIDSは一致するデータ・レルム制約に関連付けられているすべてのACL識別子を取得するため、Oracleデータベースはすべての動的データ・レルム制約ルールを評価します。データ・レルム制約がマスター・ディテール関係のディテール表で指定されている場合、ORA_GET_ACLIDSは、マスター表とディテール表からACL識別子を取得します。複数のデータ・セキュリティ・ポリシーが表に適用されている場合、ORA_GET_ACLIDSは各ポリシーに関連付けられているACLを戻します。

構文

ORA_GET_ACLIDS (
 table_alias  IN VARCHAR2, 
 (privileges IN VARCHAR(128))+)
RETURN RAW;

パラメータ

パラメータ 説明

table_alias

句からの問合せの表またはビュー・オブジェクトの別名。

表がXDS対応であることを確認します。これを行うには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。

XDS対応の表に解決されるビューを指定する場合、およびビューに複数のXDS対応の表がある場合、Oracleデータベースは表の1つのみを戻します。

privileges

戻されたACL識別子に関連付けられているアプリケーション権限名。許可されるアプリケーション権限の最大数は100です。

SELECT ORA_GET_ACLIDS(t, 'SELECT', 'VIEW_LOC') from SCOTT.DEPT t;

ORA_CHECK_PRIVILEGEファンクション

ORA_CHECK_PRIVILEGEファンクションは、指定した権限がアプリケーション・ユーザーに付与されているかどうかを確認します。指定された権限がアプリケーション・ユーザーに付与されている場合、ORA_CHECK_PRIVILEGE1を戻します。このファンクションは、CREATE_SESSIONなどのシステム権限に対してのみ機能します。システム権限がアプリケーション・ユーザーに付与されていない場合は、0を戻します。

構文

ORA_CHECK_PRIVILEGE(
 (privs IN VARCHAR(128))+)
return NUMBER;

パラメータ

パラメータ 説明

privs

チェックされている権限名。許可される権限の最大数は100です。

次の例では、ORA_CHECK_PRIVILEGEを使用して、アプリケーション・ユーザーにCREATE_SESSIONシステム権限が付与されているかどうかを確認します。

SELECT ORA_CHECK_PRIVILEGE('CREATE_SESSION') FROM DUAL;

TO_ACLIDファンクション

TO_ACLIDファンクションは、ACL名に提供されているACL IDを戻します。

構文

TO_ACLID(
 (acls IN VARCHAR(128))+)
return NUMBER;

パラメータ

パラメータ 説明

acls

ACL IDを戻すACLの名前。

次の例は、TO_ACLIDファンクションを使用してACL1のACL IDを戻します。

SELECT ORA_CHECK_ACL(TO_ACLID('ACL1'),'P1', 'P2') INTO ACLRESULT FROM DUAL;