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

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

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

19
задан Hennes
15.01.2023 19:29 Количество просмотров материала 3507
Распечатать страницу

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 хранит их внутри, и это is регистр). Для первых упомянутых (прямых) привилегий это будет:

SELECT privilege
  FROM dba_sys_privs
 WHERE grantee='DUMMY';

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

REVOKE SELECT ANY TABLE FROM dummy;
4
отвечен Izzy 2023-01-17 03:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх