Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle - Como criar um usuário readonly


Um usuário em um banco de dados Oracle tem apenas os privilégios que você concede. Assim, você pode criar um usuário somente leitura simplesmente não concedendo nenhum outro privilégio.

Ao criar um usuário
CREATE USER ro_user
 IDENTIFIED BY ro_user
 DEFAULT TABLESPACE users
 TEMPORARY TABLESPACE temp;

o usuário nem tem permissão para fazer login no banco de dados. Você pode conceder isso
GRANT CREATE SESSION to ro_user

e então você pode conceder quaisquer privilégios de leitura que desejar. Por exemplo, se você quiser RO_USER para poder consultar SCHEMA_NAME.TABLE_NAME , você faria algo como
GRANT SELECT ON schema_name.table_name TO ro_user

Geralmente, no entanto, é melhor criar uma função e conceder os privilégios de objeto à função para que você possa conceder a função a diferentes usuários. Algo como

Crie o papel
CREATE ROLE ro_role;

Conceda o acesso SELECT da função em cada tabela em um esquema específico
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;

E, em seguida, conceda a função ao usuário
GRANT ro_role TO ro_user;