Du får ett 7399 och 7300 felmeddelande vid åtkomst till en länkad server

Gäller för: Windows Vista UltimateWindows Vista Enterprise 64-bit EditionHyper-V Server 2008

Symptom


Tänk dig följande situation:
  • Har du en SQL Server-instans som är installerad på en dator med Windows Vista eller senare operativsystem.
  • På den här instansen av SQL Server kan du konfigurera en länkad server till en OLEDB-datakälla med hjälp av en OLE DB-provider för datakällan.
  • OLEDB-provider har konfigurerats för att instantieras utanför SQL Server-processen. Vanligen är detta standard för de flesta OLE DB-providers utom SQL Native Client. Detta kan kontrolleras med hjälp av alternativet Tillåt inprocess som kan ställas in med hjälp av leverantörens egenskaper i SQL Server Management Studio.
  • Säkerhet för länkad server är konfigurerad för att använda den göras med hjälp av säkerhetskontexten för den inloggningen aktuella alternativ.
I det här fallet om icke privilegierad användare loggar in på SQL Server-instans med Windows-autentisering och försöker komma åt en länkad server kommer de få ett felmeddelande som liknar följande:
Msg 7399, nivå 16, tillstånd 1, rad 1Den OLE DB-provider < OLEDB providernamn > för länkad server < länkad servernamn > rapporterade ett fel. Providern inte ge någon information om felet. Msg 7330, nivå 16, tillstånd 2, rad 1Cannot hämta en rad från OLE DB-provider < OLEDB providernamn > för länkad server.
Observera: I detta sammanhang en icke-privilegierad användare är en standardanvändare som inte tillhör en grupp för privilegierad åtkomst på Windows-nivå (till exempel: administratörer)

Orsak


När en OLE DB-provider som körs utanför processen hanterar kommunikationen mellan proxy sida process där OLE DB konsumenten är bosatt, och stub-sida process där OLE DB-provider finns i OLE DB-gränssnittet Remoting DLL-filen (msdaps.dll). I den aktuella implementeringen. OLE DB Remoting använder namngivna filen mappning objekt för att överföra raduppsättningen OLE DB-datakällor. På sidan proxy och stub-sidan körs i olika sessioner på grund av Session 0-isolering på system som kör Vista eller en senare version av operativsystemet, och därmed OLE DB Remoting måste använda en global för proxy-stub-kommunikation på dessa system. Men eftersom användarkontot inte har behörighet att skapa en global filobjekt mappning i angivna länkad server configuration proxy-stub-kommunikation kan inte initieras leder till de felmeddelanden som beskrivs i Symptom i denna artikel.

Lösning


Du kan lösningen på problemet med någon av följande metoder:lösning 1: Konfigurera OLEDB-providern ska köras i processen. Obs: Du kan inte använda denna lösning för OLE DB-providers som bygger på .net versioner som är tidigare än 4.0. Lösning 2: tilldela användarna användarrättigheten ”skapa globala objekt”. Gör så här:
  1. Klicka på Start, peka på Administrationsverktygoch klicka sedan på Lokal säkerhetsprincip.
  2. Expandera Lokala principeroch klicka sedan på Tilldelning av användarrättigheter.
  3. Dubbelklicka på Skapa globala objekti den högra rutan.
  4. Klicka på Lägg tilli dialogrutan Inställning för lokal säkerhetsprincip .
  5. Klicka på användarkonton som du vill lägga till och klicka på Lägg tilli dialogrutan Välj användare eller grupp .
  6. Klicka på OK.
Status: Microsoft arbetar på att lösa detta problem i framtida versioner av produkten.