Użytkownik w bazie danych Oracle ma tylko przyznane przez Ciebie uprawnienia. Możesz więc utworzyć użytkownika tylko do odczytu, po prostu nie nadając żadnych innych uprawnień.
Kiedy tworzysz użytkownika
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
użytkownik nie ma nawet uprawnień do logowania się do bazy danych. Możesz to przyznać
GRANT CREATE SESSION to ro_user
a następnie możesz przystąpić do przyznawania dowolnych uprawnień do odczytu. Na przykład, jeśli chcesz RO_USER
aby móc wysłać zapytanie do SCHEMA_NAME.TABLE_NAME
, zrobiłbyś coś takiego
GRANT SELECT ON schema_name.table_name TO ro_user
Ogólnie rzecz biorąc, lepiej jest utworzyć rolę i przyznać uprawnienia do obiektu, aby można było następnie przyznać rolę różnym użytkownikom. Coś jak
Utwórz rolę
CREATE ROLE ro_role;
Przyznaj roli SELECT dostęp do każdej tabeli w określonym schemacie
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 następnie przyznaj rolę użytkownikowi
GRANT ro_role TO ro_user;