Een gebruiker in een Oracle-database heeft alleen de rechten die u toekent. U kunt dus een alleen-lezen gebruiker maken door simpelweg geen andere rechten toe te kennen.
Wanneer u een gebruiker aanmaakt
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
de gebruiker heeft niet eens toestemming om in te loggen op de database. U kunt dat toestaan
GRANT CREATE SESSION to ro_user
en dan kunt u alle leesrechten verlenen die u maar wilt. Als u bijvoorbeeld RO_USER
. wilt om SCHEMA_NAME.TABLE_NAME
te kunnen opvragen , zou je zoiets doen als
GRANT SELECT ON schema_name.table_name TO ro_user
Over het algemeen kunt u echter beter een rol maken en de objectrechten aan de rol toekennen, zodat u de rol vervolgens aan verschillende gebruikers kunt toekennen. Iets als
Maak de rol
CREATE ROLE ro_role;
Verleen de rol SELECT toegang tot elke tafel in een bepaald schema
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;
En dan de rol toekennen aan de gebruiker
GRANT ro_role TO ro_user;