Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server, auf dem alte Versionen gespeicherter Prozeduren ausgeführt werden

Basierend auf dem Stored Proc-Code und zusätzlichen Informationen, die wir unter EDIT2 sehen das wissen wir:

  1. BULK INSERT wird aufgerufen
  2. "Der Benutzer hat immer noch den Fehler erhalten, keinen Zugriff auf BULK INSERT zu haben, aber alle anderen haben den Fehler bekommen, den wir gemeldet haben"

Bestimmte T-SQL-Funktionen (z. B. OPENQUERY, OPENROWSET, BULK INSERT ). , usw.) Führen Sie eine Vorabvalidierung der Sicherheit durch. Ein Benutzer muss über die Berechtigungen INSERT und ADMINISTER BULK OPERATIONS und in einigen Fällen über ALTER TABLE verfügen, um BULK INSERT auszuführen. Darüber hinaus werden die NTFS-/Active Directory-Berechtigungen für den Benutzer (bei Verwendung der Windows-Authentifizierung) oder das „Anmelden als“-Konto des SQL Server-Dienstes (bei Verwendung der SQL Server-Authentifizierung) validiert, um sicherzustellen, dass die Datei lesbar ist.

Die Vorab-Validierung (oder zumindest das, was ich "Vorab-Validierung" nenne) tritt auf, wenn der Stored Proc (oder die Funktion usw.) aufgerufen wird und nicht, wenn jede Zeile ausgeführt wird. Wenn an dieser Stelle ein Fehler auftritt, wird kein Code in Ihrer Proc ausgeführt, einschließlich RAISERROR oder INSERT in die Protokolltabelle.

Daher ist die wahrscheinlichste Ursache für das angezeigte Verhalten, dass dem Benutzer, der das Problem hat, entweder a) eine oder mehrere der erforderlichen SQL Server-Berechtigungen oder b) die entsprechenden NTFS-Berechtigungen oder c) alle fehlen oben.

Angesichts der Tatsache, dass der Fehler darin bestand, keinen Zugriff auf BULK INSERT zu haben, vermute ich, dass diesem bestimmten Benutzer eine oder mehrere SQL Server-Berechtigungen fehlen.