Determinare le differenze di sicurezza tra due utenti del database dei server SQL

sqlbulkcopy sql-server sql-server-2012 ssms tsql

Domanda

Stiamo eseguendo SQL Server 2012 / .Net Framework 4.5.1

Abbiamo un'applicazione che effettua le seguenti operazioni:

  1. Estrai tutti i dati della tabella da un database sorgente usando un'istanza di SqlBulkCopy di .Net.
  2. Elimina tutti i dati in un database di destinazione utilizzando normali istruzioni SQL.
  3. Distribuire i dati dal database di origine al database di destinazione utilizzando un'istanza di .Net SqlBulkCopy.

Il terzo passaggio ha esito positivo quando la connessione SQL utilizza il mio account di Active Directory, ma non riesce con il seguente messaggio di errore quando si utilizza un account di SQL Server creato per questo scopo: Impossibile trovare l'oggetto "[SchemaName]. [TableName]" perché non esiste o non hai permessi.

È interessante notare che il processo attraversa circa una dozzina di tabelle prima di colpirne una che causa questo errore. La verifica manuale dimostra che a) La tabella esiste sul target, b) L'utente del problema può selezionare dalla tabella e c) l'utente con problemi può inserire manualmente nella tabella con lo standard INSERT INTO [SchemaName]. [TableName] ([ Colonne]) Formato VALUES ([Valori]). BCP funziona anche per quell'utente, ma l'utilizzo di SqlBulkCopy da un'applicazione .NET non riesce per lo stesso utente.

Il nostro DBA (un ragazzo piuttosto esperto, per quanto ne so, in realtà) dice che le autorizzazioni del database sul database di destinazione sono IDENTICHE tra i due utenti, ma la realtà sembrerebbe suggerire che non è così.

Googling il problema mostra che l'utente dovrebbe avere i ruoli db_owner o db_ddladmin. L'utente appartiene effettivamente a entrambi.

In ogni caso, risolvere il problema locale è di secondaria importanza, dal momento che posso ottenere ciò che devo fare con il mio account AD. Quello che mi piacerebbe davvero sapere è se esiste un modo per confrontare le differenze nelle autorizzazioni tra due utenti. In caso contrario, questo può essere fatto con una query T-SQL di qualche tipo?

Grazie, ragazzi e ragazze!

Risposta popolare

Ecco il mio script di permessi che uso. È generalmente l'approccio che tutti usano, a meno che non abbiano uno schema per confrontare i prodotti tramite Visual Studio, Red Gate, ecc. Http://www.csvreader.com/posts/permissions_list.php

Stai specificando lo schema nella tabella di destinazione con SqlBulkCopy? È possibile che tu stia imbattendo in un'istanza dello schema di proprietà dell'utente?

È stata anche la mia esperienza che SqlBulkCopy richiede solo selezionare e inserire nella tabella di destinazione. BCP richiede le autorizzazioni escalated che hai descritto, che è un altro vantaggio di SqlBulkCopy.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché