public不是角色,你可以理解為所有資料庫使用者的集合。
如果某個許可權賦於了public,那麼所以資料庫的使用者都可以有這個許可權(當然有些使用者可能連connect的許可權都可以沒有)。
比如把一個對象t1給所有使用者有select 許可權
grant select on user1.t1 to public;
grant plusttrace to public
create public synonym t1 for t1;
那麼所有的public使用者都可以訪問該表t1
再比如說
grant dba to public;
那麼所有的使用者都有dba許可權了
看下面的例子
bash-2.05a$ sqlplus "/as sysdbA"
SQL*Plus: Release 9.2.0.4.0 - Production on Tue Jan 18 12:08:50 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning and Real Application Clusters options
JServer Release 9.2.0.4.0 - Production
SQL>
SQL> grant dba to public;
授權成功。
SQL> create user fang identified by fang default tablespace users;
使用者已建立
SQL> conn fang/fang
已串連。
SQL> create table t1 (a int);
表已建立。
SQL> conn /as sysdba
已串連。
SQL> revoke dba from public;
撤銷成功。
SQL> conn fang/fang
ERROR:
ORA-01045: user FANG lacks CREATE SESSION privilege; logon denied