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.