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