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

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

1 ответ1

4

Пока вы явно не предоставите разрешение, у пользователя его не будет. Просто давайте использовать небольшой экскурс:

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;

или администратор БД предоставляет ему глобальные разрешения:

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;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .