ITPub博客

首页 > Linux操作系统 > Linux操作系统 > GRANT SELECT ANY TABLE TO PUBLIC的问题

GRANT SELECT ANY TABLE TO PUBLIC的问题

原创 Linux操作系统 作者:zjfstudio 时间:2010-09-10 23:00:18 0 删除 编辑
今天检查数据库发现一个问题,一个用户仅有connect权限,居然可以查询所有的用户表。
查询视图:
DBA_SYS_PRIVS
DBA_TAB_PRIVS
DBA_ROLE_PRIVS
SQL> set linesize 1000
SQL> set pagesize 0 
SQL> select * from DBA_TAB_PRIVS where grantee='READONLY_NN';
no rows selected
SQL> select * from DBA_SYS_PRIVS where grantee='READONLY_NN';
no rows selected
SQL> select * from DBA_ROLE_PRIVS where grantee='READONLY_NN';
GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
READONLY_NN                    CONNECT                        NO  YES
 
 
READONLY_NN 仅有CONNECT角色权限,开始怀疑CONNECT角色被人赋予了SELECT ANY TABLE权限:

SQL> select * from DBA_SYS_PRIVS where grantee='CONNECT';
GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CONNECT                        CREATE SESSION                           NO
 
失望。
做个测试,建一个用户TEST_AAA,仅赋与CONNECT权限,同样也可以SELECT ANY TABLE.
不的其解.
 
想起有个SCHEMA名称PUBLIC,该SCHEMA可以理解为所有用户的集合。如果某个权限赋予PUBLIC,则所有用户均有该权限。
查询:
SQL> select * from DBA_SYS_PRIVS where grantee='PUBLIC';
GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
PUBLIC                         SELECT ANY TABLE                         NO
 
估计是开发商,上线时,图方便加上的。
解决办法就是:
SQL>revoke select any table from public;
使用revoke select any table from public 用户会造成数据库中所有的procedure、package、function失效。
在生产库使用要非常谨慎,建议在可停机条件下回收。$ORACLE_HOME/rdbms/admin/utlrp.sql编译失效对象。
该库为生产库,安全第一,暂不回收。
 
后面查询相关资料才知道,有一个视图:
SQL>select * from session_privs;
可以查看当前会话的权限。
 
 
 

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

请登录后发表评论 登录
全部评论

注册时间:2010-09-03

  • 博文量
    4
  • 访问量
    17188