sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo escribir una política en Oracle SQL que restrinja el acceso a los no propietarios de una tabla?

No tienes que hacer absolutamente nada al respecto.

Las tablas (y los datos almacenados en ellas) son propiedad del usuario A. Nadie puede verlas a menos que el usuario A otorga ciertos privilegios a otros usuarios, como el usuario B.

Eso se puede hacer otorgando privilegios de selección, es decir,

grant select on my_table to user_B;

y el usuario B obtendría datos como

select * from user_A.my_table;

El usuario B no podrá modificar los datos (ya que no se le permitió insertar/actualizar/eliminar).

Además, usted (como usuario A) puede crear una vista que selecciona solo una parte de los datos, por ejemplo,

create view v_my_table as 
  select * 
  from my_table
  where score > 4;

grant select on v_my_table to user_B;

Al hacerlo, el usuario B solo vería las filas cuya puntuación sea superior a 4.

Si hay un usuario C, no puede ver absolutamente nada. Si quisiera que viera algunos datos, haría lo que ya hizo con el usuario B:otorgar ciertos privilegios.

Sin embargo, hay una opción para permitir que el usuario B "reenvíe" los privilegios a otros usuarios:usaría with grant option , por ejemplo

grant select on my_table to user_B with grant option;

Eso permitiría al usuario B otorgar select a otros usuarios, por ejemplo,

grant select on user_A.my_table to user_C;

Finalmente (hablando de esta respuesta), si hay muchos usuarios a los que le gustaría otorgar tales privilegios, puede crear roles . Luego, otorgaría privilegios a un rol y otorgaría roles a otro (s) usuario (s). Le permite modificar roles según sus deseos (y los de otros usuarios).

create role my_role;
grant select on my_table to my_role;

Por ejemplo, para comenzar, podría otorgar select a my_role y luego otorgar my_role a los usuarios B, C y D.

grant my_role to user_B;
grant my_role to user_C;

Más tarde, puede conceder insert a my_role

grant insert on my_table to my_role;

y todos los usuarios obtuvieron my_role automáticamente podría insertar filas en my_table del usuario A.