Delen via


Uw database draagbaar maken met behulp van ingesloten databases

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-database in Microsoft Fabric Preview

Gebruik ingesloten databasegebruikers om SQL Server- en Azure SQL Database-verbindingen te verifiëren op databaseniveau. Een ingesloten database is een database die is geïsoleerd van andere databases en van het exemplaar van SQL Server of SQL Database (en de master database) die als host fungeert voor de database.

SQL Server ondersteunt ingesloten databasegebruikers voor zowel Windows- als SQL Server-verificatie. Wanneer u SQL Database gebruikt, combineert u ingesloten databasegebruikers met firewallregels op databaseniveau.

In dit artikel worden de voordelen van het gebruik van het ingesloten databasemodel vergeleken met het traditionele aanmeldings-/gebruikersmodel en firewallregels op serverniveau. Specifieke scenario's, beheerbaarheid of bedrijfslogica van toepassingen vereisen mogelijk nog steeds het gebruik van het traditionele aanmeldings-/gebruikersmodel en firewallregels op serverniveau.

Traditioneel aanmeldings- en gebruikersmodel

In het traditionele verbindingsmodel maken Windows-gebruikers of -leden van Windows-groepen verbinding met de database-engine door gebruikers- of groepsreferenties op te geven die zijn geverifieerd door Windows. Of gebruikers kunnen zowel een naam als wachtwoord opgeven en verbinding maken met behulp van SQL Server-verificatie. In beide gevallen moet de hoofddatabase een aanmelding hebben die overeenkomt met de verbindingsreferenties.

Nadat de Database Engine de Windows-verificatiereferenties bevestigt of de SQL Server-verificatiereferenties verifieert, probeert de verbinding doorgaans verbinding te maken met een gebruikersdatabase. Als u verbinding wilt maken met een gebruikersdatabase, moet de aanmelding worden toegewezen aan een databasegebruiker in de gebruikersdatabase(s). De verbindingsreeks kan ook opgeven dat er verbinding wordt gemaakt met een specifieke database. Dit is optioneel in SQL Server, maar vereist in SQL Database.

Het belangrijkste principe is dat zowel de aanmelding (in de master database) als de gebruiker (in de gebruikersdatabase) moet bestaan en aan elkaar moet zijn gerelateerd. De verbinding met de gebruikersdatabase is afhankelijk van de aanmelding in de master database. Deze afhankelijkheid beperkt de mogelijkheid van de database die moet worden verplaatst naar een ander hostend SQL Server-exemplaar of Een Azure SQL Database-server.

Als er geen verbinding met de master database beschikbaar is (bijvoorbeeld als er een failover wordt uitgevoerd), neemt de totale verbindingstijd toe of treedt er een time-out op voor de verbinding. Een niet-beschikbare verbinding kan de schaalbaarheid van de verbinding verminderen.

Ingesloten databasegebruikersmodel

In het ingesloten databasegebruikersmodel is de aanmelding in de master database niet aanwezig. In plaats daarvan vindt het verificatieproces plaats in de gebruikersdatabase. De databasegebruiker in de gebruikersdatabase heeft geen gekoppelde aanmelding in de master database.

Het ingesloten databasegebruikersmodel ondersteunt zowel Windows-verificatie als SQL Server-verificatie. U kunt deze gebruiken in zowel SQL Server als SQL Database.

Als u verbinding wilt maken als ingesloten databasegebruiker, moet de verbindingsreeks altijd een parameter voor de gebruikersdatabase bevatten. De database-engine gebruikt deze parameter om te weten welke database verantwoordelijk is voor het beheer van het verificatieproces.

De activiteit van de ingesloten databasegebruiker is beperkt tot de verificatiedatabase. Het databasegebruikersaccount moet onafhankelijk worden gemaakt in elke database die de gebruiker nodig heeft. Als u databases wilt wijzigen, moeten SQL Database-gebruikers een nieuwe verbinding maken. Ingesloten databasegebruikers in SQL Server kunnen databases wijzigen als een identieke gebruiker aanwezig is in een andere database.

In Azure ondersteunen SQL Database en Azure Synapse Analytics identiteiten van Microsoft Entra ID (voorheen Azure Active Directory) als ingesloten databasegebruikers. SQL Database ondersteunt ingesloten databasegebruikers die SQL Server-verificatie gebruiken, maar Azure Synapse Analytics niet. Zie Verbinding maken met SQL Database met behulp van Microsoft Entra-verificatie voor meer informatie.

Wanneer u Microsoft Entra-verificatie gebruikt, kunnen gebruikers verbindingen maken vanuit SQL Server Management Studio met behulp van universele Microsoft Entra-verificatie. Beheerders kunnen universele verificatie configureren om meervoudige verificatie te vereisen, waarmee de identiteit wordt geverifieerd met behulp van een telefoongesprek, sms-bericht, smartcard met pincode of mobiele app-melding. Zie Microsoft Entra-meervoudige verificatie gebruikenvoor meer informatie.

Voor SQL Database en Azure Synapse Analytics is de databasenaam altijd vereist in de verbindingsreeks. U hoeft dus de verbindingsreeks niet te wijzigen wanneer u overschakelt van het traditionele model naar het ingesloten databasegebruikersmodel. Voor SQL Server-verbindingen moet de naam van de database worden toegevoegd aan de verbindingsreeks, als deze nog niet aanwezig is.

Important

Wanneer u het traditionele model gebruikt, kunnen de functies op serverniveau en machtigingen op serverniveau de toegang tot alle databases beperken. Wanneer u het ingesloten databasemodel gebruikt, kunnen database-eigenaren en databasegebruikers met de machtiging ALTER ANY USER toegang verlenen tot de database. Deze machtiging vermindert het toegangsbeheer van aanmeldingen met zeer bevoegde servers en breidt het toegangsbeheer uit met gebruikers van zeer bevoorrechte databases.

Firewalls

SQL Server

Voor SQL Server gelden Windows Firewall-regels voor alle verbindingen en hebben dezelfde gevolgen voor aanmeldingen (traditionele modelverbindingen) en ingesloten databasegebruikers. Zie Windows Firewall configureren voor toegang tot database-engine voor meer informatie over Windows Firewall.

SQL Database-firewalls

SQL Database staat afzonderlijke firewallregels toe voor verbindingen op serverniveau (aanmeldingen) en voor verbindingen op databaseniveau (ingesloten databasegebruikers). Wanneer SQL Database verbinding maakt met een gebruikersdatabase, controleert deze eerst de firewallregels van de database. Als er geen regel is die toegang tot de database toestaat, controleert SQL Database de firewallregels op serverniveau. Voor het controleren van firewallregels op serverniveau is toegang tot de database van master de SQL Database-server vereist.

Firewallregels op databaseniveau, gecombineerd met ingesloten databasegebruikers, kunnen de toegang tot de master database van de server tijdens de verbinding elimineren. Het resultaat is verbeterde schaalbaarheid van verbindingen.

Zie de volgende onderwerpen voor meer informatie over firewallregels voor SQL Database:

Syntax differences

Traditional model Ingesloten databasegebruikersmodel
Wanneer u verbinding hebt met de master database:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Wanneer u vervolgens bent verbonden met een gebruikersdatabase:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Wanneer u bent verbonden met een gebruikersdatabase:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Traditional model Ingesloten databasegebruikersmodel
Een wachtwoord wijzigen in de context van de master database:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
Een wachtwoord wijzigen in de context van de gebruikersdatabase:

ALTER USER user_name WITH PASSWORD = 'strong_password';

SQL Beheerde Instantie

Azure SQL Managed Instance gedraagt zich als on-premises SQL Server in de context van ingesloten databases. Zorg ervoor dat u de context van uw database wijzigt van de hoofddatabase in de gebruikersdatabase wanneer u de ingesloten gebruiker maakt. Daarnaast mogen er geen actieve verbindingen met de gebruikersdatabase zijn wanneer u de insluitingsoptie instelt. Gebruik de volgende code als richtlijn.

Warning

In het volgende voorbeeldscript wordt een kill instructie gebruikt om alle gebruikersprocessen in de database te sluiten. Zorg ervoor dat u de gevolgen van dit script begrijpt en dat het geschikt is voor uw bedrijf voordat u het uitvoert. Zorg er ook voor dat er geen andere verbindingen actief zijn in uw SQL Managed Instance-database, omdat het script andere processen die worden uitgevoerd op de database zal verstoren.

USE master;

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

DECLARE @kill_string varchar(8000) = '';
SELECT @kill_string = @kill_string + 'KILL ' + str(session_id) + '; '  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test') and is_user_process = 1;

EXEC(@kill_string);
GO

sp_configure 'contained database authentication', 1;  
GO
 
RECONFIGURE;  
GO 

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

ALTER DATABASE Test
SET containment=partial

USE Test;  
GO 

CREATE USER Carlo  
WITH PASSWORD='Enterpwdhere*'  

SELECT containment_desc FROM sys.databases
WHERE name='Test'

Remarks

  • Ingesloten databasegebruikers moeten zijn ingeschakeld voor elk exemplaar van SQL Server. Zie Ingesloten databaseverificatie (serverconfiguratieoptie) voor meer informatie.
  • Ingesloten databasegebruikers en aanmeldingen met niet-overlappende namen kunnen naast elkaar bestaan in uw toepassingen.
  • Stel dat een aanmelding in de master database de naam1 heeft. Als u een ingesloten databasegebruiker met de naam naam1 maakt en een databasenaam wordt opgegeven in de verbindingsreeks, wordt de context van de databasegebruiker gekozen via de aanmeldingscontext om verbinding te maken met de database. De ingesloten databasegebruiker heeft dus voorrang op aanmeldingen met dezelfde naam.
  • In SQL Database kan de naam van de ingesloten databasegebruiker niet hetzelfde zijn als de naam van het serverbeheerdersaccount.
  • Het beheerdersaccount van de SQL Database-server kan nooit een ingesloten databasegebruiker zijn. De serverbeheerder heeft voldoende machtigingen voor het maken en beheren van ingesloten databasegebruikers. De serverbeheerder kan machtigingen verlenen aan ingesloten databasegebruikers in gebruikersdatabases.
  • Omdat ingesloten databasegebruikers principals op databaseniveau zijn, moet u ingesloten databasegebruikers maken in elke database waarin u ze zou gebruiken. De identiteit is beperkt tot de database. De identiteit is onafhankelijk (in alle aspecten) van een gebruiker met dezelfde naam en hetzelfde wachtwoord in een andere database op dezelfde server.
  • Gebruik dezelfde sterkte van wachtwoorden die u normaal gesproken zou gebruiken voor aanmeldingen.