En bruger i en Oracle-database har kun de privilegier, du giver. Så du kan oprette en skrivebeskyttet bruger ved simpelthen ikke at give andre privilegier.
Når du opretter en bruger
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
brugeren har ikke engang tilladelse til at logge på databasen. Det kan du give
GRANT CREATE SESSION to ro_user
og så kan du gå om at give de læseprivilegier, du vil. For eksempel, hvis du vil have RO_USER
for at kunne forespørge SCHEMA_NAME.TABLE_NAME
, ville du gøre noget lignende
GRANT SELECT ON schema_name.table_name TO ro_user
Generelt er det dog bedre at oprette en rolle og tildele objektprivilegier til rollen, så du derefter kan tildele rollen til forskellige brugere. Noget lignende
Opret rollen
CREATE ROLE ro_role;
Giv rollen SELECT-adgang til hver tabel i et bestemt skema
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;
Og tildel derefter rollen til brugeren
GRANT ro_role TO ro_user;