• 技术文章 >数据库 >mysql教程

    Oracle用户访问权限与PUBLIC角色的关系

    2016-06-07 17:14:09原创686

    Oracle用户访问权限与PUBLIC角色的关系,在数据库中创建了一个用户,这是给第三方系统用的。客户强调,这个用户只能访问到有限的

    在数据库中创建了一个用户,,这是给第三方系统用的。客户强调,这个用户只能访问到有限的表,在我们规定的范围内的表。

    于是,我创建 一个用户,如user_third ,只给了connect 角色,用grant select on table 有限授权。

    为此,我写了一文,请见 如何实现 Oracle中用户 B只能访问用户 A的视图 ( )

    用户访问密码交给客户后,又发现一个新问题,它居然能访问其他用户的表。

    我核实了一下,发现它确实能访问别的用户的表。如数据 库中TT 用户下的表。

    这是怎么回事?

    您从我列出的标题中,一定猜到了吧。这事一定 public 角色有关。

    在 Oracle TimeTen 创建时,它创建的表会自动将它的查询权限授予给 public 角色。

    而数据库中任何一个用户都默认拥有 public 角色。

    因此,问题就在 public 角色的权限上。我们只需要查询 public 角色授予了哪些权限,再撤销这些权限即可。

    通过执行下列 SQL ,我们能判断出哪些权限授予给了 public 角色。

    SELECT GRANTOR,OWNER,TABLE_NAME,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC';

    部分结果如下:

    GRANTOR OWNER TABLE_NAME PRIVILEGE

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

    ××   GTJA TT_03_24577_L UPDATE

    GTJA GTJA TT_03_24577_L SELECT

    GTJA GTJA TT_03_24577_L INSERT

    GTJA GTJA TT_03_24577_L DELETE

    TT 表的查询更新删除插入权限都授予给了public 角色。这个很恐怖,对数据库系统的安全是有破坏的。

    基于此,我们可以判定任何一个数据库用户都可以对这些表做查询更新删除插入操作。

    怎么解决这个权限问题,是很简单的。但一定要保证不能影响到TT 的正常使用。这是个权衡的问题,可用性和安全两个角度的权衡。如果TT 不正常了,就考虑将其迁移到其他库上去,最好是独立的仅供TT 使用的库。

    具体解决方法如下:

    1 、从Oracle TimeTen 上解决,在创建cachegroup 时,将授予公共权限的选项除掉。当然这么做的前提是要保证TT 能够正常使用。

    2 、从数据库中将这些权限从public 角色撤销。同样前提是TT 在这些权限撤销后能正常工作。

    撤销方法示例如下:

    revoke select on TT_03_24577_L from public;

    总结一下,这个实例说明了Oracle 的权限真够复杂的,日常管理时一定要留意一下public 角色的权限。

    更多Oracle相关信息见Oracle 专题页面 ?tid=12

    linux

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:如何查找Oracle用户与其在操作系统上的进程关系 下一篇:Sybase ASE数据误删除之后的恢复处理
    大前端线上培训班

    相关文章推荐

    • 一文讲解Mysql怎么根据ID值的顺序返回结果• 全面讲解MySQL8.0 For Windows的安装方法• MySQL中什么是索引?索引存储模型浅析• 分析MySQL用户中的百分号%是否包含localhost?• 聊聊mysql的cmake方式

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网