O primeiro passo é criar uma função guardiã para definir as situações em que os dados podem ser vistos. A função abaixo permite apenas que as consultas feitas a partir dos esquemas RH e XY possam ver o que há na coluna. Consultas feitas a partir de outros esquemas verão apenas null.
create or replace function
hide_col( p_owner in varchar2, p_name in varchar2 )
return varchar2
as
begin
if sys_context( 'userenv', 'session_user' ) in ('RH', 'XY') then
return null;
else
return '1=0';
end if;
end;
O valor retornado pela função é usado como uma cláusula de um where, então null vai liberar o acesso. Esse mecanismo permite criar políticas mais complexas, mas neste caso apenas restringimos por esquema.
Depois, é preciso registrar a política de segurança com DBMS_RLS:
BEGIN
DBMS_RLS.ADD_POLICY(object_schema=>'RH', object_name=>'USUARIO',
policy_name=>'USUARIO_SENHA',
function_schema=>'RH',
policy_function=>'hide_col',
sec_relevant_cols=>'SENHA',
sec_relevant_cols_opt=>dbms_rls.ALL_ROWS);
END;
E agora as senhas estão protegidas.