none
Sobre permisos SQL2008 RRS feed

  • Pregunta

  • Estimados.

    Tengo un usuario llamado TEST el cual tienen permisos de EXECUTE sobre el SP llamado p_Test

    El Sp p_Test esta creado bajo el esquema ignos

    Exec ignos.p_Test

    Dentro de p_Test se hace referencia a una tabla llamada impresion y para que se ejecute le doy acceso para SELECT al usuario TEST.

    Lo que busco es que el usuario TEST solo tenga permiso de EXECUTE al SP pero NO quisiera que pueda hacer Select sobre la tabla impresion.

    Saludos.


    DBA SQL Server Santiago/Chile

    viernes, 4 de septiembre de 2015 15:08

Respuestas

  • Saludos,

    Me cuesta trabajo comprender lo que buscas ya que al parecer estas usando el esquema [dbo] y [mision], bastaría con denegarle permiso de SELECT a tu tabla en esquema [dbo], ya que tiene el permiso de EXEC sobre el Stored en el esquema [mision].

    Trata así:

    USE TuBaseBatos
    GO
    
    DENY SELECT ON OBJECT::[dbo].[prueba] TO [TEST];
    GRANT EXECUTE ON OBJECT::[mision].[usr_sp_select] TO [TEST];
    GO

    Con esto, tu usuario TEST tendrá permiso de ejecutar el Stored pero no podrá hacer select a la tabla. Si tienes una pregunta no dudes en hacerla.

    Saludos,


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Steve Morrison

    domingo, 6 de septiembre de 2015 17:48

Todas las respuestas

  • Usa el execute as dentro del sp quita el permiso de select al usuario TEST y el owner sea Test sobre el SP.  

    Aun asi con un deny select sobre el usuario y un grant execute al sp deberia de ser suficiente.
    • Propuesto como respuesta Nathán XS viernes, 4 de septiembre de 2015 15:29
    • Editado Enrique AA viernes, 4 de septiembre de 2015 15:40
    viernes, 4 de septiembre de 2015 15:18
  • Pero si a la tabla le doy deny sobre select al usuario y como ya le tengo el execute al SP, me da error de permiso:

    Se denegó el permiso SELECT en el objeto 'impresion', base de datos 'DB', esquema 'dbo'.


    DBA SQL Server Santiago/Chile

    viernes, 4 de septiembre de 2015 15:53
  • es un sql dinamico?

    Si es así esto se executa fuera del contexto del sp en otra session y es por eso que falla.  

    Acabo de probar y me funciono

    /****** Script for SelectTopNRows command from SSMS  ******/
    SELECT TOP 1000 [id]
          ,[nombre]
          ,[apaterno]
          ,[amaterno]
          ,[direccion]
          ,[country]
          ,[birthday]
      FROM [temp2].[dbo].[Prueba]
    
      deny select to [test]
    
      create procedure usr_sp_select 
      as
      select * from prueba
    
      exec usr_sp_select

    • Editado Enrique AA viernes, 4 de septiembre de 2015 16:06
    viernes, 4 de septiembre de 2015 15:57
  • Solo es una parte de sql dinamico, pero es la parte del link server, la parte que falla es un select normal que esta fuera del la parte dinamica.

    probare tu ejemplo.


    DBA SQL Server Santiago/Chile

    viernes, 4 de septiembre de 2015 16:09
  • Si tienes sql dinamico no va a funcionar porque creas una nueva sessión fuera del contexto del sp.

    Aqui veras como para el escenario que tienes.

    https://support.microsoft.com/en-us/kb/301299  

    viernes, 4 de septiembre de 2015 16:12
  • OK hice una SIn sql dinamico, pero el problema es el siguiente:

    el procedimiento 

    create procedure usr_sp_select 
      as
      select * from prueba

    En realidad es creado bajo el esquema mision

    create procedure mision.usr_sp_select 
      as
      select * from prueba

    Al usuario test le doy permiso de execute, pero obviamente me da error pues el SP trata de acceder a la tabla prueba que pertenece al esquema DBO.

    Entonces hago:

    GRANT SELECT ON [dbo].[prueba] TO [TEST]

    Y ahi ejecuto el SP con dicho usuario sin problemas, pero el tema pasaba por no querer que el usuario TEST pueda hacer SELECT sobre la tabla prueba, me parece que la unica manera es usar execute as

    Saludos.


    DBA SQL Server Santiago/Chile

    viernes, 4 de septiembre de 2015 16:37
  • Saludos,

    Me cuesta trabajo comprender lo que buscas ya que al parecer estas usando el esquema [dbo] y [mision], bastaría con denegarle permiso de SELECT a tu tabla en esquema [dbo], ya que tiene el permiso de EXEC sobre el Stored en el esquema [mision].

    Trata así:

    USE TuBaseBatos
    GO
    
    DENY SELECT ON OBJECT::[dbo].[prueba] TO [TEST];
    GRANT EXECUTE ON OBJECT::[mision].[usr_sp_select] TO [TEST];
    GO

    Con esto, tu usuario TEST tendrá permiso de ejecutar el Stored pero no podrá hacer select a la tabla. Si tienes una pregunta no dudes en hacerla.

    Saludos,


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Steve Morrison

    domingo, 6 de septiembre de 2015 17:48