user1578653 Asked: 2013-05-08 07:05:07 +0800 CST2013-05-08 07:05:07 +0800 CST 2013-05-08 07:05:07 +0800 CST Oracle 10XE:停止查看 all_users 表的模式? 772 我有一个 Oracle 10g XE 数据库,我希望客户能够通过 SQL*PLUS 或 SQL Developer 远程查看它。每个模式都有一个包含客户端名称的名称,因此查看 all_users 表的任何人都可以看到我所有其他客户端的名称!有没有办法限制某些表的权限?还有其他类似这样的表可以限制访问吗?我并不特别担心我们的客户试图破解东西,我只是不希望他们看到我们所有其他客户的列表! 谢谢! oracle oracle-xe 2 个回答 Voted Best Answer Philᵀᴹ 2013-05-08T07:30:34+08:002013-05-08T07:30:34+08:00 您有一些选择,其中一些会使 Oracle 无法支持您的数据库(如果您关心的话!),因为您需要摆弄 SYS 拥有的对象。 第一个选项是撤销所有人的选择权限: revoke select on all_users from public; 然后将其授予某些用户以及所有其他内部 Oracle 用户。 第二个选项是查看视图的源,删除它,然后重新创建一个支持您需要的更改版本。 另一个欺骗临时用户的选项是在每个模式中创建一个名为 ALL_USERS 的表。除非登录人员明确限定 ALL_USERS(即:SYS.ALL_USERS),否则他们将从自己模式中的表中获取结果集。这个技巧也可以通过指向一个视图的同义词来完成: select * from all_users where username = (SELECT sys_context('USERENV', 'SESSION_USER') from DUAL); 恐怕您对 XE 无能为力。 Leigh Riffel 2013-05-08T09:24:35+08:002013-05-08T09:24:35+08:00 在您的情况下,另一种选择是将每个用户放在单独的 XE 数据库中。每个数据库都可以使用指向另一个数据库的数据库链接来获取公共数据或所有数据。虽然这将满足要求并且可能更安全,但构建和维护会更加复杂。
您有一些选择,其中一些会使 Oracle 无法支持您的数据库(如果您关心的话!),因为您需要摆弄 SYS 拥有的对象。
第一个选项是撤销所有人的选择权限:
然后将其授予某些用户以及所有其他内部 Oracle 用户。
第二个选项是查看视图的源,删除它,然后重新创建一个支持您需要的更改版本。
另一个欺骗临时用户的选项是在每个模式中创建一个名为 ALL_USERS 的表。除非登录人员明确限定 ALL_USERS(即:SYS.ALL_USERS),否则他们将从自己模式中的表中获取结果集。这个技巧也可以通过指向一个视图的同义词来完成:
恐怕您对 XE 无能为力。
在您的情况下,另一种选择是将每个用户放在单独的 XE 数据库中。每个数据库都可以使用指向另一个数据库的数据库链接来获取公共数据或所有数据。虽然这将满足要求并且可能更安全,但构建和维护会更加复杂。