Пользователь в базе данных 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;