ITPub博客

首页 > 应用开发 > IT综合 > 关于PUBLIC

关于PUBLIC

原创 IT综合 作者:litterbaby 时间:2007-05-29 19:45:50 0 删除 编辑
关于PUBLIC[@more@]

关于PUBLIC

总结:康标

email:kang_biao@hotmail.com

http://www.oracle.com.cn/thread-119327-1-1.html

public是一个特殊的角色,但是在角色的视图上是没有办法查询到的:

SQL> select * from dba_roles where role='PUBLIC';

ROLE PASSWORD_REQUIRED

------------------------------ -----------------

SQL>

public应该是oracle预定义的,在sql.bsp文件中找到这个的由来:

create user sys identified by "D_SYSPW"

/

create role public

/

create role connect

/

grant create session to connect

/

这里可以看到这个角色是在sys用户之后建立的。在查询user$表的时候,也是证实了这一点。

USER# NAME TYPE#

---------- ------------------------------ ----------

0 SYS 1

1 PUBLIC 0

2 CONNECT 0

3 RESOURCE 0

4 DBA 0

对于这个PUBLIC,如果将权限赋予PUBLIC就意味这将该权限授予了该数据库的所有用户。

对于能否将PUBLIC撤销哪?让我们先看看在PUBLIC中有那些东西:

SQL> select count(*) from dba_tab_privs where grantee='PUBLIC';

COUNT(*)

----------

19962

SQL> select table_name from dba_tab_privs a where a.grantee='PUBLIC' and rownum < 5;

TABLE_NAME

------------------------------

DUAL

SYSTEM_PRIVILEGE_MAP

TABLE_PRIVILEGE_MAP

STMT_AUDIT_OPTION_MAP

SQL>

可以看到这里面有很多表的权限,有1900之多。这些是作为一个用户所必备的权限。例如有很多视图,数据字典等等都是需要这个PUBLIC来进行授权。如果没有这些权限,就是你有了CONNECT权限,你还是无法登陆到数据中。所以这PUBLIC不能被删除。

其实你也删除不了PUBLIC。

SQL> show user

User is "SYS"

SQL> drop role public;

drop role public

ORA-01935: 缺失用户或角色名

SQL> revoke public from a;

revoke public from a

ORA-01951: ROLE 'PUBLIC' 未授予 'A'

而系统权限在PUBLIC中是没有的。

SQL> select count(*) from dba_sys_privs a where a.grantee='PUBLIC';

COUNT(*)

----------

0

所以以上的问题,需要将你不赋予的表的权限从PUBLIC上删除,可以另外建立一个role进行。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/222350/viewspace-916725/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: DISKRATIO的含义
请登录后发表评论 登录
全部评论
  • 博文量
    131
  • 访问量
    465727