sql >> Base de Datos >  >> RDS >> Sqlserver

Exportación de resultados de consultas a un archivo sobre la marcha

Me parece que no está esperando un código SQL en la respuesta a su pregunta. El aspecto principal de su pregunta es el aspecto de seguridad. ¿Qué debe hacer para implementar su requisito sin sysadmin? privilegios y sin un nuevo agujero de seguridad? Creo que esta es tu verdadera pregunta.

Veo al menos 3 formas de resolver tu problema. Pero antes que nada, una breve explicación de por qué existen privilegios de administrador de sistemas en todas las soluciones basadas en Procedimientos almacenados extendidos . Procedimientos almacenados extendidos como xp_cmdshell son muy viejos Existían al menos antes de SQL Server 4.2, el primer Microsoft SQL Server que se ejecutaba bajo el primer Windows NT (NT 3.1). En la versión anterior de SQL Server no tenía restricciones de seguridad para ejecutar tales procedimientos, pero luego se hicieron tales restricciones. Es importante entender que todos los propósito general procedimientos que permiten iniciar cualquier proceso bajo la cuenta de SQL Server como xp_cmdshell y sp_OACreate debe tener administrador de sistemas restricción de privilegios. Solo un orientado a la tarea los procedimientos con un área clara de uso y permisos basados ​​en roles pueden resolver el problema sin un agujero de seguridad. Así que estas son las 3 formas de solución que prometí antes:

  • Usted crea una nueva cuenta SQL en su servidor SQL con sysadmin privilegios Luego, crea un procedimiento almacenado que usa algunos de Procedimientos almacenados extendidos como xp_cmdshell o sp_OACreate e implementar técnicamente sus requisitos (exportar alguna información a un archivo CSV). Con respecto a EJECUTAR COMO Cláusula (ver http://msdn.microsoft.com/en-us/ biblioteca/ms188354.aspx ) configura el procedimiento almacenado creado para que se ejecute bajo la cuenta con sysadmin privilegios Usted delega la ejecución de este procedimiento a usuarios con algún rol de SQL, para ser más flexible desde el lado de la delegación de permisos.
  • Puede usar Procedimientos almacenados CLR en lugar de xp_cmdshell y sp_OACreate . También debe usar permisos basados ​​en roles en el procedimiento creado.
  • El usuario final no llama directamente a ningún procedimiento almacenado de SQL que usted cree. Existe una pieza de software (como el servicio WCF o un sitio web) que llama a su procedimiento almacenado de SQL. Puede implementar la exportación a un archivo CSV dentro de este software y no dentro de ningún procedimiento almacenado de SQL.

En todas las formas de implementación, debe definir exactamente dónde guardará la contraseña de la cuenta con la que accede al sistema de archivos. Hay diferentes opciones que tiene, todas con sus correspondientes ventajas y desventajas. Es posible utilizar la suplantación de identidad para permitir el acceso al sistema de archivos con la cuenta del usuario final. La mejor manera depende de la situación que tengas en tu entorno.