Ermitteln von Sicherheitsunterschieden zwischen zwei SQL Server-Datenbankbenutzern

sqlbulkcopy sql-server sql-server-2012 ssms tsql

Frage

Wir führen SQL Server 2012 / .Net Framework 4.5.1

Wir haben eine Anwendung, die Folgendes tut:

  1. Extrahieren Sie alle Tabellendaten aus einer Quellendatenbank mithilfe einer Instanz von .Net SqlBulkCopy .
  2. Löschen Sie alle Daten in einer Zieldatenbank mit regulären SQL-Anweisungen.
  3. Stellen Sie die Daten aus der Quelldatenbank mithilfe einer Instanz von .Net SqlBulkCopy in der Zieldatenbank bereit.

Der dritte Schritt ist erfolgreich, wenn die SQL-Verbindung mein Active Directory-Konto verwendet, aber die folgende Fehlermeldung fehlschlägt, wenn ein SQL Server-Konto für diesen Zweck verwendet wird: Das Objekt "[SchemaName]. [TableName]" kann nicht gefunden werden existieren oder Sie haben keine Berechtigungen.

Interessanterweise durchläuft der Prozess ungefähr ein Dutzend Tabellen, bevor er eine trifft, die diesen Fehler verursacht. Die manuelle Überprüfung beweist, dass a) die Tabelle auf dem Ziel existiert, b) das Problem, das der Benutzer aus der Tabelle auswählen kann, und c) das Problem, das der Benutzer manuell in die Tabelle einfügen kann, mit dem Standard INSERT INTO [SchemaName]. Spalten]) WERTE ([Werte]) Format. BCP funktioniert auch für diesen Benutzer, aber die Verwendung von SqlBulkCopy aus einer .Net-Anwendung schlägt für denselben Benutzer fehl.

Unser DBA (ein ziemlich erfahrener Typ, soweit ich das beurteilen kann) sagt, dass die Datenbankberechtigungen für die Zieldatenbank IDENTISCH zwischen den beiden Benutzern sind, aber die Realität scheint darauf hinzuweisen, dass dies nicht der Fall ist.

Das Durchsuchen des Problems zeigt, dass der Benutzer die Rollen db_owner oder db_ddladmin haben sollte. Der Benutzer gehört eigentlich beiden.

Wie auch immer, die Lösung des lokalen Problems ist von zweitrangiger Bedeutung, da ich mit meinem AD-Konto fertig werden kann. Was ich wirklich gerne wissen würde, ist, ob es eine eingebackene Möglichkeit gibt, die Unterschiede in den Berechtigungen zwischen zwei Benutzern zu vergleichen. Wenn nicht, kann dies mit irgendeiner T-SQL-Abfrage geschehen?

Danke, Jungs und Mädels!

Beliebte Antwort

Hier ist mein Berechtigungsskript, das ich verwende. Es ist im Allgemeinen der Ansatz, den jeder verwendet, es sei denn, sie haben ein Schema-Vergleichsprodukt über Visual Studio, Red Gate usw. http://www.csvreader.com/posts/permissions_list.php

Spezifizieren Sie das Schema in der Zieltabelle mit SqlBulkCopy? Ist es möglich, dass Sie in eine Schemainstanz eines Benutzers gelangen?

Es ist auch meine Erfahrung, dass SqlBulkCopy nur auswählen und in die Zieltabelle einfügen muss. BCP benötigt die von Ihnen beschriebenen eskalierten Berechtigungen. Dies ist ein weiterer Vorteil von SqlBulkCopy.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum