Uživatel v databázi Oracle má pouze oprávnění, která mu udělíte. Můžete tedy vytvořit uživatele pouze pro čtení tím, že mu jednoduše neudělíte žádná další oprávnění.
Když vytvoříte uživatele
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
uživatel ani nemá oprávnění k přihlášení do databáze. Můžete to udělit
GRANT CREATE SESSION to ro_user
a pak můžete přistoupit k udělení jakýchkoli práv čtení, která chcete. Pokud například chcete RO_USER
abyste mohli dotazovat SCHEMA_NAME.TABLE_NAME
, udělali byste něco jako
GRANT SELECT ON schema_name.table_name TO ro_user
Obecně je však lepší vytvořit roli a udělit jí oprávnění k objektu, abyste pak mohli udělit roli různým uživatelům. Něco jako
Vytvořte roli
CREATE ROLE ro_role;
Udělte roli SELECT přístup ke každé tabulce v konkrétním schématu
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;
A poté udělte roli uživateli
GRANT ro_role TO ro_user;