Esecuzione del pacchetto SSIS da una procedura memorizzata con privilegi utente diversi


14

Sto riscontrando problemi nel consentire ai miei utenti di eseguire i pacchetti SSIS in modo ragionevole a causa dei diversi livelli di privilegio richiesti.

Lo scenario : abbiamo creato un data warehouse, con due diversi pacchetti SSIS responsabili del caricamento con dati, uno deve essere eseguito automaticamente (tramite un processo SQL Agent e funziona correttamente) e un altro che deve essere eseguito su- domanda da parte degli utenti una volta finalizzati e puliti i dati a monte, ecc.

Questo pacchetto esegue operazioni molto privilegiate tra cui il backup del database all'inizio dell'esecuzione (per sicurezza, per sicurezza), l'eliminazione e la ricreazione di tabelle calcolate ecc.

Ho scritto una procedura memorizzata per eseguire questo lavoro tramite [SSISDB]. [Catalog]. [Create_execution] e [SSISDB]. [Catalog]. [Start_execution] stored procedure ... funziona benissimo quando eseguito con il mio account (Sono un amministratore di sistema).

La procedura memorizzata non è riuscita quando è stata eseguita da un utente normale a causa del livello più elevato di autorizzazioni richiesto in SSISDB e MSDB per accodare l'esecuzione e il pacchetto stesso non è riuscito perché è in esecuzione nel loro (modesto) contesto di sicurezza.

Cosa ho provato :

Ho tentato di risolvere il problema utilizzando 'Esegui come' nella procedura memorizzata, tuttavia questo non è riuscito a causa di problemi di concatenamento tra database, flag affidabile, ecc.

Ho anche tentato di risolvere il problema avendo i processi Agent per eseguire il pacchetto e semplicemente eseguendo il processo agent dalla procedura memorizzata, tuttavia sono rapidamente entrato in un mondo di dolore che comporta:

  • L'impossibilità di impostare le autorizzazioni di esecuzione in base al lavoro
  • La speranza di configurare questo accesso tramite un ruolo server centrale per soddisfare il cambiamento del personale nel tempo e che i lavori possano avere un solo utente come proprietario
  • Il mondo oscuro di account proxy, credenziali in combinazione con accessi sql-auth ecc

Piani C e D

Le uniche opzioni che posso pensare di rimanere per me sono la creazione di un accesso SQL Server dedicato con autorizzazioni elevate e la fiducia degli utenti a non trasferire le credenziali o perdere la verificabilità di chi ha pianificato l'importazione (in che modo questo problema viene risolto in altre aree di l'organizzazione) o creare un front-end Web puramente per consentire agli utenti di autenticarsi come account "Ruolo server", quindi consentire all'app Web di eseguire la procedura memorizzata con una seconda connessione (privilegiata).

Così....

C'è qualche consiglio là fuori su come:

  • fare in modo che un pacchetto SSIS esegua operazioni privilegiate
  • eseguito da un utente con privilegi limitati (utilizzando un account Windows AD)
  • preferibilmente laddove l'accesso per eseguire il lavoro è gestito tramite un ruolo server centrale (non ho la possibilità di creare un nuovo gruppo di finestre per loro)
  • e dove qualsiasi nuovo account intermedio / proxy sono account Auth di SQL Server (di nuovo, capacità molto limitata di apportare modifiche all'AD)

Capisco che ci sono molte parti in movimento qui (e alcune hanno la sensazione di girare le pale) quindi fammi sapere se ci sono altre informazioni che ritieni mi siano perse.

Saluti, Tim

Modificare....

Così oggi ho creato un accesso SQL Server dedicato con autorizzazioni ssis_admin, creato tre lavori di SQL Server Agent di proprietà di quell'utente e aggiornato la procedura memorizzata che i miei utenti finali chiamano per execute asquell'utente. Questo non è riuscito a causa dell'impossibilità di chiamare create executioncome accesso a SQL Server, richiede un account Windows.

Ho aggiornato la procedura memorizzata dagli utenti con execute asl'account Windows in cui SQL Server è in esecuzione come (un account del servizio AD), l'ho concesso ssis_admine non riesce con l'errore

L'attuale contesto di sicurezza non può essere ripristinato. Passare al database originale in cui è stato chiamato "Execute As" e riprovare.

Questo non sta andando da nessuna parte veloce :(


1) Devono lanciare i pacchetti tramite create_execution ie devono specificare i parametri in esecuzione per il loro "scenario pronto per i dati?" 2) Sicuro di non essere interessato a metterli nel ruolo ssis_admin?
Billinkc,

1) Sto usando create_executionperché devo passare un parametro (uno dei tre valori) dallo sproc al lavoro. Sono felice di avere tre sprocs / lavori ecc se questo lo risolve. 2) Se ssis_admin è il ruolo di privilegio più basso che mi porta lì, sono aperto ad esso ... è meglio di sysadmin almeno e li risolve accidentalmente facendo cadere / nuking i tavoli del magazzino in uso generale.
Wokket,

Il ssis_adminruolo consentirebbe loro di eseguire i pacchetti SSIS (i procs controllano l'appartenenza ai ruoli sysadmin o ssis_admin) ma penso che funzionerà come loro e quindi non sarà in grado di eseguire backup e simili. (Dovrei testarlo di sicuro, non ricordo mai se funziona come loro o l'account del servizio SQL Server). Tuttavia, essere membro di ssis_admin consente loro di distribuire pacchetti e confondere con configurazioni che possono essere o meno una buona cosa. Il 2016 ci offre ruoli più granulari ma ovviamente non è molto utile qui
billinkc,

Penso che la minima quantità di rischio sarebbe avere 3 lavori codificati che usano la corretta combinazione di utenti / account con credenziali per raggiungere uno stato meno privilegiato. Dopodiché, darei a quegli utenti la possibilità di eseguire lavori o lo escludere, creando tre processi che EXECUTE ASconsentono di eseguire i lavori specifici tramite sp_start_job. Dice il ragazzo di Internet a caso che è terribile in sicurezza
Billinkc

@billinkc Penso che ssis_operator farebbe
Tom V - prova topanswers.xyz il

Risposte:


2

Per i posteri ho ottenuto questo lavoro tramite il seguente:

  • Modifica della procedura memorizzata chiamata dagli utenti ( Admin.RunImport) su "Esegui come" l'account utilizzato dal servizio SQL
  • L'account del servizio SQL Server (un AD account servizio gestito) è modificato per avere le autorizzazioni per eseguire lo sProc Admin permettendo l'uso di execute assopra
  • L'account del servizio SQL Server viene modificato per avere ruoli ssisdb.ssis_admin e msdb.SQlAgentOperator.
  • Questa Admin.RunImportprocedura memorizzata mette in coda uno dei 3 processi agente che sp_start_jobdipendono da un parametro passato
    • Questo reindirizzamento tramite SQL Agent è necessario per bypassare l'errore di contesto di sicurezza ssis sopra
    • I lavori dell'agente sono di proprietà di "sa" ed eseguono semplicemente una stored procedure ( Raw.hp_Execute_Import_Impl) sottostante che passa un parametro diverso per lavoro.
    • Ciò significa che il lavoro dell'agente viene eseguito come sadovuto al privilegio ssis_admin sopra, lo stesso dei lavori pianificati
  • La Raw.hp_Execute_Import_Implprocedura memorizzata mette in coda il pacchetto SSIS saallo stesso modo del normale.

Invece di essere in grado di creare account Windows dedicati per questo scopo, penso che sia buono come lo farò al momento.

Grazie per l'aiuto ragazzi!


2
Grazie per essere tornato e pubblicare la soluzione. Ora, quando hai di nuovo questo problema e dimentica quello che hai fatto, puoi cercare sul web e troverai la tua soluzione!
Nick.McDermaid,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.