vistas vista una parametros eliminar create crear con como mysql view permissions database-permissions grant

vista - mysql select view access denied



Conceder a un usuario permiso para ver solo una vista de mysql (5)

La siguiente pregunta pertenece a MySQL 5.1.44

Digamos que tengo una tabla con registros insertados por diferentes usuarios de mi aplicación. ¿Cómo puedo dar acceso a un usuario específico para que solo vea sus registros en esa tabla? He pensado en crear una VIEW con sus registros, pero no sé cómo crear un usuario de mysql que solo pueda ver esa VIEW .

Entonces, ¿es posible crear un usuario de mysql que solo tenga acceso a una sola VIEW ? ¿este usuario también se puede hacer para que tenga acceso de solo lectura a esa VIEW ?

¡Gracias!

PD: lo que llamo usuarios en mi ejemplo son realmente oficinas subsidiarias que desean acceder a sus registros con sus propias aplicaciones.


Además

GRANT SELECT ON <database_name>.<view_name> TO <user>@<host> IDENTIFIED BY ''<password>''

es mejor hacer tambien

GRANT SHOW VIEW ON <database_name>.<view_name> TO <user>@<host> IDENTIFIED BY ''<password>''

para que una gran cantidad de herramientas de la interfaz de usuario SQL puedan obtener la definición de la vista y trabajar adecuadamente para la vista.


Creo que la pregunta original es en realidad preguntar cómo limitar las filas a las que son propiedad de un usuario determinado. (La idea de crear una vista por usuario, y luego otorgar solo eso, parece ser una solución).

Puede hacer esto insertando la referencia del usuario () en la tabla de datos y luego filtrando eso.

Utilizando MySQL 5.6. Cree una vista que limite SELECT a solo los registros que son propiedad del usuario actual:

-- check the current user select user(); create table t1 (myId int, mydata varchar(200), myName varchar(200)); insert t1 select 1, ''my data yes'', user(); insert t1 select 2, ''my data yes2'', user(); insert t1 select 3, ''my data no'', ''joe''; select * from t1; create or replace view v1 AS select * from t1 where myName = user(); select * from v1;


Si quieres que la vista sea de solo lectura, sospecho que lo haces. Entonces debe crear la vista con la cláusula ALGORITHM = TEMPTABLE.

Esto hará que la vista sea solo por la virtud de tener que crear una tabla temporal.

Otra forma de lograr solo lectura y esto depende de sus datos es pegar una función agregada. Por ejemplo, si tiene una vista que se basa en una tabla y muestra todas las columnas, puede pegar un distintivo en la selección.


GRANT SELECT ON database1.view1 TO ''someuser''@''somehost'';


GRANT SELECT ON <database name>.<view name> TO <user>@<host> IDENTIFIED BY ''<password>''

Fuente: Documentación MySQL