CIS Oracle Database 19c Benchmark

Secure configuration guidelines for Oracle Database 19c

v1.2.0 August 2024

Overview

▶

This CIS Benchmark provides prescriptive guidance for establishing a secure configuration posture for Oracle Database 19c. Recommendations cover installation hardening, listener configuration, user and privilege management, unified auditing, TDE, and network encryption.

~170Recommendations
6Sections
2Profile Levels
SectionAreaFocus
1Installation & PatchingOracle Home permissions, CPU/PSU patches
2Instance ConfigurationInit parameters, listener, networking
3User AccountsDefault accounts, password profiles
4Privileges & AuthorizationSystem/object privs, roles
5Auditing & LoggingUnified auditing, audit trail
6Encryption & NetworkTDE, network encryption, SQL*Net

Profile Definitions

▶
ProfileDescriptionIntended Use
L1Level 1 — Oracle Database ServerEssential security for all Oracle installations with minimal performance impact.
L2Level 2 — Oracle Database ServerDefense-in-depth settings for high-security environments. May require Advanced Security Option.

1 — Installation & Patching

▶

1.1 Oracle Home

▶
1.1.1 Ensure $ORACLE_HOME Permissions Are Restrictive (Automated)
L1 Auto
Description

File and directory permissions for $ORACLE_HOME should be set to Restrictive. Overly permissive access controls can allow unauthorized users to read, modify, or execute sensitive files, potentially compromising the Oracle Database 19c database server.

Rationale

Incorrect permissions on $ORACLE_HOME could allow unauthorized reading, writing, or execution of critical files. Proper file permissions are a foundational control that prevents privilege escalation and data tampering.

Audit
ls -ld $ORACLE_HOME
find $ORACLE_HOME -perm /o+w -ls 2>/dev/null
Remediation
chown -R oracle:oinstall $ORACLE_HOME
chmod -R o-rwx $ORACLE_HOME
1.1.2 Ensure $ORACLE_BASE Permissions Are Restrictive (Automated)
L1 Auto
Description

File and directory permissions for $ORACLE_BASE should be set to Restrictive. Overly permissive access controls can allow unauthorized users to read, modify, or execute sensitive files, potentially compromising the Oracle Database 19c database server.

Rationale

Incorrect permissions on $ORACLE_BASE could allow unauthorized reading, writing, or execution of critical files. Proper file permissions are a foundational control that prevents privilege escalation and data tampering.

Audit
ls -ld $ORACLE_BASE
Remediation
chown oracle:oinstall $ORACLE_BASE
chmod 750 $ORACLE_BASE
1.1.3 Ensure Datafile Permissions Are Set Properly (Automated)
L1 Auto
Description

File and directory permissions for Datafile should be set to Set Properly. Overly permissive access controls can allow unauthorized users to read, modify, or execute sensitive files, potentially compromising the Oracle Database 19c database server.

Rationale

Incorrect permissions on Datafile could allow unauthorized reading, writing, or execution of critical files. Proper file permissions are a foundational control that prevents privilege escalation and data tampering.

Audit
SELECT name FROM v$datafile;
-- then check OS permissions on each file
Remediation
chmod 640 /u01/app/oracle/oradata/<DB_NAME>/*.dbf

1.2 Patch Management

▶
1.2.1 Ensure the Latest Critical Patch Update Is Applied (Manual)
L1 Manual
Description

This recommendation verifies that the Latest Critical Patch Update Is Applied on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to the Latest Critical Patch Update Is Applied may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT action, version, comments FROM dba_registry_sqlpatch ORDER BY action_time DESC;
$ORACLE_HOME/OPatch/opatch lspatches
Remediation
# Download and apply the latest CPU/RU from My Oracle Support
# Use OPatch/opatchauto:
$ORACLE_HOME/OPatch/opatch apply <PATCH_DIR>
1.2.2 Ensure Sample Schemas Are Removed (Automated)
L1 Auto
Description

Sample Schemas should be removed from the Oracle Database 19c database server when not required. Removing unnecessary components reduces the attack surface and limits the number of potential vulnerabilities that need to be managed.

Rationale

Retaining Sample Schemas when it is not needed increases the attack surface. Unpatched or unused components are frequent targets for exploitation and should be removed as part of system hardening.

Audit
SELECT username FROM dba_users WHERE username IN
  ('SCOTT','HR','OE','SH','PM','IX','BI');
Remediation
DROP USER SCOTT CASCADE;
DROP USER HR CASCADE;
DROP USER OE CASCADE;
DROP USER SH CASCADE;

2 — Instance Configuration

▶

2.1 Initialization Parameters

▶
2.1.1 Ensure REMOTE_LOGIN_PASSWORDFILE Is Set to NONE (Automated)
L1 Auto
Description

This recommendation configures REMOTE_LOGIN_PASSWORDFILE to NONE on the Oracle Database 19c database server. Setting this value appropriately ensures the system operates within the security parameters defined by the CIS benchmark.

Rationale

An improperly configured value for REMOTE_LOGIN_PASSWORDFILE could weaken security controls or allow unintended behavior. Setting this to NONE ensures the Oracle Database 19c database server operates within a well-defined security boundary.

Audit
SELECT value FROM v$parameter WHERE name = 'remote_login_passwordfile';
Remediation
ALTER SYSTEM SET remote_login_passwordfile = NONE SCOPE=SPFILE;
-- Restart required
2.1.2 Ensure REMOTE_OS_AUTHENT Is FALSE (Automated)
L1 Auto
Description
When TRUE, Oracle trusts the OS authentication from remote clients which can be trivially spoofed.
Rationale

Failure to rEMOTE_OS_AUTHENT Is FALSE may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT value FROM v$parameter WHERE name = 'remote_os_authent';
Remediation
ALTER SYSTEM SET remote_os_authent = FALSE SCOPE=SPFILE;
2.1.3 Ensure REMOTE_OS_ROLES Is FALSE (Automated)
L1 Auto
Description

This recommendation verifies that rEMOTE_OS_ROLES Is FALSE on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to rEMOTE_OS_ROLES Is FALSE may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT value FROM v$parameter WHERE name = 'remote_os_roles';
Remediation
ALTER SYSTEM SET remote_os_roles = FALSE SCOPE=SPFILE;
2.1.4 Ensure SEC_CASE_SENSITIVE_LOGON Is TRUE (Automated)
L1 Auto
Description

This recommendation verifies that sEC_CASE_SENSITIVE_LOGON Is TRUE on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to sEC_CASE_SENSITIVE_LOGON Is TRUE may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT value FROM v$parameter WHERE name = 'sec_case_sensitive_logon';
Remediation
ALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE=SPFILE;
2.1.5 Ensure O7_DICTIONARY_ACCESSIBILITY Is FALSE (Automated)
L1 Auto
Description

This recommendation verifies that o7_DICTIONARY_ACCESSIBILITY Is FALSE on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to o7_DICTIONARY_ACCESSIBILITY Is FALSE may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT value FROM v$parameter WHERE name = 'o7_dictionary_accessibility';
Remediation
ALTER SYSTEM SET o7_dictionary_accessibility = FALSE SCOPE=SPFILE;
2.1.6 Ensure SEC_MAX_FAILED_LOGIN_ATTEMPTS Is ≤ 5 (Automated)
L1 Auto
Description

This recommendation verifies that sEC_MAX_FAILED_LOGIN_ATTEMPTS Is ≤ 5 on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to sEC_MAX_FAILED_LOGIN_ATTEMPTS Is ≤ 5 may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT value FROM v$parameter WHERE name = 'sec_max_failed_login_attempts';
Remediation
ALTER SYSTEM SET sec_max_failed_login_attempts = 5 SCOPE=SPFILE;

2.2 Network Configuration

▶
2.2.1 Ensure the Listener Is Password-Protected or Uses OS Auth (Automated)
L1 Auto
Description

This recommendation verifies that the Listener Is Password-Protected or Uses OS Auth on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to the Listener Is Password-Protected or Uses OS Auth may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
lsnrctl status
# Check SECURITY = ON in listener.ora
Remediation
# In listener.ora:
SECURE_REGISTER_LISTENER = (IPC)
# Or set an admin password:
lsnrctl
LSNRCTL> change_password
LSNRCTL> save_config
2.2.2 Ensure ADMIN_RESTRICTIONS_LISTENER Is Set to ON (Automated)
L1 Auto
Description

This recommendation configures ADMIN_RESTRICTIONS_LISTENER to ON on the Oracle Database 19c database server. Setting this value appropriately ensures the system operates within the security parameters defined by the CIS benchmark.

Rationale

An improperly configured value for ADMIN_RESTRICTIONS_LISTENER could weaken security controls or allow unintended behavior. Setting this to ON ensures the Oracle Database 19c database server operates within a well-defined security boundary.

Audit
grep -i ADMIN_RESTRICTIONS $ORACLE_HOME/network/admin/listener.ora
Remediation
# In listener.ora:
ADMIN_RESTRICTIONS_LISTENER = ON
2.2.3 Ensure the Listener Logging Is Enabled (Automated)
L1 Auto
Description

This setting controls whether the Listener Logging is enabled on the Oracle Database 19c database server. Enabling this feature strengthens the security posture by enforcing the recommended configuration via init.ora, sqlnet.ora, listener.ora, or SQL*Plus.

Rationale

Without the Listener Logging enabled, the Oracle Database 19c database server may lack critical protections against known attack vectors. Enabling this control mitigates risk and aligns the deployment with industry-accepted security baselines.

Audit
grep -i LOG_FILE $ORACLE_HOME/network/admin/listener.ora
Remediation
# In listener.ora:
LOGGING_LISTENER = ON
LOG_FILE_LISTENER = listener.log
LOG_DIRECTORY_LISTENER = $ORACLE_BASE/diag/tnslsnr/<host>/listener/trace
2.2.4 Ensure EXTPROC Is Not in Use or Properly Secured (Manual)
L2 Manual
Description

This recommendation verifies that eXTPROC Is Not in Use or Properly Secured on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to eXTPROC Is Not in Use or Properly Secured may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
grep -i EXTPROC $ORACLE_HOME/network/admin/listener.ora
grep -i EXTPROC $ORACLE_HOME/network/admin/tnsnames.ora
Remediation
# Remove EXTPROC entries from listener.ora if not needed
# If needed, ensure extproc.ora restricts allowed DLLs:
SET EXTPROC_DLLS=ONLY:<allowed_dll_path>

3 — User Accounts & Authentication

▶

3.1 Default Accounts

▶
3.1.1 Ensure Default Accounts Are Locked and Expired (Automated)
L1 Auto
Description

This recommendation verifies that default Accounts Are Locked and Expired on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to default Accounts Are Locked and Expired may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT username, account_status FROM dba_users
WHERE username IN ('DBSNMP','OUTLN','MDSYS','CTXSYS','XDB','WMSYS','APEX_PUBLIC_USER')
AND account_status != 'EXPIRED & LOCKED';
Remediation
ALTER USER DBSNMP ACCOUNT LOCK PASSWORD EXPIRE;
ALTER USER OUTLN ACCOUNT LOCK PASSWORD EXPIRE;
ALTER USER CTXSYS ACCOUNT LOCK PASSWORD EXPIRE;
3.1.2 Ensure SYS and SYSTEM Passwords Are Changed from Defaults (Manual)
L1 Manual
Description

This recommendation verifies that sYS and SYSTEM Passwords Are Changed from Defaults on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to sYS and SYSTEM Passwords Are Changed from Defaults may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Attempt login with known default passwords:
# SYS/change_on_install, SYSTEM/manager
Remediation
ALTER USER SYS IDENTIFIED BY <STRONG_PASSWORD>;
ALTER USER SYSTEM IDENTIFIED BY <STRONG_PASSWORD>;
3.1.3 Ensure No Public Database Links Exist (Automated)
L1 Auto
Description

This recommendation verifies that No Public Database Links is present on the Oracle Database 19c database server. Having this configuration in place is essential for maintaining the expected security baseline defined by the CIS benchmark.

Rationale

The absence of No Public Database Links leaves the Oracle Database 19c database server without an important security control. Verifying its presence ensures the system meets the minimum security baseline required by the CIS benchmark.

Audit
SELECT db_link, owner FROM dba_db_links WHERE owner = 'PUBLIC';
Remediation
DROP PUBLIC DATABASE LINK <LINK_NAME>;

3.2 Password Profiles

▶
3.2.1 Ensure PASSWORD_LIFE_TIME Is ≤ 90 Days (Automated)
L1 Auto
Description

This recommendation verifies that pASSWORD_LIFE_TIME Is ≤ 90 Days on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to pASSWORD_LIFE_TIME Is ≤ 90 Days may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT profile, resource_name, limit FROM dba_profiles
WHERE resource_name = 'PASSWORD_LIFE_TIME';
Remediation
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
3.2.2 Ensure FAILED_LOGIN_ATTEMPTS Is ≤ 5 (Automated)
L1 Auto
Description

This recommendation verifies that fAILED_LOGIN_ATTEMPTS Is ≤ 5 on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to fAILED_LOGIN_ATTEMPTS Is ≤ 5 may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT profile, resource_name, limit FROM dba_profiles
WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS';
Remediation
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5;
3.2.3 Ensure PASSWORD_LOCK_TIME Is ≥ 1 Day (Automated)
L1 Auto
Description

This recommendation verifies that pASSWORD_LOCK_TIME Is ≥ 1 Day on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to pASSWORD_LOCK_TIME Is ≥ 1 Day may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT profile, resource_name, limit FROM dba_profiles
WHERE resource_name = 'PASSWORD_LOCK_TIME';
Remediation
ALTER PROFILE DEFAULT LIMIT PASSWORD_LOCK_TIME 1;
3.2.4 Ensure PASSWORD_VERIFY_FUNCTION Is Set (Automated)
L1 Auto
Description
A password verify function enforces complexity requirements such as minimum length, mixed case, and avoidance of dictionary words.
Rationale

Failure to pASSWORD_VERIFY_FUNCTION Is Set may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT profile, resource_name, limit FROM dba_profiles
WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION';
Remediation
-- Run the built-in verification script:
@$ORACLE_HOME/rdbms/admin/catpvf.sql
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
3.2.5 Ensure PASSWORD_REUSE_MAX Is ≥ 20 (Automated)
L2 Auto
Description

This recommendation verifies that pASSWORD_REUSE_MAX Is ≥ 20 on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to pASSWORD_REUSE_MAX Is ≥ 20 may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT profile, resource_name, limit FROM dba_profiles
WHERE resource_name = 'PASSWORD_REUSE_MAX';
Remediation
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 20;

4 — Privileges & Authorization

▶

4.1 System Privileges

▶
4.1.1 Ensure No Users Have 'ANY' Privileges Granted Directly (Automated)
L1 Auto
Description

This recommendation verifies that no Users Have 'ANY' Privileges Granted Directly on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to no Users Have 'ANY' Privileges Granted Directly may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee, privilege FROM dba_sys_privs
WHERE privilege LIKE '%ANY%'
AND grantee NOT IN ('SYS','SYSTEM','DBA','IMP_FULL_DATABASE','EXP_FULL_DATABASE');
Remediation
REVOKE <ANY_PRIVILEGE> FROM <USER>;
4.1.2 Ensure DBA Role Is Not Granted to Non-Admin Users (Automated)
L1 Auto
Description

This recommendation verifies that dBA Role Is Not Granted to Non-Admin Users on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to dBA Role Is Not Granted to Non-Admin Users may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee FROM dba_role_privs WHERE granted_role = 'DBA'
AND grantee NOT IN ('SYS','SYSTEM');
Remediation
REVOKE DBA FROM <USER>;
4.1.3 Ensure EXECUTE on UTL_FILE Is Revoked from PUBLIC (Automated)
L1 Auto
Description
UTL_FILE allows PL/SQL to read and write OS files. PUBLIC access creates a privilege escalation risk.
Rationale

Failure to eXECUTE on UTL_FILE Is Revoked from PUBLIC may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee, privilege FROM dba_tab_privs
WHERE table_name = 'UTL_FILE' AND grantee = 'PUBLIC';
Remediation
REVOKE EXECUTE ON UTL_FILE FROM PUBLIC;
4.1.4 Ensure EXECUTE on DBMS_SQL Is Revoked from PUBLIC (Automated)
L1 Auto
Description

This recommendation verifies that eXECUTE on DBMS_SQL Is Revoked from PUBLIC on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to eXECUTE on DBMS_SQL Is Revoked from PUBLIC may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee, privilege FROM dba_tab_privs
WHERE table_name = 'DBMS_SQL' AND grantee = 'PUBLIC';
Remediation
REVOKE EXECUTE ON DBMS_SQL FROM PUBLIC;
4.1.5 Ensure EXECUTE on DBMS_JAVA Is Revoked from PUBLIC (Automated)
L2 Auto
Description

This recommendation verifies that eXECUTE on DBMS_JAVA Is Revoked from PUBLIC on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to eXECUTE on DBMS_JAVA Is Revoked from PUBLIC may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee FROM dba_tab_privs
WHERE table_name LIKE 'DBMS_JAVA%' AND grantee = 'PUBLIC';
Remediation
REVOKE EXECUTE ON DBMS_JAVA FROM PUBLIC;
REVOKE EXECUTE ON DBMS_JAVA_TEST FROM PUBLIC;

4.2 Role Management

▶
4.2.1 Ensure Privileges Are Granted Through Roles, Not Directly (Manual)
L1 Manual
Description

This recommendation verifies that privileges Are Granted Through Roles, Not Directly on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to privileges Are Granted Through Roles, Not Directly may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee, privilege FROM dba_sys_privs
WHERE grantee NOT IN (SELECT role FROM dba_roles)
AND grantee NOT IN ('SYS','SYSTEM');
Remediation
# Create application-specific roles and grant privileges through them:
CREATE ROLE app_role;
GRANT SELECT ON schema.table TO app_role;
GRANT app_role TO <USER>;
4.2.2 Ensure WITH ADMIN OPTION Is Not Granted to Non-DBA Users (Automated)
L1 Auto
Description

This recommendation verifies that wITH ADMIN OPTION Is Not Granted to Non-DBA Users on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to wITH ADMIN OPTION Is Not Granted to Non-DBA Users may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee, privilege, admin_option FROM dba_sys_privs
WHERE admin_option = 'YES'
AND grantee NOT IN ('SYS','SYSTEM','DBA');
Remediation
REVOKE <PRIVILEGE> FROM <USER>;
GRANT <PRIVILEGE> TO <USER>;  -- re-grant without ADMIN OPTION

5 — Auditing & Logging

▶

5.1 Unified Auditing

▶
5.1.1 Ensure Unified Auditing Is Enabled (Automated)
L1 Auto
Description

This setting controls whether Unified Auditing is enabled on the Oracle Database 19c database server. Enabling this feature strengthens the security posture by enforcing the recommended configuration via init.ora, sqlnet.ora, listener.ora, or SQL*Plus.

Rationale

Without Unified Auditing enabled, the Oracle Database 19c database server may lack critical protections against known attack vectors. Enabling this control mitigates risk and aligns the deployment with industry-accepted security baselines.

Audit
SELECT value FROM v$option WHERE parameter = 'Unified Auditing';
Remediation
# Relink Oracle binary with unified auditing:
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle
# Restart database
5.1.2 Ensure Logon/Logoff Events Are Audited (Automated)
L1 Auto
Description

This recommendation ensures that Logon/Logoff Events events are audited on the Oracle Database 19c database server. Comprehensive logging enables detection of security incidents, supports forensic investigation, and satisfies compliance and audit requirements.

Rationale

Without adequate logging of Logon/Logoff Events, security incidents may go undetected and forensic investigation becomes difficult or impossible. Comprehensive audit trails are essential for compliance and incident response.

Audit
SELECT policy_name, audit_option FROM audit_unified_policies
WHERE audit_option LIKE '%LOGON%';
Remediation
CREATE AUDIT POLICY logon_policy ACTIONS LOGON, LOGOFF;
AUDIT POLICY logon_policy;
5.1.3 Ensure DDL Changes Are Audited (Automated)
L1 Auto
Description

This recommendation ensures that DDL Changes events are audited on the Oracle Database 19c database server. Comprehensive logging enables detection of security incidents, supports forensic investigation, and satisfies compliance and audit requirements.

Rationale

Without adequate logging of DDL Changes, security incidents may go undetected and forensic investigation becomes difficult or impossible. Comprehensive audit trails are essential for compliance and incident response.

Audit
SELECT policy_name FROM audit_unified_policies
WHERE audit_option IN ('CREATE TABLE','ALTER TABLE','DROP TABLE','CREATE USER','ALTER USER','DROP USER');
Remediation
CREATE AUDIT POLICY ddl_policy ACTIONS
  CREATE TABLE, ALTER TABLE, DROP TABLE,
  CREATE USER, ALTER USER, DROP USER,
  CREATE ROLE, ALTER ROLE, DROP ROLE,
  GRANT, REVOKE;
AUDIT POLICY ddl_policy;
5.1.4 Ensure DBA Actions Are Audited (Automated)
L2 Auto
Description

This recommendation ensures that DBA Actions events are audited on the Oracle Database 19c database server. Comprehensive logging enables detection of security incidents, supports forensic investigation, and satisfies compliance and audit requirements.

Rationale

Without adequate logging of DBA Actions, security incidents may go undetected and forensic investigation becomes difficult or impossible. Comprehensive audit trails are essential for compliance and incident response.

Audit
SELECT policy_name, enabled_option FROM audit_unified_enabled_policies
WHERE user_name = 'ALL USERS';
Remediation
CREATE AUDIT POLICY dba_activity_policy
  ACTIONS ALL
  ONLY TOPLEVEL;
AUDIT POLICY dba_activity_policy BY SYS, SYSTEM;

5.2 Audit Trail

▶
5.2.1 Ensure Audit Trail Is Not Writable by Non-SYS Users (Automated)
L1 Auto
Description

This recommendation verifies that audit Trail Is Not Writable by Non-SYS Users on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to audit Trail Is Not Writable by Non-SYS Users may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT grantee, privilege FROM dba_tab_privs
WHERE table_name IN ('UNIFIED_AUDIT_TRAIL','AUD$')
AND privilege IN ('INSERT','UPDATE','DELETE');
Remediation
REVOKE DELETE ON sys.aud$ FROM <USER>;
REVOKE INSERT ON sys.aud$ FROM <USER>;
5.2.2 Ensure Audit Records Are Archived and Purged Regularly (Manual)
L1 Manual
Description

This recommendation verifies that audit Records Are Archived and Purged Regularly on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to audit Records Are Archived and Purged Regularly may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT count(*) FROM unified_audit_trail;
-- Check if automated purge job exists:
SELECT * FROM dba_scheduler_jobs WHERE job_name LIKE '%AUDIT%';
Remediation
-- Set retention to 90 days:
BEGIN
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
    audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
    last_archive_time => SYSTIMESTAMP - 90);
END;
/
-- Create purge job:
BEGIN
  DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
    audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
    audit_trail_purge_interval => 24,
    audit_trail_purge_name => 'DAILY_AUDIT_PURGE',
    use_last_arch_timestamp => TRUE);
END;
/

6 — Encryption & Network Security

▶

6.1 Transparent Data Encryption

▶
6.1.1 Ensure a Wallet/Keystore Is Configured for TDE (Automated)
L2 Auto
Description
Transparent Data Encryption (TDE) encrypts data at rest. A keystore must be configured before encrypting tablespaces or columns.
Rationale

Failure to a Wallet/Keystore Is Configured for TDE may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT status, wallet_type FROM v$encryption_wallet;
Remediation
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/opt/oracle/wallet'
  IDENTIFIED BY <KEYSTORE_PASSWORD>;
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
  IDENTIFIED BY <KEYSTORE_PASSWORD>;
ADMINISTER KEY MANAGEMENT SET KEY
  IDENTIFIED BY <KEYSTORE_PASSWORD> WITH BACKUP;
6.1.2 Ensure Auto-Login Wallet Is Not Used in Production (Manual)
L2 Manual
Description

This recommendation verifies that auto-Login Wallet Is Not Used in Production on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to auto-Login Wallet Is Not Used in Production may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
SELECT wallet_type FROM v$encryption_wallet;
-- Should be PASSWORD, not AUTOLOGIN
Remediation
# Use password-based keystore instead of auto-login:
ADMINISTER KEY MANAGEMENT DELETE AUTOLOGIN KEYSTORE;
6.1.3 Ensure Sensitive Tablespaces Are Encrypted (Automated)
L2 Auto
Description

This setting ensures that Sensitive Tablespaces uses encryption on the Oracle Database 19c database server. Encrypting data in transit and at rest protects sensitive information from interception and unauthorized disclosure.

Rationale

Without encryption, Sensitive Tablespaces may transmit or store sensitive information in cleartext, exposing it to interception, eavesdropping, or tampering. Encryption is a critical control for data confidentiality and integrity.

Audit
SELECT tablespace_name, encrypted FROM dba_tablespaces
WHERE contents = 'PERMANENT';
Remediation
ALTER TABLESPACE <TS_NAME> ENCRYPTION ONLINE
  USING 'AES256' ENCRYPT;

6.2 Network Encryption

▶
6.2.1 Ensure Native Network Encryption Is Enabled (Automated)
L1 Auto
Description

This setting controls whether Native Network Encryption is enabled on the Oracle Database 19c database server. Enabling this feature strengthens the security posture by enforcing the recommended configuration via init.ora, sqlnet.ora, listener.ora, or SQL*Plus.

Rationale

Without Native Network Encryption enabled, the Oracle Database 19c database server may lack critical protections against known attack vectors. Enabling this control mitigates risk and aligns the deployment with industry-accepted security baselines.

Audit
grep -i SQLNET.ENCRYPTION_SERVER $ORACLE_HOME/network/admin/sqlnet.ora
Remediation
# In sqlnet.ora:
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
6.2.2 Ensure TLS Is Configured for Listener (Automated)
L2 Auto
Description

This recommendation verifies that tLS Is Configured for Listener on the Oracle Database 19c database server. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to tLS Is Configured for Listener may leave the Oracle Database 19c database server vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
grep -i SSL $ORACLE_HOME/network/admin/listener.ora
grep -i WALLET_LOCATION $ORACLE_HOME/network/admin/sqlnet.ora
Remediation
# In listener.ora — add TCPS endpoint:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCPS)(HOST = <HOST>)(PORT = 2484))
    )
  )
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = /opt/oracle/wallet)))
6.2.3 Ensure SQLNET.ALLOWED_LOGON_VERSION_SERVER Is Set to 12a (Automated)
L1 Auto
Description
Prevents clients using older, weaker password verifiers from connecting.
Rationale

An improperly configured value for SQLNET.ALLOWED_LOGON_VERSION_SERVER could weaken security controls or allow unintended behavior. Setting this to 12a ensures the Oracle Database 19c database server operates within a well-defined security boundary.

Audit
grep -i SQLNET.ALLOWED_LOGON_VERSION $ORACLE_HOME/network/admin/sqlnet.ora
Remediation
# In sqlnet.ora:
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12a
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 12a