Потребител в база данни на Oracle има само привилегиите, които предоставяте. Така че можете да създадете потребител само за четене, като просто не предоставяте никакви други привилегии.
Когато създадете потребител
CREATE USER ro_user
IDENTIFIED BY ro_user
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
потребителят дори няма разрешение да влезе в базата данни. Можете да разрешите това
GRANT CREATE SESSION to ro_user
и след това можете да дадете каквито привилегии за четене искате. Например, ако искате RO_USER
за да можете да заявите SCHEMA_NAME.TABLE_NAME
, бихте направили нещо като
GRANT SELECT ON schema_name.table_name TO ro_user
Като цяло обаче е по-добре да създадете роля и да предоставите привилегии на обекта на ролята, за да можете след това да предоставите ролята на различни потребители. Нещо като
Създайте ролята
CREATE ROLE ro_role;
Предоставете достъп на ролята SELECT на всяка таблица в определена схема
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;
След това дайте ролята на потребителя
GRANT ro_role TO ro_user;