我对 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;