限制用户只能访问 Oracle SQL Developer 中自己的表

限制用户只能访问 Oracle SQL Developer 中自己的表

我对 SQL Oracle Developer 中的权限和特权感到困惑。创建的用户可以访问所有架构/用户的表。我想限制数据库中的特定用户只能访问(ALTER、DROP、UPDATE 等)他自己的表。有人可以告诉我如何执行此任务吗?

我的意思是从系统权限中选择哪些权限才能让用户仅访问自己的表。谢谢

答案1

只要您没有明确授予权限,用户就不会拥有该权限。让我们来举个小例子:

CREATE USER dummy IDENTIFIED BY password;

现在该用户存在——但甚至无法登录数据库。他还没有权限。只有在

GRANT CREATE SESSION TO dummy;

该用户可以登录——但不能再登录了。为了能够在自己的架构中执行操作,通常需要授予以下权限

GRANT CREATE TABLE, CREATE VIEW, ALTER TABLE, DROP TABLE TO dummy;

现在他可以做事了——但只能在自己的架构中。他还可以插入、更新、删除——但仍然仅限于自己的对象。要篡改(甚至只是查看)其他用户的数据,其他用户必须明确授予以下权限:

GRANT SELECT ON some_table TO dummy;

或者DBA授予他全局权限:

GRANT SELECT ANY TABLE TO dummy;

因此,您必须检查用户拥有哪些权限。由于可能存在许多权限,我的答案可能会太长——但请特别注意包含关键字的权限ANY(如我上一个示例所示)。还要检查授予该用户的可能角色,其中可能包括此类权限。以 sysdba 身份登录后,您可以使用以下查询检查它们:

SELECT granted_role
  FROM dba_role_privs
 WHERE grantee='DUMMY';

(请注意这里的用户名是大写的 - 这是 Oracle 内部存储用户名的方式,并且它区分大小写)。 对于第一个提到的(直接)权限,这将是:

SELECT privilege
  FROM dba_sys_privs
 WHERE grantee='DUMMY';

一旦你弄清楚了授予该特殊用户的权限/角色,他应该不是有了,你可以把它们从他那里拿走,例如:

REVOKE SELECT ANY TABLE FROM dummy;

相关内容