sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server som kör gamla versioner av lagrade procedurer

Baserat på den lagrade proc-koden och ytterligare information som vi ser under EDIT2 vi vet att:

  1. BULK INSERT anropas
  2. "användaren fick fortfarande felet om att han inte hade tillgång till BULK INSERT men alla andra fick felet som vi tog upp"

Vissa T-SQL-funktioner (t.ex. OPENQUERY, OPENROWSET, BULK INSERT , etc) gör förhandsvalidering på säkerhet. En användare måste ha behörigheterna INSERT och ADMINISTER BULK OPERATIONS, och i vissa fall ALTER TABLE, för att kunna köra BULK INSERT. Dessutom kommer NTFS/Active Directory-behörigheter för användaren (om Windows-autentisering används) eller "Logga in som"-kontot för SQL Server-tjänsten (om du använder SQL Server-autentisering) att valideras för att säkerställa att filen är läsbar.

Förvalidering (eller åtminstone vad jag kallar "förvalidering") sker när den lagrade procen (eller funktionen, etc) anropas och inte när varje rad exekveras. Om ett fel inträffar vid denna tidpunkt kommer ingen av koden i din Proc att köras, inklusive RAISERROR eller INSERT i loggtabellen.

Därför är den mest troliga orsaken till beteendet du ser att användaren som har problemet saknar antingen a) en eller flera av de nödvändiga SQL Server-behörigheterna, eller b) lämpliga NTFS-behörigheter, eller c) alla ovan.

Med tanke på att felet handlade om att inte ha tillgång till BULK INSERT, är min gissning att just den här användaren saknar en eller flera av SQL Server-behörigheterna.



  1. mysql UPDATE-sats - overhead för samma värden?

  2. Villkor för antal associerade poster i SQL

  3. Hur kopierar man strukturen för en tabell till en annan med främmande nyckelbegränsningar i psql?

  4. Utfasad MySQL-tillägg i PHP 5.5.x