Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Esportazione al volo dei risultati della query in un file

Mi sembra che tu non stia aspettando un codice SQL nella risposta alla tua domanda. L'aspetto principale della tua domanda è l'aspetto della sicurezza. Cosa dovresti fare per implementare il tuo requisito senza sysadmin privilegi e senza una nuova falla di sicurezza? Questa è la tua vera domanda credo.

Vedo almeno 3 modi per risolvere il tuo problema. Ma prima di tutto una breve spiegazione del perché i privilegi di amministratore di sistema esistono in tutte le soluzioni basate su Extended Stored Procedure . Stored procedure estese come xp_cmdshell sono molto vecchi. Esistevano almeno prima di SQL Server 4.2, il primo Microsoft SQL Server eseguito con il primo Windows NT (NT 3.1). Nella vecchia versione di SQL Server non ero una restrizione di sicurezza per l'esecuzione di tali procedure, ma in seguito una tale restrizione. È importante capire che tutti gli scopi generici procedure che consentono di avviare qualsiasi processo sotto un account SQL Server come xp_cmdshell e sp_OACreate deve avere amministratore di sistema limitazione dei privilegi. Solo un orientato al compito le procedure con una chiara area di utilizzo e autorizzazioni basate sui ruoli possono risolvere il problema senza una falla nella sicurezza. Quindi questi sono i 3 modi di soluzione che ho promesso prima:

  • Crea un nuovo account SQL sul tuo server SQL con sysadmin privilegi. Quindi crei una procedura memorizzata che utilizza alcune di Procedure memorizzate estese come xp_cmdshell o sp_OACreate e implementa tecnicamente i tuoi requisiti (esporta alcune informazioni in un file CSV). Per quanto riguarda ESEGUI COME Clausola (vedi http://msdn.microsoft.com/en-us/ libreria/ms188354.aspx ) si configura la procedura memorizzata creata in modo che venga eseguita nell'account con sysadmin privilegi. Delega l'esecuzione di questa procedura agli utenti con un ruolo SQL, per essere più flessibili dal lato della delega dei permessi.
  • Puoi utilizzare Procedure archiviate CLR invece di xp_cmdshell e sp_OACreate . Dovresti anche utilizzare le autorizzazioni basate sui ruoli sulla procedura creata.
  • L'utente finale non chiama direttamente alcuna procedura memorizzata SQL che crei. Esiste un software (come il servizio WCF o un sito Web) che chiama la procedura memorizzata SQL. È possibile implementare l'esportazione in file CSV all'interno di questo software e non all'interno di alcuna procedura memorizzata SQL.

In tutte le modalità di implementazione dovresti definire esattamente dove conserverai la password dell'account con cui si accede al file system. Ci sono diverse opzioni che hai, tutte con vantaggi e svantaggi corrispondenti. È possibile utilizzare la rappresentazione per consentire l'accesso al file system con l'account dell'utente finale. Il modo migliore dipende dalla situazione che hai nel tuo ambiente.