Implementing CIS Oracle Database 19c Security Benchmark Controls
Security hardening is not only about applying individual best practices. In enterprise environments, organizations need a documented security baseline that can be measured, audited, and continuously improved.
This is where security benchmarks become important.
Frameworks such as CIS Benchmarks, ISO 27001 controls, PCI DSS requirements, and internal security standards provide structured guidance for protecting database platforms.
In this article, we will map Oracle Database 19c security controls to a practical hardening methodology inspired by CIS benchmark principles.
Why Security Benchmarks Matter
A common question during audits is:
“How do you prove that your Oracle database is secure?”
The answer cannot simply be:
“We configured it correctly.”
Security requires evidence.
A benchmark provides:
- A documented security baseline.
- Repeatable validation.
- Audit evidence.
- Risk measurement.
- Continuous improvement.
Oracle Security Benchmark Categories
A database security benchmark usually evaluates the following areas:
+--------------------------------+ | Oracle Database Security | +--------------------------------+ | Authentication | | Authorization | | Auditing | | Encryption | | Network Security | | Configuration | | User Management | | Privilege Management | | Backup Protection | | Patch Management | +--------------------------------+
1. Authentication Controls
Control Objective
Ensure that only authorized users can authenticate to the database.
Review Default Accounts
Oracle databases contain many predefined accounts.
Review:
SELECT username, account_status FROM dba_users ORDER BY username;
Look for:
- Default accounts.
- Unused accounts.
- Accounts that should be locked.
Lock Unused Accounts
Example:
ALTER USER WADHAH ACCOUNT LOCK;
However, always validate dependencies before locking Oracle-maintained accounts.
2. Password Security Controls
Password policy is managed through profiles.
Review:
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_type='PASSWORD';
Recommended controls:
| Parameter | Recommendation |
|---|---|
| FAILED_LOGIN_ATTEMPTS | Limited |
| PASSWORD_LIFE_TIME | Defined |
| PASSWORD_REUSE_TIME | Controlled |
| PASSWORD_VERIFY_FUNCTION | Enabled |
Example:
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5;
3. Privilege Management
The principle of least privilege is one of the most important database security concepts.
Identify powerful privileges:
SELECT grantee, privilege FROM dba_sys_privs WHERE privilege LIKE '%ANY%';
Examples requiring review:
SELECT ANY TABLE INSERT ANY TABLE ALTER ANY PROCEDURE DROP ANY TABLE
These privileges should be granted only when justified.
4. Role Management
Review roles:
SELECT grantee, granted_role FROM dba_role_privs ORDER BY grantee;
Pay special attention to:
- DBA
- EXP_FULL_DATABASE
- IMP_FULL_DATABASE
- DATAPUMP_EXP_FULL_DATABASE
- DATAPUMP_IMP_FULL_DATABASE
5. Public Privilege Review
The PUBLIC role affects every database user.
Review:
SELECT owner, table_name, privilege FROM dba_tab_privs WHERE grantee='PUBLIC';
Examples requiring attention:
EXECUTE ON UTL_HTTP EXECUTE ON UTL_SMTP EXECUTE ON UTL_TCP
These packages can provide external communication capabilities.
6. Audit Configuration
Auditing must provide evidence of security activity.
Verify Unified Auditing:
SELECT parameter, value FROM v$option WHERE parameter='Unified Auditing';
Review policies:
SELECT policy_name, enabled_option FROM audit_unified_enabled_policies;
Recommended audit areas:
- Logon activity.
- Failed authentication.
- Privilege changes.
- User creation.
- Role changes.
- Database configuration changes.
7. Encryption Controls
Encryption should protect sensitive information both at rest and during transmission.
Verify TDE
SELECT wallet_type, status FROM v$encryption_wallet;
Expected:
OPEN
Verify Encrypted Tablespaces
SELECT ts# , encryptionalg FROM v$encrypted_tablespaces;
Verify Network Encryption
Covered previously in Part 3.
Validate:
- AES encryption.
- SHA integrity checking.
- TLS where required.
8. Database Link Security
Database links are trust relationships.
Review:
SELECT owner, db_link, username, host FROM dba_db_links;
Security requirements:
✓ No unnecessary PUBLIC links
✓ No SYS connections
✓ Dedicated service accounts
✓ Encrypted communication
9. Data Pump Security Controls
Review Data Pump privileges:
SELECT grantee, granted_role FROM dba_role_privs WHERE granted_role LIKE 'DATAPUMP%';
Ensure:
- Export files are encrypted.
- Directory permissions are restricted.
- Old dumps are removed.
10. Scheduler Security
Review external jobs:
SELECT owner, job_name, credential_name FROM dba_scheduler_jobs WHERE credential_name IS NOT NULL;
Validate:
- Operating system accounts.
- Job ownership.
- Execution privileges.
11. Patch Compliance
Security controls are incomplete without current patching.
Review:
SELECT patch_id, description, status FROM dba_registry_sqlpatch;
Maintain:
- Current Release Update.
- Documented patch process.
- Testing procedure.
Building a Compliance Scorecard
A practical benchmark report could look like:
| Control | Result |
|---|---|
| Default Accounts Secured | PASS |
| Password Policy | PASS |
| Excessive Privileges | WARNING |
| Unified Auditing | PASS |
| TDE Encryption | PASS |
| Network Encryption | PASS |
| Database Links | WARNING |
| Data Pump Security | PASS |
| Patch Level | FAIL |
Automating Compliance Checks
The controls from previous parts can be converted into automated tests.
Example structure:
oracle19c-security/ | ├── authentication.sql ├── privileges.sql ├── auditing.sql ├── encryption.sql ├── database_links.sql ├── scheduler.sql ├── datapump.sql ├── patching.sql | └── security_report.sql
The final report can generate:
- HTML output.
- CSV export.
- Security score.
- Remediation recommendations.
Common Findings During Audits
Finding 1: Too Many DBA Users
Example:
Application_User DBA Developer_User DBA Reporting_User DBA
Recommendation:
Remove unnecessary DBA privileges.
Finding 2: No Password Expiration
Example:
PASSWORD_LIFE_TIME UNLIMITED
Recommendation:
Apply controlled password policies.
Finding 3: Missing Patch Updates
Example:
Database Release Update: 19.12 Required: 19.25+
Recommendation:
Implement quarterly patch cycles.
Finding 4: Unencrypted Sensitive Data
Example:
Customer tablespaces: NOT ENCRYPTED
Recommendation:
Enable TDE after impact analysis.
Security Checklist
Before completing a benchmark review:
✓ User accounts reviewed
✓ Default accounts secured
✓ Password policies enforced
✓ Privileges minimized
✓ PUBLIC grants reviewed
✓ Auditing enabled
✓ Encryption validated
✓ DB Links reviewed
✓ Scheduler reviewed
✓ Data Pump secured
✓ Patch level verified
Conclusion
A security benchmark transforms Oracle security from a collection of recommendations into a measurable process.
The goal is not to achieve a perfect score by disabling everything. The goal is to create a secure, documented, and controlled database environment that supports business requirements.
A mature Oracle security program continuously asks:
“Is this configuration still justified?”
That question is at the heart of database security.


