视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle用户访问权限与PUBLIC角色的关系
2020-11-09 11:28:28 责编:小采
文档


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

下载本文
显示全文
专题