A gated, documentation-first laboratory that studies how Oracle APEX and Oracle Deep Data Security (end-user security contexts, data roles and data grants) can enforce least-privilege data access for AI-assisted database applications. Identity federation with an external identity provider is planned for later phases.
- Experiment E1 (Deep Data Security foundation) was executed for the first
time on 2026-10-12 against a disposable local Oracle Database Free 23.26.3.
All access tests and evidence checks passed after two fixes to the
evidence script. Results, observed behavior and limitations are in
lab/e1/RESULTS.md. They come from one run in one environment and are not a general security guarantee. - Next phases: E2 (APEX application with external identity and end-user propagation), E3 (APEX AI agents and tools bound to database permissions), E4 (attack scenarios such as prompt injection, unauthorized access and privileged paths).
- Changes reach
mainonly through reviewed pull requests.
E1 needs a database you can discard. The scripts create the lab principals
DDS_INV_OWNER, DDS_ADMIN, DDS_INV_PARSE, the role DDS_SESSION_ROLE,
the data roles DDS_DR_*, the end users DDS_EU_*, the table
DDS_INV_OWNER.INVOICES and the audit policies DDS_E1_*. They target the
PDB FREEPDB1.
- Copy
lab/e1/*.sqlto a working folder outside the repository and create two local files there (both match*.local.sqland are ignored by Git):e1_conn.local.sqlwith one line:define dds_conn = "//<db-host>:<listener-port>/<pdb-service>"secrets/e1_secrets.local.sqlwith five linesdefine dds_admin_pwd = "...",dds_eu_north_pwd,dds_eu_south_pwd,dds_eu_noaccess_pwd,dds_eu_norole_pwd, each a unique random value made ofE1and 22 letters or digits (the evidence step searches for that pattern).
- With
ORACLE_HOMEandORACLE_SIDpointing at the database home, run the steps in order withsqlplus -L -S <connection> @<script> </dev/null:00to04aand06as"/ as sysdba";04band05ato05dwith/nolog(they connect by themselves). Stop at the first setup step (00to04b) that does not exit with 0.00writese1_target.local.sql, which the later steps need. - Read each test log: every assert prints
PASSorFAILand aSUMMARYline.05dexits with 0 and passes when its log shows ORA-01045. 99_cleanup.sqlremoves only the lab objects. The repository does not run it automatically.
The SQL comments still mention a runner, a runbook and decision records from an earlier plan. That runner was dropped.
- Synthetic data only. The repository never contains production data, credentials, generated secrets, wallets, logs, execution state or details of a specific environment (hostnames, ports, local paths, database identifiers). Local settings are supplied through templates.
- Official Oracle documentation is the primary reference.
- Verified facts, assumptions, hypotheses and open questions are tracked separately and labeled as such.
- Database-enforced security is the subject under study; application-level authorization is documented as a separate layer, not as a substitute.
No license has been selected for this repository yet.
Oracle, Java, MySQL and NetSuite are registered trademarks of Oracle and/or its affiliates. This project is independent and is not affiliated with or endorsed by Oracle.