我是管理新手,并试图提高Oracle数据库的安全性。
目前,非特权用户可以通过在数据库导航树中展开“其他用户”图标来查看SQL Developer中所有其他用户的列表。
如何限制权限,以便用户只能看到已授予他们某个对象特权的那些(其他)用户(而不是所有用户,无论是否已授予特权)。
感谢。
答案 0 :(得分:3)
你可能不能(至少不合理)。像SQL Developer这样的工具将查询ALL_USERS
以获取用户列表,并将向数据库中的所有用户显示能够登录的任何用户。对于A来说,确实存在安全风险如果A看不到关于B的任何其他内容,那么用户B是否存在?
虽然我强烈建议不要这样做,但您可以通过在非特权用户的架构中创建ALL_USERS
视图(或创建不同架构中的视图的私有同义词)来解决此问题。与ALL_USERS
相同的结构,但数据较少。由于大多数工具不限定数据字典表SYS.ALL_USERS
的名称而不仅仅是ALL_USERS
,因此这种技巧通常有效。但是存在很大的风险。当某些安装脚本期望数据字典“正常”时,不可避免地会出现意想不到的缺点,最终有人会使用完全限定数据字典表名称的工具等。
答案 1 :(得分:1)
可能是SQL Developer查询表(或我不记得的视图)all_users
。所以你需要撤销这个授权(如sysdba):
revoke select on ALL_USERS from PUBLIC;
并将此权限授予您要允许选择的用户。
编辑:
我同意@Justin Cave的回答。这有风险,而且他带来了一个很好的问题:
如果A知道用户B存在,那确实存在安全风险吗? 什么也看不到B?
答案 2 :(得分:0)
根据你的问题: 如果A无法看到关于B的任何其他内容,A是否真的存在安全风险?
我认为是的,如果用户A(非特权)知道B的存在,它可能会尝试连接(暴力)和: 选项a:成功,B是特权用户 选项b:A失败,因为B有一个强密码,并且在用户B上有一些配置文件限制,在从A连接到B的几个意图之后,用户B被锁定,这可能是拒绝服务的问题。
答案 3 :(得分:0)
具有系统角色“ AUTHENTICATEDUSER”和“ CONNECT”的没有系统特权的用户将能够正常登录并访问自己的对象,但是将无法选择其他用户或在SQL Developer中展开“ Other Users”