Ограничение доступа пользователя только к своим таблицам в 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;