none
Problema di accesso a file system da SqlServer RRS feed

  • Domanda

  • Salve,
    ho il seguente problema..
    Scenario:Applicazione Windows e SqlServer2000.
    All'interno di una mia stored procedure ho la necessità di scrivere un file di
    testo.

    Effettuo questa operazione utilizzando le extended stored sp_OACreate, sp_OAMethod e sp_OADestroy.

    Ho la necessità di creare questo file di testo su un percorso di rete condiviso.

    Qui nasce il problema.

    Se la cartella condivisa è "condivisa Everyone" la stored funziona

    correttamente e il file di testo viene creato , se la cartella condivisa non è "condivisa Everyone" ottengo il seguente messaggio d'errore ":-2146828218".
    Leggendo su internet questo errore si verifica quando non si hanno i permessi per accedere in lettura/scrittura su una cartella.

    Premetto che la stored viene lanciata con account sa di sqlServer.

    Quale user o gruppo devo aggiungere alla condivisione della cartella per
    permettere all'account "sa" la lettura scrittura su un percorso di rete??

    Ciao grazie

    lunedì 26 aprile 2010 08:34

Risposte

  • Ho visto l'account utilizzato dal servizio sqlserver, è Localsystem ,mi sa che non posso utilizzarlo per condividere una generica cartella...

    Il Local System account ha diritti amministrativi sulla macchina locale e non può in alcun modo accedere a risorse in rete.

     

    volevo spiegarti meglio il perchè dell'utilizzo del file system da parte della mia stored.

    Nel db c'è una tabella dove sono conservati i log delle operazioni effettuate dal software che utilizzo...

    Visto che questa tabella come capirai ,dato l'utilizzo, cresce in maniera molto veloce è sorta la necessità di creare una funzionalità che prelevasse i record da questa tabella e che li scrivesse su un file di testo da conservare...

    Da qui nasce l'esigenza di scrivere in un file di testo utilizzando le sp extended che usano il file system...

    Quale è secondo te il miglior approccio per risolvere tale problema (Non posso usare linguaggi di programmazione che siano diversi da TSQL)

    Definisci un job schedulato che tramite bcp esporti i log che ti interessano su file, seguito da un secondo step che esegue una DELETE delle righe esportate. Non hai bisogno di alcuna Extended Stored Procedure o linguaggi di programmazione diversi da un comando di SELECT :-)

     

    Ciao grazie


    Prego.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    • Proposto come risposta teguria giovedì 6 maggio 2010 13:25
    • Contrassegnato come risposta Anca Popa giovedì 2 dicembre 2010 19:44
    giovedì 29 aprile 2010 08:45
    Moderatore

Tutte le risposte

  • Quale user o gruppo devo aggiungere alla condivisione della cartella per
    permettere all'account "sa" la lettura scrittura su un percorso di rete??

    Ciao Vincenzo,

    Tralasciando il fatto che una stored procedure (o qualunque altra procedura SQL Server) NON DEVE MAI scrivere su file system (per motivi di sicurezza/prestazioni) l'account che devi abilitare è quello utilizzato dal servizio MSSQLServer.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    lunedì 26 aprile 2010 09:45
    Moderatore
  • Ciao Lorenzo,

    ho notato che sui vari form dove avevo postato il mio problema si accenna a problemi di protezione con l'utilizzo del file system da parte si sqlserver.

    Ho visto l'account utilizzato dal servizio sqlserver, è Localsystem ,mi sa che non posso utilizzarlo per condividere una generica cartella...

    volevo spiegarti meglio il perchè dell'utilizzo del file system da parte della mia stored.

    Nel db c'è una tabella dove sono conservati i log delle operazioni effettuate dal software che utilizzo...

    Visto che questa tabella come capirai ,dato l'utilizzo, cresce in maniera molto veloce è sorta la necessità di creare una funzionalità che prelevasse i record da questa tabella e che li scrivesse su un file di testo da conservare...

    Da qui nasce l'esigenza di scrivere in un file di testo utilizzando le sp extended che usano il file system...

    Quale è secondo te il miglior approccio per risolvere tale problema (Non posso usare linguaggi di programmazione che siano diversi da TSQL)

    Ciao grazie

    giovedì 29 aprile 2010 08:36
  • Ho visto l'account utilizzato dal servizio sqlserver, è Localsystem ,mi sa che non posso utilizzarlo per condividere una generica cartella...

    Il Local System account ha diritti amministrativi sulla macchina locale e non può in alcun modo accedere a risorse in rete.

     

    volevo spiegarti meglio il perchè dell'utilizzo del file system da parte della mia stored.

    Nel db c'è una tabella dove sono conservati i log delle operazioni effettuate dal software che utilizzo...

    Visto che questa tabella come capirai ,dato l'utilizzo, cresce in maniera molto veloce è sorta la necessità di creare una funzionalità che prelevasse i record da questa tabella e che li scrivesse su un file di testo da conservare...

    Da qui nasce l'esigenza di scrivere in un file di testo utilizzando le sp extended che usano il file system...

    Quale è secondo te il miglior approccio per risolvere tale problema (Non posso usare linguaggi di programmazione che siano diversi da TSQL)

    Definisci un job schedulato che tramite bcp esporti i log che ti interessano su file, seguito da un secondo step che esegue una DELETE delle righe esportate. Non hai bisogno di alcuna Extended Stored Procedure o linguaggi di programmazione diversi da un comando di SELECT :-)

     

    Ciao grazie


    Prego.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    • Proposto come risposta teguria giovedì 6 maggio 2010 13:25
    • Contrassegnato come risposta Anca Popa giovedì 2 dicembre 2010 19:44
    giovedì 29 aprile 2010 08:45
    Moderatore