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

Oracle:Acesso somente leitura ao esquema para outro usuário?


Se você tiver controle sobre a maneira como seu aplicativo se conecta (por exemplo, uma instrução de inicialização para seu pool de conexões), tudo o que você precisa fazer é executar:
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

A partir desse ponto (durante a duração da sessão), qualquer nome de objeto não qualificado será pesquisado em PRODUCTS esquema.

Todas as concessões concedidas a PRODUCTS_READONLY estará em vigor. A sessão será executada com as credenciais (e restrições de segurança) do usuário original usado para fazer login.

Se você não puder alterar a maneira como a conexão é estabelecida ou inicializada, um gatilho de logon também deve fazer isso:
create or replace trigger logon_trg
  after logon on database
begin
    if (user = 'PRODUCTS_READONLY') then
      execute immediate 'alter session set current_schema = products';
    end if;
exception
  when others then null; -- prevent a login failure due to an exception
end logon_trg;
/

Observe que é crucial interceptar qualquer exceção, porque, caso contrário, um erro potencial no SQL executado efetivamente desconectará todos do banco de dados. Portanto, use com cuidado e teste-o bem antes de colocá-lo em produção.