Un utilisateur dans une base de données Oracle ne dispose que des privilèges que vous accordez. Vous pouvez donc créer un utilisateur en lecture seule en n'accordant tout simplement aucun autre privilège.
Lorsque vous créez un utilisateur
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
l'utilisateur n'a même pas l'autorisation de se connecter à la base de données. Vous pouvez l'accorder
GRANT CREATE SESSION to ro_user
et ensuite vous pouvez accorder les privilèges de lecture que vous voulez. Par exemple, si vous voulez RO_USER
pour pouvoir interroger SCHEMA_NAME.TABLE_NAME
, vous feriez quelque chose comme
GRANT SELECT ON schema_name.table_name TO ro_user
Cependant, il est généralement préférable de créer un rôle et d'accorder les privilèges d'objet au rôle afin de pouvoir ensuite accorder le rôle à différents utilisateurs. Quelque chose comme
Créer le rôle
CREATE ROLE ro_role;
Accorder au rôle SELECT l'accès à chaque table d'un schéma particulier
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;
Et puis accordez le rôle à l'utilisateur
GRANT ro_role TO ro_user;