DBMS_FGA

The DBMS_FGA package provides fine-grained security functions.

This chapter contains the following topics:

DBMS_FGA Security Model

You must have the AUDIT_ADMIN role or the EXECUTE privilege on the DBMS_FGA package to create audit policies. DBMS_FGA is an invoker rights package.

Note: Starting in Oracle AI Database 26ai, fine-grained audit policies that are created with the DBMS_FGA package will generate audit records in the unified audit trail, viewable with the UNIFIED_AUDIT_TRAIL data dictionary view.

To analyze and audit data, you must have the AUDIT_VIEWER role. Because the audit function can potentially capture all user environment and application context values, policy administration should be executable by privileged users only. The policy event handler module is executed with the module owner’s privilege.

DBMS_FGA Operational Notes

This package is available for only cost-based optimization. The rule-based optimizer may generate unnecessary audit records since audit monitoring can occur before row filtering.

For both the rule-based optimizer and the cost-based optimizer, you can query the SQL_TEXT and SQL_BINDS columns of the UNIFIED_AUDIT_TRAIL view to analyze the SQL text and corresponding bind variables that are issued.

Summary of DBMS_FGA Subprograms

This table describes the DBMS_FGA subprograms.

Table 1 DBMS_FGA Package Subprograms

Subprogram Description
ADD_POLICY Procedure Creates an audit policy using the supplied predicate as the audit condition
DISABLE_POLICY Procedure Disables an audit policy
DROP_POLICY Procedure Drops an audit policy
ENABLE_POLICY Procedure Enables an audit policy

ADD_POLICY Procedure

This procedure creates an audit policy using the supplied predicate as the audit condition.

Syntax

ANY_COLUMNS

Parameters

Table 2 ADD_POLICY Procedure Parameters

Parameter Description
object_schema Schema of the object to be audited. If NULL, the current schema is assumed.
object_name Name of the object to be audited
policy_name Unique name of the policy. Do not enter special characters such as spaces or commas. If you want to use special characters for the policy name, then enclose the name in quotation marks.
audit_condition A condition in a row that indicates a monitoring condition. NULL is allowed and acts as TRUE.
audit_column Columns to be checked for access. These can include OLS hidden columns or object type columns. The default, NULL, causes audit if any column is accessed or affected.
handler_schema Schema that contains the event handler. The default, NULL, causes the current schema to be used.
handler_module Function name of the event handler; includes the package name if necessary. This function is invoked only after the first row that matches the audit condition in the query is processed. If the procedure fails with an exception, the user SQL statement will fail as well.
enable Enables the policy if TRUE, which is the default
statement_types SQL statement types to which this policy is applicable: INSERT, UPDATE, DELETE, or SELECT only
audit_trail Do not set this parameter; it is desupported. All audit records are written to the unified audit trail, viewable by querying the UNIFIED_AUDIT_TRAIL data dictionary view.
audit_column_opts Establishes whether a statement is audited when the query references any column specified in the audit_column parameter or only when all such columns are referenced
policy_owner User who owns the fine-grained auditing policy. However, this setting is not a user-supplied argument. The Oracle Data Pump client uses this setting internally to recreate the fine-grained audit policies appropriately.

Usage Notes

PROCEDURE fname ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 )  AS ...

where fname is the name of the procedure, object_schema is the name of the schema of the table audited, object_name is the name of the table to be audited, and policy_name is the name of the policy being enforced. The audit function will be executed with the function owner’s privilege.

ALTER SYSTEM SET AUDIT_FILE_DEST =  new_directory DEFERRED

Starting with Oracle AI Database 26ai, the AUDIT_FILE_DEST parameter is deprecated.

See Also: Oracle AI Database Security Guide for an example of creating an email alert handler for a fine-grained audit policy

Examples

DBMS_FGA.ADD_POLICY (
   object_schema      =>  'scott',
   object_name        =>  'emp',
   policy_name        =>  'mypolicy1',
   audit_condition    =>  'sal < 100',
   audit_column       =>  'comm,sal',
   handler_schema     =>   NULL,
   handler_module     =>   NULL,
   enable             =>   TRUE,
   statement_types    =>  'INSERT, UPDATE',
   audit_column_opts  =>   DBMS_FGA.ANY_COLUMNS,
   policy_owner       =>  'sec_admin);

DISABLE_POLICY Procedure

This procedure disables an audit policy.

Syntax

DBMS_FGA.DISABLE_POLICY(
   object_schema  IN  VARCHAR2,
   object_name    IN  VARCHAR2,
   policy_name    IN  VARCHAR2);

Parameters

Table 3 DISABLE_POLICY Procedure Parameters

Parameter Description
object_schema Schema of the object to be audited. IfNULL, the current schema is assumed.
object_name Name of the object to be audited
policy_name Unique name of the policy

The default value for object_schema is NULL. If NULL, the current schema is assumed.

Examples

DBMS_FGA.DISABLE_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'mypolicy1');

DROP_POLICY Procedure

This procedure drops an audit policy.

Syntax

DBMS_FGA.DROP_POLICY(
   object_schema  IN  VARCHAR2,
   object_name    IN  VARCHAR2,
   policy_name    IN  VARCHAR2);

Parameters

Table 4 DROP_POLICY Procedure Parameters

Parameter Description
object_schema Schema of the object to be audited. IfNULL, the current schema is assumed.
object_name Name of the object to be audited
policy_name Unique name of the policy

Usage Notes

The DBMS_FGA procedures cause current DML transactions, if any, to commit before the operation unless they are inside a DDL event trigger. With DDL transactions, the DBMS_FGA procedures are part of the DDL transaction. The default value for object_schema is NULL. If NULL, the current schema is assumed.

Note: Oracle Database automatically drops the audit policy if you remove the object specified in the object_name parameter of the DBMS_FGA.ADD_POLICY procedure, or if you drop the user who created the audit policy.

Examples

DBMS_FGA.DROP_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'mypolicy1');

ENABLE_POLICY Procedure

This procedure enables an audit policy.

Syntax

DBMS_FGA.ENABLE_POLICY(
   object_schema  IN  VARCHAR2,
   object_name    IN  VARCHAR2,
   policy_name    IN  VARCHAR2,
   enable         IN  BOOLEAN);

Parameters

Table 5 ENABLE_POLICY Procedure Parameters

Parameter Description
object_schema Schema of the object to be audited. If NULL, the current schema is assumed.
object_name Name of the object to be audited
policy_name Unique name of the policy
enable Defaults to TRUE to enable the policy

Examples

DBMS_FGA.ENABLE_POLICY (
object_schema    =>  'scott',
object_name      =>  'emp',
policy_name      =>  'mypolicy1',
enable           =>   TRUE);