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
Dialogsäkerhet ger kryptering, fjärrautentisering och fjärrauktorisering för en specifik konversation. När en konversation använder dialogsäkerhet krypterar Service Broker alla meddelanden som skickas utanför en SQL Server-instans. Service Broker-konversationer använder dialogsäkerhet som standard.
Grundläggande om dialogsäkerhet
Med dialogsäkerhet för Service Broker kan ditt program använda autentisering, auktorisering eller kryptering för en enskild dialogkonversation (eller dialogruta). Som standard använder alla dialogkonversationer dialogsäkerhet. När du påbörjar en dialogruta kan du uttryckligen tillåta att en dialogruta fortsätter utan dialogsäkerhet genom att inkludera ENCRYPTION = OFF -satsen i -instruktionen BEGIN DIALOG CONVERSATION . Men om det finns en fjärrtjänstbindning för tjänsten som konversationen riktar sig mot använder dialogrutan säkerhet även när ENCRYPTION = OFF.
För en dialogruta som använder säkerhet krypterar Service Broker alla meddelanden som skickas utanför en SQL Server-instans. Meddelanden som finns kvar i en SQL Server-instans krypteras aldrig. I dialogsäkerhet behöver endast den databas som är värd för den initierande tjänsten och databasen som är värd för måltjänsten ha åtkomst till de certifikat som används för säkerhet. En instans som utför vidarebefordran av meddelanden krävs alltså inte för att kunna dekryptera de meddelanden som instansen vidarebefordrar.
Service Broker tillhandahåller två typer av dialogsäkerhet, fullständig säkerhet och anonym säkerhet. För konversationer som använder dialogsäkerhet tillhandahåller Service Broker fjärrauktorisering för att mappa fjärrsidan av konversationen till en lokal användare.
Meddelanden krypteras i nätverket när konversationen använder fullständig säkerhet eller anonym säkerhet. De effektiva rättigheterna i måldatabasen och den strategi som används för meddelandekryptering skiljer sig dock något mellan de två metoderna.
Oavsett om konversationen använder fullständig säkerhet eller anonym säkerhet krypteras meddelandetexten med en symmetrisk sessionsnyckel som genereras för den specifika konversationen. Endast nycklarna krypteras med kryptering med privat nyckel med hjälp av certifikatet som tillhandahålls för Dialog Security. Service Broker utför också en kontroll av meddelandeintegritet för att identifiera skadade meddelanden eller manipulering.
SQL Server skapar en sessionsnyckel för en konversation som använder dialogsäkerhet. För att skydda sessionsnyckeln medan den lagras i databasen krypterar Service Broker sessionsnyckeln med huvudnyckeln för databasen. Om en databashuvudnyckel inte är tillgänglig förblir meddelanden för konversationen transmission_status i med ett fel tills en databashuvudnyckel har skapats eller tills konversationen överskrider tidsgränsen. Därför måste båda databaserna som deltar i konversationen innehålla huvudnycklar, även när databaserna finns i samma instans. Om den initierande databasen inte innehåller någon huvudnyckel misslyckas dialogrutan. Om måldatabasen inte innehåller en huvudnyckel finns meddelanden kvar i överföringskö för den initierande databasen. Det senaste överföringsfelet för dessa meddelanden anger orsaken till att meddelandena inte kan levereras. Använd antingen parametern ENCRYPTION = OFF för att skapa en okrypterad dialogruta eller använd följande kommando för att skapa en databashuvudnyckel:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
För enkelhetens skull tillåter Service Broker att säkra konversationer som finns kvar i en enda databas kan fortsätta oavsett om databasen innehåller en huvudnyckel. Två olika databaser kan flyttas till olika SQL Server-instanser under konversationens livslängd, men en konversation i en enskild databas finns alltid kvar i databasen. Därför kan konversationen fortsätta.
Fullständig säkerhet
Fullständig säkerhet hjälper till att skydda den initierande tjänsten från att skicka meddelanden till en obetrodd databas och hjälper till att skydda måltjänsten från att ta emot meddelanden från en databas som inte är betrodd. Service Broker krypterar meddelanden som överförs via nätverket när konversationen använder fullständig säkerhet.
Fullständig säkerhet ger identifiering för både den initierande tjänsten och måltjänsten. Fullständig säkerhet kräver att den initierande tjänsten litar på måltjänsten och kräver också att måltjänsten litar på den initierande tjänsten. Till exempel kan en tjänst som beställer delar från en leverantör kräva att beställningsprogrammet ska lita på leverantörstjänsten och att leverantörstjänsten ska lita på beställningsprogrammet.
Databasadministratörer upprättar förtroende genom att utbyta certifikat som innehåller offentliga nycklar. För fullständig dialogsäkerhet innehåller varje sida av konversationen en privat nyckel för en lokal användare och en offentlig nyckel för en fjärranvändare. Databasen som är värd för den initierande tjänsten innehåller en fjärrtjänstbindning. Den här fjärrtjänstbindningen anger den lokala användare som äger certifikatet som motsvarar den privata nyckeln i fjärrdatabasen. Därför körs åtgärder för den initierande tjänsten som den avsedda användaren i måldatabasen.
Måldatabasen innehåller en användare. Den här användaren äger ett certifikat som motsvarar en privat nyckel som ägs av den användare som äger den initierande tjänsten. Därför körs åtgärder för måltjänstens räkning i den initierande databasen som den användare som äger den initierande tjänsten.
För dialogrutor som använder fullständig säkerhet genererar varje sida av konversationen en sessionsnyckel. Det första meddelandet i varje riktning innehåller sessionsnyckeln, krypterad med en nyckelutbytesnyckel, enligt beskrivningen i Certifikat och Service Broker.
Anonym säkerhet
Anonym säkerhet skyddar den initierande tjänsten mot att skicka meddelanden till en databas som inte är betrodd. Service Broker krypterar meddelanden som överförs via nätverket när konversationen använder anonym säkerhet.
Anonym säkerhet identifierar måltjänsten för den initierande tjänsten, men identifierar inte den initierande tjänsten för måltjänsten.
Ett program som skickar arbetsorder kan till exempel behöva garantera att mottagaren av arbetsordern är det avsedda målet, men måldatabasen kanske inte behöver ge några särskilda privilegier för en tjänst som skickar arbetsorder. I det här fallet måste databasen som innehåller den initierande tjänsten innehålla en fjärrtjänstbindning för måltjänsten.
Eftersom måltjänsten inte kan verifiera identiteten för den initierande tjänsten körs åtgärder för den initierande tjänsten som medlem i den fasta databasrollen som är offentlig i måldatabasen. Måldatabasen får ingen information om användaren som initierade konversationen. Måldatabasen behöver inte innehålla ett certifikat för användaren som initierar konversationen.
För dialogrutor som använder anonym säkerhet använder båda sidor av konversationen sessionsnyckeln som genereras av den initierande databasen. Måldatabasen returnerar inte en sessionsnyckel till den initierande databasen.
Säkerhetskontexter för dialogsäkerhet
Fjärrauktorisering för Service Broker styr fjärråtkomst till en enskild tjänst. Fjärrauktorisering avgör säkerhetskontexten inom vilken inkommande meddelanden till en SQL Server-instans skickas till en tjänst.
Service Broker använder alltid fjärrauktorisering för en säker konversation som inte sker helt i en SQL Server-instans. Den dialogsäkerhet som har konfigurerats för konversationen avgör säkerhetskontexten som Service Broker använder för fjärrauktorisering.
Service Broker använder inte fjärrauktorisering när konversationen förblir inom en SQL Server-instans, även om fjärrauktorisering har konfigurerats. För en konversation i en instans är SQL Server-säkerhetsobjekten redan tillgängliga för SQL Server, så det finns inget behov av att använda fjärrauktorisering för att fastställa rätt säkerhetskontext för Service Broker-åtgärder. Som beskrivs tidigare i det här avsnittet skapar Service Broker dock en sessionsnyckel så att konversationen kan fortsätta om en av databaserna flyttas till en annan instans under konversationen.
För en konversation som använder anonym säkerhet körs anslutningen som medlem i den fasta databasrollen som är offentlig i måldatabasen. I det här fallet måste den fasta databasrollen som är offentlig ha behörighet att skicka ett meddelande till tjänsten. Rollen behöver dock inga andra behörigheter i databasen.
För en konversation som använder fullständig säkerhet fungerar anslutningen på varje sida av konversationen med behörigheterna för den användare som anges i fjärrtjänstbindningen. Om en fjärrtjänstbindning till exempel associerar tjänstnamnet InventoryService med användaren InventoryServiceRemoteUseranvänder SQL Server säkerhetskontexten för InventoryServiceRemoteUser att placera meddelanden för InventoryService programmet i kön för måltjänsten.
För bättre säkerhet är den användare som äger den privata nyckeln för en tjänst vanligtvis en annan användare än den användare som angetts för aktivering. En användare som äger en privat nyckel behöver bara behörighet att lägga till ett meddelande i kön, det vill ex. SEND behörighet för tjänsten som använder kön. Användaren som har angetts för aktivering har däremot de behörigheter som krävs för att utföra det begärda arbetet och skicka ett svar. I föregående exempel InventoryServiceRemoteUser kräver inte behörigheter för att köra frågor mot inventeringstabellen eller skicka ett returmeddelande. Användaren behöver bara behörighet att skicka ett meddelande till kön som InventoryService använder. Aktivering av lagrad procedur sker i en annan session med de autentiseringsuppgifter som anges i kön. Inga autentiseringsuppgifter behöver delas mellan den session som innehåller meddelandet och den session som bearbetar meddelandet.
Skapa en säker dialogruta
När Service Broker upprättar en dialogruta mellan två databaser måste den initierande tjänsten upprätta en användarkontext i måldatabasen så att den kan placera meddelanden i målkön. Den här användarkontexten avgör om den initierande tjänsten har behörighet att öppna en dialogruta till målet.
Det mest flexibla sättet att göra detta är att skapa ett certifikat och en fjärrtjänstbindning. Mer information om hur du skapar ett certifikat finns i SKAPA CERTIFIKAT. Mer information om hur du skapar en fjärrtjänstbindning finns i SKAPA FJÄRRTJÄNSTBINDNING.
Anmärkning
Om säkerhetskontexten inte är korrekt konfigurerad förblir meddelanden som skickas i dialogrutan i sys.transmission_queue den initierande tjänsten med följande felmeddelande i transmission_status kolumnen: The server principal '%.*ls' is not able to access the database '%.*ls' under the current security context.