Ограничение доступа пользователя только к своим таблицам в Oracle SQL Developer

Я запутался в разрешении, привилегиях в SQL Oracle Developer. Созданный пользователь может получить доступ ко всем таблицам схемы / пользователя. Я хочу ограничить доступ конкретного пользователя в базе данных (ALTER, DROP, UPDATE и т. Д.) Только к своим собственным таблицам. Может кто-нибудь укажет мне, как выполнить эту задачу.

Я имею в виду, какие привилегии следует выбирать из системных привилегий, чтобы пользователь имел доступ только к своим собственным таблицам. Спасибо

1 ответ

As long as you do not explicitly grant a permission, the user won't have it. Just let's use a little excursus:

CREATE USER dummy IDENTIFIED BY password;

Now that user exist -- but cannot even logon to the database. He's got no permissions yet. Only after

GRANT CREATE SESSION TO dummy;

that user can logon -- but no more. To be able to do things within his own schema, one usually grants things like

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

Now he an do things -- but only in his own schema. He can also insert, update, delete -- but still is restricted to his own objects. To tamper (or even just see) other users data, the other user must explicitly grant this:

GRANT SELECT ON some_table TO dummy;

or the DBA grants him global permissions:

GRANT SELECT ANY TABLE TO dummy;

So you will have to check what permissions the user has. As there are many possible permissions, my answer might get too long -- but especially watch out for permissions including the ANY ключевое слово (как в моем последнем примере). Также проверьте возможные роли, предоставленные этому пользователю, которые могут включать такие разрешения. Зайдя в систему как sysdba, вы можете проверить их, например, с помощью следующего запроса:

SELECT granted_role
  FROM dba_role_privs
 WHERE grantee='DUMMY';

(обратите внимание на имя пользователя UPPERCASE здесь - именно так Oracle хранит их внутри, и оно чувствительно к регистру). Для первых упомянутых (прямых) привилегий это будет:

SELECT privilege
  FROM dba_sys_privs
 WHERE grantee='DUMMY';

Как только вы выяснили привилегии / роли, предоставленные этому особому пользователю, которого он не должен иметь, вы можете отобрать их у него, например:

REVOKE SELECT ANY TABLE FROM dummy;
Другие вопросы по тегам