Oracle FAQ Your Portal to the Oracle Knowledge Grid

Home -> Community -> Usenet -> c.d.o.misc -> Re: user "PUBLIC" not in All_USERS

Re: user "PUBLIC" not in All_USERS

From: Mark D Powell <>
Date: 16 Jul 2004 05:51:33 -0700
Message-ID: <>

Daniel Morgan <> wrote in message news:<1089944500.886043_at_yasure>...
> Praveen wrote:
> > Hi..All,
> >
> > I have a quick question. Why am I not able to see the user "PUBLIC"
> > in ALL_USERS table.
> >
> > Regards,
> >
> > P
> >
> Because public is not a user it is a role.
> Daniel Morgan

I recently read a series of emails on the nature of PUBLIC. While Oracle may encode the base table entry with the role flag technically the definition of a role (from the 9.2 Master Glossary) is "A named group of related privileges. You can grant a role to users or other roles."

Roles are collections of privileges and do not own objects. A schema on the other hand does own objects and can receive grants. "Collection of database objects, including logical structures such as tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links. A schema has the name of the user who controls it."

According to the authors of this series (Oracle employees) PUBLIC is a schema, plan and simple.

I think based on the internal coding PUBLIC is really a hybrid: it is a an object owning user, schema, that has been encoded as a role to allow granting of reference to PUBLIC's objects but still not grant automatic privilege to the referenced objects. Most of PUBLIC's objects are public synonyms which in turn refer to objects owned by other users. All users gain access to the reference but not to the underlying object without additional privileges. PUBLIC may or may not supply those additional privileges which is where the role attribute comes into play.

PUBLIC is a pretty neat trick and is probably a good topic for a class room debate.

HTH -- Mark D Powell -- Received on Fri Jul 16 2004 - 07:51:33 CDT

Original text of this message