none
Dar permiso de lectura a una sola vista RRS feed

  • Question

  • Hola. Necesito dar a un usuario permiso para acceder (consultar) una vista. Solo quisiera que tuviera acceso a esa vista, a nada más. ¿Cómo podría hacerlo sin tener que ir objeto por objeto quitando permisos?

    Muchas gracias

    Tuesday, September 27, 2022 11:23 AM

Answers

  • Hola RafaCar:

    Yo diría que no.

    Escenario. 2 tablas

    Create table dbo.z (id int)
    Create table dbo.y (id int)
    

    Con las mismas. Inserto datos

    Insert into dbo.z(id)
    values(1);
    Insert into dbo.y(id)
    values (2)

    Ahora 2 vistas

    create view dbo.z_View 
    As
    Select id from dbo.z;
    go
    Create view dbo.y_view
    As
    Select id from dbo.y;
    go

    Ahora creo un usuario sin login

    Create user TestView withOut Login;

    Le concedo permisos para la vista Z

    Grant SELECT  on object::dbo.Z_view To TestView;

    Y ejecuto consultas con su usuario.

    Execute as User = 'TestView'
    Select * from dbo.z_View 

    Si intento acceder a la otra vista o a la tabla.

    Execute as User = 'TestView'
    Select * from dbo.y_View 
    
    Select * from dbo.z  

    En resumidas cuentas, que solo tengo porque darle permisos para la vista. 

    Grant 

    https://learn.microsoft.com/es-es/sql/t-sql/statements/grant-object-permissions-transact-sql?view=sql-server-ver16

    • Marked as answer by RafaCar Wednesday, September 28, 2022 11:06 AM
    Tuesday, September 27, 2022 3:20 PM

All replies

  • Hola RafaCar:

    Yo diría que no.

    Escenario. 2 tablas

    Create table dbo.z (id int)
    Create table dbo.y (id int)
    

    Con las mismas. Inserto datos

    Insert into dbo.z(id)
    values(1);
    Insert into dbo.y(id)
    values (2)

    Ahora 2 vistas

    create view dbo.z_View 
    As
    Select id from dbo.z;
    go
    Create view dbo.y_view
    As
    Select id from dbo.y;
    go

    Ahora creo un usuario sin login

    Create user TestView withOut Login;

    Le concedo permisos para la vista Z

    Grant SELECT  on object::dbo.Z_view To TestView;

    Y ejecuto consultas con su usuario.

    Execute as User = 'TestView'
    Select * from dbo.z_View 

    Si intento acceder a la otra vista o a la tabla.

    Execute as User = 'TestView'
    Select * from dbo.y_View 
    
    Select * from dbo.z  

    En resumidas cuentas, que solo tengo porque darle permisos para la vista. 

    Grant 

    https://learn.microsoft.com/es-es/sql/t-sql/statements/grant-object-permissions-transact-sql?view=sql-server-ver16

    • Marked as answer by RafaCar Wednesday, September 28, 2022 11:06 AM
    Tuesday, September 27, 2022 3:20 PM
  • Muchisimas gracias Javier.
    Así lo haré
    Wednesday, September 28, 2022 11:06 AM