none
Bulk insert cambiare utenza per esecuzione store RRS feed

  • Domanda

  • Ho una store che fa una bulk insert. Se la lancio da Server Management Studio connesso con autenticazione windows e credenziali administrator esegue correttamente il proprio lavoro potendo accedere al file sul server.

    Se la lancio come utente di default (SYSTEM_USER=sa) del server SQL da errore. L'utenza SA (non proprio ma non cambia il concetto) è anche l'utenza che la dovrà invocare in OLEDB da C# 

    Cannot bulk load because the file "\\Server\Test\1a13a4df-8722-42bf-b7be-92ad84cff849.jpg" could not be opened. Operating system error code 71(failed to retrieve text for this error. Reason: 15105).

    Quello che vorrei capire è come posso forzare la store per andare ad operare nelle stesse condizioni che avrei con autenticazione windows e utente administrator alla connessione del server.

    Ho provato sia  SETUSER 'dominio\administrator';   che  EXECUTE AS LOGIN = 'Dominio\administrator';  Ma non cambia il risultato.  


    martedì 29 ottobre 2019 13:40

Tutte le risposte

  • Ciao,

    nell'eseguire l'accesso remoto per l'apertura del file, l'engine sql utlizza le credenziali Windows disponibili: se la sessione è aperta in windows authentication usa queste credenziali, viceversa utilizza quelle dell'account del servizio sql server. 

    Quindi se la stored procedure verrà eseguita in un security conetxt con sql authentication la bulk insert utilizzerà l'account windows del servizio sql server il quale dovrà avere le necessarie grant di accesso al file system e al file in questione.

    https://docs.microsoft.com/it-it/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15

    Giorgio


    mercoledì 30 ottobre 2019 16:35
  • lanci la stored procedure con l'account che accede al database indicato nella ConnctionString della tua applicazione ?

    crea un account di servizio che sia domain user, che avrà accesso alla share \\server\test e che sarà anche un login per la tua istanza sql server.


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    lunedì 4 novembre 2019 10:38
    Moderatore
  • Quindi se ho capito bene. Se su "Protezioni/Credenziali" creo una chiave con le credenziali windows di Dominio\administrator poi su "Protezione/account di Accesso"  nelle proprietà di sa spunto "esegui mapping a credenziali" e poi aggiungo la chiave creata in "Protezioni/Credenziali" quando eseguo la Bulk da utente SA lato windows mi presento come "Dominio\administrator" in pratica avrei con SA lo stesso comportamento che ho autenticandomi con credenziali windows su MSSQL ?
    martedì 5 novembre 2019 08:23
  • lanci la stored procedure con l'account che accede al database indicato nella ConnctionString della tua applicazione ?

    Al momento  sto ancora provando da Microsoft SQL server management studio , poi una delle vie di chiamata sarà da applicativo a richiesta (con utenza sa nella stringa), ma sarà anche schedulato a una certa ora su MSSQL

    crea un account di servizio che sia domain user, che avrà accesso alla share \\server\test e che sarà anche un login per la tua istanza sql server.

    Preferirei evitare un autenticazione specifica per questa operazione essendo la "sa" già esistente con diverse altre autorizzazioni essendo inserita in un applicazione con varie chiamate per vari scopi.


    martedì 5 novembre 2019 08:30