Un usuario en una base de datos de Oracle solo tiene los privilegios que usted otorga. De modo que puede crear un usuario de solo lectura simplemente sin otorgar ningún otro privilegio.
Cuando creas un usuario
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
el usuario ni siquiera tiene permiso para iniciar sesión en la base de datos. Puedes conceder eso
GRANT CREATE SESSION to ro_user
y luego puede otorgar los privilegios de lectura que desee. Por ejemplo, si desea RO_USER
para poder consultar SCHEMA_NAME.TABLE_NAME
, harías algo como
GRANT SELECT ON schema_name.table_name TO ro_user
Sin embargo, generalmente es mejor crear un rol y otorgar privilegios de objeto al rol para que luego pueda otorgar el rol a diferentes usuarios. Algo como
Crear el rol
CREATE ROLE ro_role;
Otorgue al rol SELECT acceso en cada tabla en un esquema particular
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;
Y luego otorgue el rol al usuario
GRANT ro_role TO ro_user;