2010-05-12 96 views
17

Me enfrenté al siguiente problema: hay un usuario que tiene que ejecutar un procedimiento almacenado (spTest). En el cuerpo de spTest se llama sp_trace_generateevent. sp_trace_generateevent requiere alterar los permisos de rastreo, y no quiero que el usuario lo tenga. Entonces me gustaría que el usuario pueda ejecutar spTest. ¿Cómo puedo hacer eso?Ejecutar un procedimiento almacenado como permiso de otro usuario

Respuesta

25

Prueba esto:

EXECUTE AS user = 'special_user' 

EXECUTE YourProcerdure 

REVERT 

Vea éstas:
Understanding Context Switching<<<has examples of things like you are trying to do
Understanding Execution Context
EXECUTE AS Clause (Transact-SQL)
EXECUTE AS (Transact-SQL)

+0

Por alguna razón, no ayuda. Me da error que no tengo permiso para ejecutar sp_trace_generateevent. Pero cuando me conecto al servidor como special_user no tengo problemas para ejecutar sp_trace_generateevent. ¿Algunas ideas? – StuffHappens

+1

desde: http://msdn.microsoft.com/en-us/library/ms181362.aspx El nombre de usuario o de inicio de sesión especificado en EXECUTE AS debe existir como un principal en sys.database_principals o sys.server_principals, respectivamente, o la instrucción EXECUTE AS falla. Además, los permisos IMPERSONATE deben otorgarse en el principal. A menos que la persona que llama sea el propietario de la base de datos o sea miembro de la función fija del servidor sysadmin, el principal debe existir incluso cuando el usuario acceda a la base de datos o instancia de SQL Server a través de una membresía de grupo de Windows. –

+0

Esta sugerencia no ayuda tampoco. Parece que debería encender TRUSTWORTHY. Gracias de todos modos. – StuffHappens

-1

Cuando vaya a ejecutar ese procedimiento almacenado específico, necesitará crear una conexión diferente utilizando las credenciales de usuario necesarias.

+0

Por alguna razón, does't ayuda. Me da error que no tengo permiso para ejecutar sp_trace_generateevent. Pero cuando me conecto al servidor como special_user no tengo problemas para ejecutar sp_trace_generateevent. ¿Algunas ideas? – StuffHappens

3

Como otros han sugerido que puede lograr lo que usted desea usando el EXECUTE AS cláusula. Para ver ejemplos de opciones de implementación, consulte la documentación de Libros en pantalla para la cláusula Execute As.

Para seguir leyendo y desarrollar una mayor comprensión de este tema, lo que está buscando lograr viene bajo el concepto de seguridad Context Switching.

1

Esto es lo que hice (y exitoso):

let Source = Sql.Database("server", "database", 
    [Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"]) 

en

Source 
Cuestiones relacionadas