Un utente in un database Oracle dispone solo dei privilegi concessi dall'utente. Quindi puoi creare un utente di sola lettura semplicemente non concedendo altri privilegi.
Quando crei un utente
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
l'utente non ha nemmeno l'autorizzazione per accedere al database. Puoi concederlo
GRANT CREATE SESSION to ro_user
e poi puoi continuare a concedere tutti i privilegi di lettura che desideri. Ad esempio, se vuoi RO_USER
per poter interrogare SCHEMA_NAME.TABLE_NAME
, faresti qualcosa come
GRANT SELECT ON schema_name.table_name TO ro_user
In genere, tuttavia, è meglio creare un ruolo e concedere i privilegi dell'oggetto al ruolo in modo da poter concedere il ruolo a utenti diversi. Qualcosa come
Crea il ruolo
CREATE ROLE ro_role;
Concedi al ruolo SELECT l'accesso su ogni tabella in uno schema particolare
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;
E poi concedi il ruolo all'utente
GRANT ro_role TO ro_user;