Oracle - Как создать пользователя только для чтения - PullRequest
23 голосов
/ 21 сентября 2011

Возможно ли создать пользователя базы данных только для чтения в базе данных Oracle?Как?

Ответы [ 5 ]

45 голосов
/ 21 сентября 2011

Пользователь в базе данных Oracle имеет только те привилегии, которые вы предоставляете. Таким образом, вы можете создать пользователя только для чтения, просто не предоставляя никаких других привилегий.

При создании пользователя

CREATE USER ro_user
 IDENTIFIED BY ro_user
 DEFAULT TABLESPACE users
 TEMPORARY TABLESPACE temp;

пользователь даже не имеет разрешения для входа в базу данных. Вы можете предоставить это

GRANT CREATE SESSION to ro_user

и тогда вы можете предоставлять любые права на чтение, какие пожелаете. Например, если вы хотите, чтобы RO_USER мог запрашивать SCHEMA_NAME.TABLE_NAME, вы должны сделать что-то вроде

GRANT SELECT ON schema_name.table_name TO ro_user

Как правило, вам лучше создать роль и предоставить ей права доступа к объектам, чтобы вы могли затем предоставить эту роль другим пользователям. Что-то вроде

Создать роль

CREATE ROLE ro_role;

Предоставить роль SELECT-доступ для каждой таблицы в определенной схеме

BEGIN
  FOR x IN (SELECT * FROM dba_tables WHERE owner='SCHEMA_NAME')
  LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON schema_name.' || x.table_name || 
                                  ' TO ro_role';
  END LOOP;
END;

А затем предоставьте роль пользователю

GRANT ro_role TO ro_user;
14 голосов
/ 07 августа 2013
create user ro_role identified by ro_role;
grant create session, select any table, select any dictionary to ro_role;
1 голос
/ 22 июля 2017

Выполните следующую процедуру, например, в качестве пользовательской системы.

Установите p_owner для владельца схемы и p_readonly для имени пользователя только для чтения.

0 голосов
/ 28 ноября 2017

вы можете создать пользователя и предоставить привилегию

создать пользователя read_only, идентифицированного read_only;предоставить сеанс создания, выбрать любую таблицу для чтения только;

0 голосов
/ 22 апреля 2014

Это не возможно в db по умолчанию из-за большого количества публичных исполнений, которые каждый пользователь получает автоматически через публичные.

...