Share via


Ingesloten databases

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Een ingesloten database is een database die is geïsoleerd van andere databases en van het exemplaar van SQL Server dat als host fungeert voor de database. SQL Server helpt gebruikers om hun database op vier manieren te isoleren van het exemplaar.

  • Veel van de metagegevens die een database beschrijft, worden onderhouden in de database. (Naast of in plaats van metagegevens in de hoofddatabase te onderhouden.)

  • Alle metagegevens worden gedefinieerd met dezelfde sortering.

  • Gebruikersverificatie kan worden uitgevoerd door de database, waardoor de databases minder afhankelijk zijn van de aanmeldingen van het exemplaar van SQL Server.

  • De SQL Server-omgeving (DMV's, XEvents, enzovoort) rapporteert en kan reageren op insluitingsgegevens.

Sommige functies van gedeeltelijk ingesloten databases, zoals het opslaan van metagegevens in de database, zijn van toepassing op alle SQL Server-databases. Sommige voordelen van gedeeltelijk ingesloten databases, zoals verificatie op databaseniveau en catalogussortering, moeten zijn ingeschakeld voordat ze beschikbaar zijn. Gedeeltelijke insluiting is ingeschakeld met behulp van de instructies CREATE DATABASE en ALTER DATABASE of met behulp van SQL Server Management Studio. Zie Migreren naar een gedeeltelijk ingesloten database voor meer informatie over het inschakelen van gedeeltelijke database-insluiting.

Gedeeltelijk ingesloten databaseconcepten

Een volledig ingesloten database bevat alle instellingen en metagegevens die nodig zijn om de database te definiëren en heeft geen configuratieafhankelijkheden van het exemplaar van de SQL Server Database Engine waarop de database is geïnstalleerd. In eerdere versies van SQL Server kan het scheiden van een database van het exemplaar van SQL Server tijdrovend zijn en vereist gedetailleerde kennis van de relatie tussen de database en het exemplaar van SQL Server. Gedeeltelijk ingesloten databases maken het gemakkelijker om een database te scheiden van het exemplaar van SQL Server en andere databases.

De ingesloten database beschouwt functies met betrekking tot insluiting. Elke door de gebruiker gedefinieerde entiteit die alleen afhankelijk is van functies die zich in de database bevinden, wordt beschouwd als volledig ingesloten. Elke door de gebruiker gedefinieerde entiteit die afhankelijk is van functies die zich buiten de database bevinden, wordt beschouwd als niet-beveiligd. (Zie de sectie Containment verderop in dit onderwerp voor meer informatie.)

De volgende termen zijn van toepassing op het ingesloten databasemodel.

Databasegrens
De grens tussen een database en het exemplaar van SQL Server. De grens tussen een database en andere databases.

Opgenomen
Een element dat zich volledig in de databasegrens bevindt.

Onbeheerst
Een element dat de databasegrens overschrijdt.

Niet-ingesloten database
Een database met insluiting ingesteld op NONE. Alle databases in eerdere versies dan SQL Server 2012 (11.x) zijn niet opgenomen. Standaard is voor alle SQL Server 2012 (11.x) en latere databases een insluiting ingesteld op NONE.

Gedeeltelijk ingesloten database
Een gedeeltelijk ingesloten database is een ingesloten database die bepaalde functies kan toestaan die de databasegrens overschrijden. SQL Server bevat de mogelijkheid om te bepalen wanneer de insluitingsgrens wordt overschreden.

Ingesloten gebruiker
Er zijn twee typen gebruikers voor ingesloten databases.

  • Ingesloten databasegebruiker met wachtwoord

    Ingesloten databasegebruikers met wachtwoorden worden geverifieerd door de database. Zie Ingesloten databasegebruikers: een draagbare database maken voor meer informatie.

  • Windows-principals

    Geautoriseerde Windows-gebruikers en -leden van geautoriseerde Windows-groepen kunnen rechtstreeks verbinding maken met de database en hoeven zich niet aan te melden in de hoofddatabase . De database vertrouwt de verificatie door Windows.

Gebruikers op basis van aanmeldingen in de hoofddatabase kunnen toegang krijgen tot een ingesloten database, maar dat zou een afhankelijkheid van het SQL Server-exemplaar maken. Daarom vereist het maken van gebruikers op basis van aanmeldingen gedeeltelijke insluiting.

Belangrijk

Het inschakelen van gedeeltelijk ingesloten databases delegeert de controle over de toegang tot het exemplaar van SQL Server aan de eigenaren van de database. Zie Aanbevolen beveiligingsprocedures met ingesloten databasesvoor meer informatie.

Database grens
Omdat gedeeltelijk ingesloten databases de databasefunctionaliteit scheiden van die van het exemplaar, is er een duidelijk gedefinieerde lijn tussen deze twee elementen, de databasegrens genoemd.

Binnen de databasegrens bevindt zich het databasemodel, waar de databases worden ontwikkeld en beheerd. Voorbeelden van entiteiten die zich in de database bevinden, zijn systeemtabellen zoals sys.tables, ingesloten databasegebruikers met wachtwoorden en gebruikerstabellen in de huidige database waarnaar wordt verwezen door een tweedelige naam.

Buiten de databasegrens bevindt zich het beheermodel, dat betrekking heeft op functies en beheer op exemplaarniveau. Voorbeelden van entiteiten die zich buiten de databasegrens bevinden, zijn systeemtabellen zoals sys.endpoints, gebruikers die zijn toegewezen aan aanmeldingen en gebruikerstabellen in een andere database waarnaar wordt verwezen door een driedelige naam.

Insluiting

Gebruikersentiteiten die zich volledig in de database bevinden, worden als ingesloten beschouwd. Entiteiten die zich buiten de database bevinden of die afhankelijk zijn van interactie met functies buiten de database, worden beschouwd als niet-bevlekt.

Over het algemeen vallen gebruikersentiteiten in de volgende categorieën van insluiting:

  • Volledig opgenomen gebruikersentiteiten (entiteiten die nooit de databasegrens overschrijden), bijvoorbeeld sys.indexes. Alle code die gebruikmaakt van deze functies of objecten die alleen naar deze entiteiten verwijzen, is ook volledig opgenomen.

  • Niet-ingesloten gebruikersentiteiten (entiteiten die de databasegrens overschrijden), bijvoorbeeld sys.server_principals of een server-principal (aanmelding) zelf. Alle code die gebruikmaakt van deze entiteiten of functies die naar deze entiteiten verwijzen, wordt niet ingesloten.

Gedeeltelijk ingesloten database

De functie ingesloten database is momenteel alleen beschikbaar in een gedeeltelijk ingesloten status. Een gedeeltelijk ingesloten database is een ingesloten database waarmee niet-gemarkeerde functies kunnen worden gebruikt.

Gebruik de weergave sys.dm_db_uncontained_entities en sys.sql_modules (Transact-SQL) om informatie over onbevatte objecten of kenmerken te retourneren. Door de insluitingsstatus van de elementen van uw database te bepalen, kunt u ontdekken welke objecten of functies moeten worden vervangen of gewijzigd om insluiting te bevorderen.

Belangrijk

Omdat bepaalde objecten een standaardinstelling van insluiting van NONE hebben, kan deze weergave vals-positieve resultaten opleveren.

Het gedrag van gedeeltelijk ingesloten databases verschilt het meest van die van niet-ingesloten databases met betrekking tot sortering. Zie Ingesloten databasesorteringen voor meer informatie over sorteringsproblemen.

Voordelen van het gebruik van gedeeltelijk ingesloten databases

Er zijn problemen en complicaties met betrekking tot de niet-ingesloten databases die kunnen worden opgelost met behulp van een gedeeltelijk ingesloten database.

Databaseverplaatsing

Een van de problemen die optreden bij het verplaatsen van databases, is dat sommige belangrijke informatie niet beschikbaar kan zijn wanneer een database van het ene exemplaar naar het andere wordt verplaatst. Aanmeldingsgegevens worden bijvoorbeeld opgeslagen in het exemplaar in plaats van in de database. Wanneer u een niet-ingesloten database van het ene exemplaar naar een ander exemplaar van SQL Server verplaatst, blijft deze informatie achter. U moet de ontbrekende gegevens identificeren en verplaatsen met uw database naar het nieuwe exemplaar van SQL Server. Dit proces kan lastig en tijdrovend zijn.

De gedeeltelijk ingesloten database kan belangrijke informatie opslaan in de database, zodat de database nog steeds over de informatie beschikt nadat deze is verplaatst.

Opmerking

Een gedeeltelijk ingesloten database kan documentatie bieden over de functies die worden gebruikt door een database die niet kan worden gescheiden van het exemplaar. Dit omvat een lijst met andere onderling gerelateerde databases, systeeminstellingen die de database nodig heeft, maar die niet kunnen worden opgenomen, enzovoort.

Voordeel van ingesloten databasegebruikers met AlwaysOn

Door de banden met het exemplaar van SQL Server te verminderen, kunnen gedeeltelijk ingesloten databases nuttig zijn tijdens een failover wanneer u AlwaysOn-beschikbaarheidsgroepen gebruikt.

Door ingesloten gebruikers te maken, kan de gebruiker rechtstreeks verbinding maken met de ingesloten database. Dit is een zeer belangrijke functie in scenario's met hoge beschikbaarheid en herstel na noodgevallen, zoals in een AlwaysOn-oplossing. Als het om beheerde gebruikers gaat, kunnen mensen in het geval van failover verbinding maken met de secundaire zonder dat er aanmeldingen op het exemplaar dat de secundaire host, hoeven te worden gemaakt. Dit biedt een onmiddellijk voordeel. Zie Overzicht van AlwaysOn-beschikbaarheidsgroepen (SQL Server) en vereisten, beperkingen en aanbevelingen voor AlwaysOn-beschikbaarheidsgroepen (SQL Server) voor meer informatie.

Initiële databaseontwikkeling

Omdat een ontwikkelaar mogelijk niet weet waar een nieuwe database wordt geïmplementeerd, vermindert het beperken van de geïmplementeerde milieu-effecten op de database het werk en de zorg voor de ontwikkelaar. In het niet-ingesloten model moet de ontwikkelaar rekening houden met mogelijke milieu-effecten op de nieuwe database en het programma dienovereenkomstig. Door gedeeltelijk ingesloten databases te gebruiken, kunnen ontwikkelaars echter gevolgen op exemplaarniveau detecteren voor de database en problemen op exemplaarniveau voor de ontwikkelaar.

Databasebeheer

Door database-instellingen in de database te onderhouden, in plaats van in de hoofddatabase, kan elke database-eigenaar meer controle hebben over de database, zonder dat de eigenaar van de database sysadmin toestemming geeft.

Beperkingen

Gedeeltelijk ingesloten databases staan de volgende functies niet toe.

  • Replicatie, vastleggen van wijzigingen of bijhouden van wijzigingen.

  • Genummerde procedures

  • Schemagebonden objecten die afhankelijk zijn van ingebouwde functies met sorteringswijzigingen

  • Bindingswijziging als gevolg van sorteringswijzigingen, waaronder verwijzingen naar objecten, kolommen, symbolen of typen.

Waarschuwing

Tijdelijke opgeslagen procedures zijn momenteel toegestaan. Omdat tijdelijke opgeslagen procedures de containment schenden, wordt verwacht dat ze niet ondersteund zullen worden in toekomstige versies van een ingesloten database.

Database-insluiting identificeren

Er zijn twee hulpprogramma's waarmee u de insluitingsstatus van de database kunt identificeren. De sys.dm_db_uncontained_entities (Transact-SQL) is een weergave waarin alle mogelijk niet-bevlekte entiteiten in de database worden weergegeven. De database_uncontained_usage gebeurtenis treedt op wanneer een werkelijke niet-bevlekte entiteit tijdens de runtime wordt geïdentificeerd.

sys.dm_db_uncontained_entities

In deze weergave ziet u alle entiteiten in de database die het potentieel hebben om niet te worden bevlekt, zoals entiteiten die de databasegrens overschrijden. Dit omvat de gebruikersentiteiten die objecten buiten het databasemodel kunnen gebruiken. Omdat de insluiting van sommige entiteiten (bijvoorbeeld die met dynamische SQL) pas tijdens de uitvoeringstijd kan worden bepaald, kan de weergave echter enkele entiteiten tonen die niet daadwerkelijk ingesloten zijn. Zie sys.dm_db_uncontained_entities (Transact-SQL)voor meer informatie.

database-ongecontaineerde-gebruik gebeurtenis

Deze XEvent vindt plaats wanneer een niet-gemarkeerde entiteit tijdens de runtime wordt geïdentificeerd. Dit omvat entiteiten die afkomstig zijn uit clientcode. Deze XEvent vindt alleen plaats voor daadwerkelijk niet-bevatte entiteiten. De gebeurtenis vindt echter alleen plaats tijdens runtime. Daarom worden niet-gecontroleerde gebruikerseenheden die u niet hebt geactiveerd, niet door deze XEvent geïdentificeerd.

Zie ook

Gewijzigde functies (ingesloten database)
Ingesloten databasesorteringen
Aanbevolen beveiligingsprocedures met ingesloten databases
Migreren naar een gedeeltelijk ingesloten database
Ingesloten databasegebruikers: een draagbare database maken