Interne activeringscontext

Van toepassing op:SQL ServerAzure SQL Managed Instance

In dit artikel wordt de uitvoeringscontext beschreven voor een opgeslagen procedure die wordt gestart door interne activering.

Beveiligingscontext

Een wachtrij die is geconfigureerd voor activering, moet ook de gebruiker opgeven als welke de opgeslagen activeringsprocedure wordt uitgevoerd. SQL Server imiteert deze gebruiker voordat de opgeslagen procedure wordt gestart.

Wanneer de opgeslagen procedure ook een EXECUTE AS component opgeeft, vinden er twee imitaties plaats. SQL Server imiteert eerst de gebruiker die is opgegeven voor de wachtrij en voert de opgeslagen procedure uit. Wanneer de opgeslagen procedure wordt uitgevoerd, imiteert de procedure de gebruiker die is opgegeven in de EXECUTE AS component van de procedure.

De gebruiker die is opgegeven voor een externe servicebinding, is over het algemeen een andere gebruiker dan de gebruiker die is opgegeven voor activering. De vereiste machtigingen voor elke gebruiker verschillen ook. De externe servicebindingsgebruiker heeft geen toestemming nodig om te lezen uit de wachtrij of opgeslagen procedures uit te voeren in de database, terwijl de gebruiker die is opgegeven voor activering geen toestemming nodig heeft om berichten naar de service te verzenden. Zie Identiteits- en toegangsbeheer (Service Broker) en Service Broker-dialoogvensterbeveiliging voor meer informatie over gebruikersmachtigingen.

Sessie-instellingen

Service Broker voert intern geactiveerde serviceprogramma's uit op een achtergrondsessie die verschilt van de verbinding die het bericht heeft gemaakt. De opties die voor deze sessie zijn ingesteld, zijn de standaardopties voor de database.

Binnen een sessie die door Service Broker is gestart, schrijft SQL Server de uitvoer van PRINT en RAISERROR instructies naar het SQL Server-foutenlogboek. Service Broker biedt geen parameters voor een geactiveerde opgeslagen procedure. Service Broker beschouwt geen retourwaarden van een geactiveerde opgeslagen procedure en verwerkt geen resultatensets van een geactiveerde opgeslagen procedure.

Transactiecontext

Een geactiveerde opgeslagen procedure is verantwoordelijk voor het beheren van transacties. SQL Server start geen transactie voordat de opgeslagen procedure wordt geactiveerd en de opgeslagen procedure wordt uitgevoerd in een andere transactiecontext dan de interne bewerking waarmee de procedure wordt geactiveerd. Zie Transactionele berichten voor een bespreking van het beheren van transacties in geactiveerde opgeslagen procedures.

Foutdetectie

Een geactiveerde opgeslagen procedure moet berichten ontvangen uit de wachtrij die de procedure heeft geactiveerd. Als de opgeslagen procedure wordt afgesloten zonder berichten te ontvangen, of als de wachtrijmonitor detecteert dat de opgeslagen procedure geen berichten ontvangt na een korte time-out, beschouwt de wachtrijmonitor de opgeslagen procedure als mislukt. In dit geval stopt de wachtrijmonitor met het activeren van de opgeslagen procedure.

Beeldscherm

Als u wilt controleren of de gebruiker de activeringsprocedure uitvoert, kunt u uitgebreide gebeurtenissen (de broker_activation gebeurtenis, met username en server_principal_name acties) of de sys.dm_broker_activated_tasks dynamische beheerweergave gebruiken, die de database principal_id retourneert die in de wachtrij is geconfigureerd.