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

Como escrever uma política no Oracle SQL que restringe o acesso a não proprietários de uma tabela?


Você não precisa fazer absolutamente nada sobre isso.

As tabelas (e os dados armazenados nelas) são de propriedade do usuário A. Ninguém pode vê-las a menos que o usuário A concede certos privilégios a outros usuários, como o usuário B.

Isso pode ser feito concedendo privilégio de seleção, ou seja,
grant select on my_table to user_B;

e o usuário B buscaria dados como
select * from user_A.my_table;

O usuário B não poderá modificar os dados (pois não foi concedido inserir/atualizar/excluir).

Além disso, você (como usuário A) pode criar uma visualização que seleciona apenas parte dos dados, por exemplo
create view v_my_table as 
  select * 
  from my_table
  where score > 4;

grant select on v_my_table to user_B;

Ao fazer isso, o usuário B veria apenas as linhas cuja pontuação fosse maior que 4.

Se houver o usuário C, ele não poderá ver absolutamente nada. Se você quiser que ele veja alguns dados, faça o que já fez com o usuário B - conceda certos privilégios.

No entanto, há uma opção para permitir que o usuário B "encaminhe" privilégios para outros usuários - você usaria with grant option , por exemplo.
grant select on my_table to user_B with grant option;

Isso permitiria que o usuário B concedesse seleção a outros usuários, por exemplo
grant select on user_A.my_table to user_C;

Finalmente (falando sobre esta resposta), se houver muitos usuários aos quais você deseja conceder esses privilégios, você pode criar funções . Em seguida, você concederia privilégios a uma função e concederia função a outro(s) usuário(s). Ele permite que você modifique as funções dependendo dos seus desejos (e de outros usuários).
create role my_role;
grant select on my_table to my_role;

Por exemplo, para começar, você pode conceder select para my_role e, em seguida, conceda my_role aos usuários B, C e D.
grant my_role to user_B;
grant my_role to user_C;

Mais tarde, você pode conceder insert para my_role
grant insert on my_table to my_role;

e todos os usuários receberam my_role seria automaticamente capaz de inserir linhas na my_table do usuário A.