En användare i en Oracle-databas har bara de privilegier du ger. Så du kan skapa en skrivskyddad användare genom att helt enkelt inte ge några andra privilegier.
När du skapar en användare
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
användaren har inte ens behörighet att logga in i databasen. Du kan bevilja det
GRANT CREATE SESSION to ro_user
och sedan kan du ge dig vilka läsprivilegier du vill. Till exempel, om du vill ha RO_USER
för att kunna fråga SCHEMA_NAME.TABLE_NAME
, skulle du göra något liknande
GRANT SELECT ON schema_name.table_name TO ro_user
Generellt sett är det dock bättre att du skapar en roll och beviljar objektprivilegier till rollen så att du sedan kan bevilja rollen till olika användare. Något liknande
Skapa rollen
CREATE ROLE ro_role;
Ge rollen SELECT-åtkomst till varje tabell i ett visst 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;
Och ge sedan rollen till användaren
GRANT ro_role TO ro_user;