Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
I den här artikeln beskrivs utförandekontexten för en lagrad procedur som startas av intern aktivering.
Säkerhetskontext
En kö som konfigurerats för aktivering måste också ange den användare som den aktiverings lagrade proceduren körs som. SQL Server personifierar den här användaren innan den lagrade proceduren påbörjas.
När den lagrade proceduren också anger en EXECUTE AS sats sker två personifieringar. SQL Server personifierar först den användare som angetts för kön och kör den lagrade proceduren. När den lagrade proceduren körs personifierar proceduren användaren som anges i satsen i EXECUTE AS proceduren.
Användaren som anges för en fjärrtjänstbindning är vanligtvis en annan användare än den användare som angetts för aktivering. De behörigheter som krävs för varje användare skiljer sig också åt. Fjärrtjänstbindningsanvändaren behöver inte behörighet att läsa från kön eller köra lagrade procedurer i databasen, medan användaren som angetts för aktivering inte behöver behörighet att skicka meddelanden till tjänsten. Mer information om användarbehörigheter finns i Identitets- och åtkomstkontroll (Service Broker) och Dialogsäkerhet för Service Broker.
Sessionsinställningar
Service Broker kör internt aktiverade tjänstprogram på en bakgrundssession som skiljer sig från anslutningen som skapade meddelandet. De alternativ som angetts för den här sessionen är standardalternativen för databasen.
I en session som startades av Service Broker skriver SQL Server utdata PRINT och RAISERROR -instruktioner till SQL Server-felloggen. Service Broker tillhandahåller inte parametrar för en aktiverad lagrad procedur. Service Broker överväger inte att returnera värden från en aktiverad lagrad procedur och bearbetar inte resultatuppsättningar från en aktiverad lagrad procedur.
Transaktionskontext
En aktiverad lagrad procedur ansvarar för att hantera transaktioner. SQL Server startar inte en transaktion innan den lagrade proceduren aktiveras, och den lagrade proceduren körs i en annan transaktionskontext än den interna åtgärd som aktiverar proceduren. En diskussion om hur du hanterar transaktioner i aktiverade lagrade procedurer finns i Transaktionsmeddelanden.
Feldetektering
En aktiverad sparad procedur måste ta emot meddelanden från kön som aktiverade proceduren. Om den lagrade proceduren avslutas utan att ta emot meddelanden, eller om köövervakaren upptäcker att den lagrade proceduren inte tar emot meddelanden efter en kort timeout, anser köövervakaren att den lagrade proceduren har misslyckats. I det här fallet slutar köövervakaren att aktivera den lagrade proceduren.
Bildskärm
Om du vill kontrollera att användaren kör aktiveringsproceduren kan du antingen använda Utökade händelser ( broker_activation händelsen, med username och server_principal_name åtgärder) eller sys.dm_broker_activated_tasks dynamisk hanteringsvy som returnerar databasen principal_id som konfigurerats i kön.