2009-02-02 6 views
5

Tengo un script TSQL que se utiliza para configurar una base de datos como parte de la instalación de mi producto. Toma una serie de pasos que en conjunto toman cinco minutos más o menos. A veces, este script falla en el último paso porque el usuario que ejecuta el script no tiene suficientes derechos para la base de datos. En este caso, me gustaría que fallara el guión. Para hacer esto, quiero que la secuencia de comandos pruebe los derechos que tiene desde el principio. ¿Puede alguien señalarme una prueba de propósito general si el script se ejecuta con un permiso de seguridad en particular?¿Cómo puede un script SQL Sever TSQL decir qué permisos de seguridad tiene?

Edit: En el caso particular que estoy buscando está tratando de hacer una copia de seguridad, pero he tenido otras cosas que van mal y esperaba una solución de propósito general.

Respuesta

4
select * from fn_my_permissions(NULL, 'SERVER') 

Esto le da una lista de permisos de la sesión actual tiene en el servidor

select * from fn_my_permissions(NULL, 'DATABASE') 

Esto le da una lista de permisos para la sesión actual en la base de datos actual.

See here for more information.

+0

Muchas gracias, veo en la publicación de MSDN que lo que realmente quiero es SI HAY_PERMS_BY_NAME (nombre_bd(), 'BASE DE DATOS', 'BASE DE DATOS DE RESPALDO') <> 1 pero esta publicación me indicó allí. –

0

Supongo que está fallando en una actualización o inserto después de una larga serie de selecciones.

Solo prueba simple actualización o inserte dentro de una transacción. Hard-code la identificación de la fila, o lo que sea para hacerlo simple y rápido.

No confirme la transacción; en su lugar, reiníciela.

Si no tiene derechos para insertar o actualizar, esto debería fallar. Si lo haces, retrocederá y no causará un cambio permanente.

+0

En el caso particular que estoy viendo, estoy tratando de hacer una copia de seguridad, pero he tenido otras cosas que van mal y esperaba una solución de propósito general. –

+0

Ah .... Hmm. Eso sería un poco más complicado, entonces. – BradC

0

tratar la última inserción/actualización desde el principio con algunos donde perfectas condiciones

insert/update 
where 1=2 

if (@@error <> 0) 
    raise error 6666 'no permissions' 

esto no causaría ningún daño, pero sería levantar una bandera por adelantado acerca de la falta de derechos.

Cuestiones relacionadas