Oracle SQL Developer - 如何限制用户仅查看特定模式

Oracle SQL Developer - 如何限制用户仅查看特定模式

问题描述:

在使用SQL Developer的Oracle DB 11g中,我创建了具有只具有只读权限的关联模式的用户。现在我想限制新用户查看其他用户/模式,除了我选择的一些用户/模式。Oracle SQL Developer - 如何限制用户仅查看特定模式

换句话说,当他们(在SQL Developer中)转到他们自己架构下的“其他用户”文件夹时,我不希望该用户能够看到该数据库上的所有其他用户。我只想让他们看到几个精选的。

如果可能,你怎么做?

Btw ...我知道我可以限制他们无法对其他用户做任何事情(例如创建表,运行查询等)。但是,我想阻止他们查看或查看其他用户在那里。

本质上,你只能在SQL Developer中做什么你可以在数据库中做什么。

正如Alex所说,SQL Developer使用SYS.ALL_USERS中的SELECT来查看系统中的所有用户。这不是一个SQL Developer问题;您的用户(如果他们有权访问SQL * Plus)可以直接对数据库运行select username from sys.all_users并获取相同的信息。

从您的用户删除该信息遵循相同的路径。人们只能从他们被授予SELECT特权的表中进行选择。从目录表和视图(特别是从SYS模式中的ALL_USERS)中选择通常是间接授予:PUBLIC角色有权从这些表中进行SELECT操作,并且在大多数情况下(可能默认情况下取决于您的管理工具)新增用户被授予PUBLIC角色。

根据您的业务需求,您可以从选定用户中撤销PUBLIC角色(然后创建您希望授予他们的权限包,以替换他们以这种方式丢失的权限),或者 - 更彻底地,也许不会您应该做的事情 - 您可以简单地使用revoke select on all_users from public;(以SYSDBA权限或其他足以执行此操作的权限登录)。

编辑 - 我刚刚检查过,不幸的是不能撤销PUBLIC角色;它会自动授予数据库中的所有用户,并且不能更改。这只留下了不适合使用PUBLIC自身拥有的权限的替代方案。 编辑完

我只是测试这一点 - 我登录as sysdba,已撤销论公共SYS.ALL_USERS选择,然后关闭SQL Developer和再启动。果然,我不再能够看到我在我的数据库中创建的任何自定义用户(即,从我为这些用户创建的SQL Developer连接)创建的任何“其他用户”。

+0

优秀。谢谢你的帮助。 – ptownbro

+0

@ptownbro - 请注意我的**编辑** - 不幸的是PUBLIC不能被用户带走;唯一的解决方案是从PUBLIC撤消对SYS.ALL_USERS的SELECT,这可能会对其他用户(以及很可能需要访问该表的进程和应用程序)产生不良影响。 – mathguy

本质上不能。如果你看一下声明日志中SQL Developer作为您展开“其他用户在连接面板部分,你会看到它使用的命令是:它仅获得

select * from (select USERNAME 
FROM SYS.ALL_USERS au 
WHERE au.USERNAME != USER 
); 

一个全新的用户连接权限可以查看从该系统视图中列出的所有用户。

由于该查询符合all_users对象名称和sys模式,因此您甚至不能为给出限制列表的用户创建视图或私用同义词。尽管如此,如果用户愿意,他们当然也可以回避。

SQL Developer允许您在连接窗格中过滤事物。如果您对“其他用户”点击右键并选择“应用过滤器...”,你会看到这样的对话:

apply filter dialog

你可以设置了“匹配任何”和所有的模式你确实想看到,点击绿色加号来添加更多。只有那些用户才会显示在“其他用户”下。当您展开“其他用户”声明日志显示这个修改后的查询,而不是:

select * from (select USERNAME 
FROM SYS.ALL_USERS au 
WHERE au.USERNAME != USER 
) WHERE (UPPER(USERNAME) = (UPPER(:SCHEMA)) OR UPPER(USERNAME) = (UPPER(:SCHEMA0))) 

...它显示了绑定参数是"SCHEMA"="SOUSER1", "SCHEMA0"="SOUSER2"

但你无法控制中心,你将有在每个人的SQL Developer副本上设置它(可能是手动的,尽管你可以看看提供一个配置文件),用户可以很容易地删除或更改过滤器。它影响到客户而不是用户,并且很容易被回避。

+0

Grrr。好。所以,即使我将滤镜应用到我的最后,它也不会显示在他们的最后?这是你的意思,它不能集中控制? – ptownbro

+0

是的,更改客户端上的筛选器或首选项(即PC上的SQL Developer)不会影响其他任何人。如果您可以找到正确的配置文件和与过滤器相关的位,您可以找到一种分配方式,但不容易。 (Oracle确实有VPD ...但我不确定是否可以(或应该)应用于系统视图;可能需要研究以确保...) –

+0

如果您有兴趣 - 这是一个数据库问题,而不是SQL Developer的问题。我在刚刚发布的答案中进一步解释。 – mathguy