Database teams should treat PUBLIC as a universal default, not as a normal access-control bucket. Granting privileges to PUBLIC makes them available to every current and future user, which can quietly expand access beyond intent. The safer pattern is to assign privileges to named roles, keep grants local where possible, and review any default permissions before patching or upgrading.
What the Oracle PUBLIC role really does in a database
PUBLIC is not a role in the normal “group of users” sense. It is a built-in default target that every database user inherits, so any privilege granted there becomes effectively universal. That makes it useful for truly low-risk defaults, but dangerous for object access, execution rights, and anything that should be limited by business function or environment.
The important distinction is that PUBLIC changes the audience of a grant, not the mechanism of the grant. If you place a privilege there, you are no longer deciding who should have it later; you are deciding that everyone, including future accounts, should have it now. That is why PUBLIC should be treated as a special exception path, not as a routine access-control bucket.
A practical way to think about it is that PUBLIC is closest to a database-wide baseline, while named roles are where deliberate access design belongs. The more the privilege influences data exposure, code execution, administrative capability, or cross-schema visibility, the less suitable it is for PUBLIC. In contrast, truly harmless conveniences sometimes belong there because they do not create meaningful privilege expansion.
Where excessive privilege risk appears
The risk begins when a broad grant looks harmless in isolation but later becomes an unintended default for every session and every account. That is especially problematic for database features that affect metadata visibility, object execution, package usage, or read access to shared objects. A single overlooked grant can quietly widen access across many applications and users.
For this reason, teams should assume any PUBLIC grant has a large blast radius unless they can prove otherwise. A useful comparison is how tightly controlled access should be handled in broader privilege-management practice, including Privileged Access Management Guide and Just-in-Time Access and Zero Standing Privilege Guide, both of which reinforce the same underlying lesson: standing access should be narrow, intentional, and reviewable.
Operationally, the biggest failure mode is inheritance drift. Database teams patch, upgrade, add schemas, or onboard tools, and the original PUBLIC grant remains in place because it feels like “default plumbing.” Over time, the combination of convenience and silence creates privilege creep that is hard to notice until audit, incident response, or access review surfaces it.
How to use PUBLIC safely in day-to-day administration
The safest pattern is to reserve PUBLIC for only those grants that are genuinely universal and low impact, then move everything else into named roles with documented ownership. That keeps access decisions visible and lets teams revoke or reassign privileges without changing the entire user population. It also makes reviews more meaningful because each role has a clear business purpose.
Database teams should also review PUBLIC before and after patching or upgrading, because default permissions can change as packages, procedures, or bundled features are introduced. Where a vendor or platform requires a default grant, validate whether the privilege is still needed, whether it can be restricted to a smaller role, and whether the privilege is being used by actual workloads. If you cannot explain the business need in one sentence, it probably does not belong in PUBLIC.
For teams operating in shared or cloud database environments, the broader pattern is the same as in the Cloud PAM and CIEM Guide and the Service Account Security Guide: effective permissions, not theoretical convenience, should drive the access model. PUBLIC should be tested against actual use, not assumed safe because it is built in.
Risk and Threat Considerations
PUBLIC becomes risky when teams confuse “default” with “acceptable.” A broad grant can expose data, procedures, or functionality to every account in the database, including accounts created later by automation, integrations, or emergency recovery processes. That can create unintended read, execute, or privilege-escalation paths even when no single user was intentionally overprovisioned.
Failure mechanism: A privilege granted to PUBLIC is inherited universally, so one misplaced grant can become persistent access for all present and future users until it is explicitly removed.
Impact: The resulting blast radius can include broader data exposure, unauthorized execution paths, and hard-to-detect privilege creep that survives normal user lifecycle changes.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
NIST SP 800-53 Rev 5 and CIS Controls v8 set the technical controls, while ISO/IEC 27001:2022 defines the regulatory obligations.
| Framework | Control / Reference | Relevance |
|---|---|---|
| NIST SP 800-53 Rev 5 | AC-6 — Least Privilege | PUBLIC grants can overextend access beyond intended users. |
| AC-3 — Access Enforcement | PUBLIC changes who receives access enforcement across all users. | |
| Recommendation — Limit database privileges to the minimum necessary and avoid universal grants. Enforce object access through named roles instead of universal defaults. | ||
| ISO/IEC 27001:2022 | A.5.15 — Access control | PUBLIC role use is an access-control design decision needing governance. |
| A.8.2 — Privileged access rights | PUBLIC grants can function like standing privileged access in databases. | |
| Recommendation — Define and review access rules so default grants do not create broad access. Restrict and review privileged database grants, especially default ones. | ||
| CIS Controls v8 | CIS-6 — Access Control Management | Database PUBLIC grants are an access management issue requiring review. |
| Recommendation — Review and remove unnecessary default database privileges. | ||
Practitioner Guidance
What to prioritise: Audit PUBLIC grants first for privileges that expose data, enable execution, or cross application boundaries. These are the grants that most often create hidden expansion risk.
What to verify: Confirm whether each PUBLIC grant is required for every user, not just for a current application owner. If the answer depends on a subset of accounts, move the privilege into a named role.
Common mistake: Leaving inherited defaults untouched after upgrades or vendor installs because they are “standard.” Standard is not the same as safe, and database defaults frequently outlive their original justification.
Practitioner takeaway: Treat PUBLIC as a narrowly tolerated exception, not a convenience layer, and prefer named roles whenever the privilege has any meaningful security consequence.
Related resources from NHI Mgmt Group
- How should security teams automate database access without creating new privilege creep?
- How should iGaming teams use predictive fraud scoring without creating excessive customer friction?
- How should security teams use AI without creating more identity risk?
- How should teams use AI role mining without creating new role sprawl?