Attualmente sono coinvolto nell'implementazione / progettazione di un'applicazione esistente per un cliente su larga scala. L'applicazione ha un modello simile, ad es. vCenter Server in cui un certo numero di componenti memorizzano le informazioni e estraggono le informazioni ei flussi di lavoro formano un database centrale. L'ambiente è gestito da un'applicazione console che utilizza un servizio Windows per connettersi al database.
A causa di considerazioni sulla sicurezza, l'autenticazione SQL non è un'opzione, ma l'applicazione supporta l'autenticazione di Windows. Tuttavia, quando si utilizza l'autenticazione di Windows, vengono passate le credenziali dell'utente che utilizza l'applicazione della console di gestione sul database invece di utilizzare l'account di servizio con cui viene eseguito il servizio.
Ciò si traduce nella situazione in cui i ruoli di sicurezza così come sono definiti all'interno dell'applicazione (utenti / gruppi AD mappati a determinate autorizzazioni) richiede che questi oggetti AD abbiano anche un accesso a SQL Server e determinate autorizzazioni sul database (db-writer per alcune tabelle, a seconda delle autorizzazioni specifiche nell'app).
Oltre all'amministrazione aggiuntiva, questo crea anche un IMO del rischio per la sicurezza perché l'intero punto dei ruoli di sicurezza dell'applicazione in questa specifica applicazione è di consentire agli utenti l'accesso solo a una parte di una determinata tabella (ad esempio un sottoinsieme degli oggetti) . Ma dal momento che ora hanno un accesso SQL e db_writer su quell'intera tabella, potrebbero ignorare l'app e con una connessione diretta al database potrebbero leggere / modificare i record che non sarebbero autorizzati a visualizzare / manipolare attraverso l'applicazione.
Questo rischio potrebbe quindi (in parte) essere mitigato limitando l'accesso al database a livello di rete, o eventualmente utilizzando i trigger per controllare il nome host e il nome del programma di chiamata, ma per quanto ne so non è completamente sicuro.
L'unico vantaggio che mi viene presentato è che ora è disponibile un audit trail completo nel server SQL su chi ha fatto esattamente cosa. Ma questo è già implementato nell'applicazione e quindi mi sembra un po 'discutibile.
Ho cercato freneticamente qualsiasi informazione su questo e quale sarebbe la migliore pratica. Posso trovare solo materiale basato su ASP / Web ma nulla riguardo questo tipo di applicazione.
È davvero il modo migliore per passare dall'autenticazione al server SQL o l'app deve gestire l'autorizzazione e inviare tutte le richieste del database utilizzando l'account del servizio?
P.S .: Questa è la mia prima domanda su stackexchange, se ho postato sul sito secondario sbagliato o trovi la mia domanda inappropriata, per favore fammelo sapere.