Megosztás a következőn keresztül:


SQL Server biztonsági mentése URL-re S3-kompatibilis objektumtárolóhoz

A következőkre vonatkozik: SQL Server 2022 (16.x)

Ez a cikk bemutatja azokat a fogalmakat, követelményeket és összetevőket, amelyek az S3-kompatibilis objektumtárolás biztonsági mentési célként való használatához szükségesek. A biztonsági mentési és visszaállítási funkció elméletileg hasonló az SQL Server azure Blob Storage URL-címére történő biztonsági mentéséhez , mint biztonsági mentési eszköztípushoz.

A támogatott platformokról további információt S3-kompatibilis objektumtárolásiszolgáltatóinál talál.

Áttekintés

Az SQL Server 2022 (16.x) az adatplatform objektumtárolási integrációját mutatja be, így az Azure Storage mellett az SQL Server S3-kompatibilis objektumtárolóval is integrálható. Az integráció biztosításához az SQL Server támogatja az S3-összekötőt, amely az S3 REST API használatával csatlakozik az S3-kompatibilis objektumtároló bármely szolgáltatóhoz. Az SQL Server 2022 (16.x) kibővíti a meglévő BACKUP/RESTORE TO/FROM URL-szintaxist, és támogatja az új S3-összekötőt a REST API használatával.

Az S3-kompatibilis erőforrásokra mutató URL-címeket az s3:// előtaggal látják el, hogy jelezzék, az S3-összekötőt használják. Az URL-címek, amelyek s3://-vel kezdődnek, mindig azt feltételezik, hogy az alapul szolgáló protokoll https.

Cikkszámok és fájlméret korlátozásai

Az adatok tárolásához az S3-kompatibilis objektumtároló szolgáltatónak több blokkban, úgynevezett részekben kell felosztania a fájlokat, hasonlóan az Azure Blob Storage blokkblobjaihoz .

Minden fájl 10 000 részre osztható fel, az egyes részek mérete 5 MB és 20 MB között mozog, ezt a tartományt a T-SQL BACKUP parancs vezérli a MAXTRANSFERSIZE paraméteren keresztül. Az alapértelmezett érték MAXTRANSFERSIZE 10 MB, ezért az egyes részek alapértelmezett mérete 10 MB. Bár ez az érték a maximális átviteli méretet adja meg, nem garantálja, hogy minden elküldött rész 10 MB. A rész méretét az adatok szomszédossága befolyásolja. Ha például 4 MB adat található 2 MB adat mellett, akkor a rendszer 6 MB-ot küld az 5 MB-os minimális méretrész elérése után. Másik lehetőségként, ha 12 MB szomszédos dat van, a rendszer a maximális méretig (10 MB) küld adatokat, a fennmaradó 2 MB pedig a következő részben lesz elküldve. Az S3-összekötő mindig a lehető legnagyobb adatméretet próbálja elküldeni, de soha nem haladja meg az MAXTRANSFERSIZE értéket.

Egyetlen fájl maximális támogatott mérete 10 000 rész * MAXTRANSFERSIZEeredménye, ha nagyobb fájl biztonsági mentéséhez van szükség, akkor legfeljebb 64 URL-címet kell felosztania vagy csíkosítania. A fájlok végső maximális támogatott mérete 10 000 rész * * MAXTRANSFERSIZE URL-cím.

Megjegyzés:

Az értékek módosításához MAXTRANSFERSIZE a TÖMÖRÍTÉS használata szükséges.

Az S3-végpont előfeltételei

Az S3-végpontot a következőképpen kell konfigurálni:

  • A TLS-t konfigurálni kell. Feltételezzük, hogy az összes kapcsolat biztonságosan lesz továbbítva HTTPS-en keresztül, nem HTTP-en keresztül. A végpontot az SQL Server operációsrendszer-gazdagépre telepített tanúsítvány ellenőrzi.
  • Az S3-kompatibilis objektumtárolóban létrehozott hitelesítő adatok a művelet végrehajtásához szükséges megfelelő engedélyekkel. A tárrétegen létrehozott felhasználó és jelszó neve a Access Key ID és a Secret Key ID. Mindkét félnek hitelesítenie kell magát az S3-végponton.
  • Legalább egy tároló vödör konfigurálva van. A tárhelyek nem hozhatók létre vagy konfigurálhatók az SQL Server 2022 környezetében (16.x).

Biztonság

Biztonsági mentési engedélyek

Az SQL Server S3-kompatibilis objektumtárolóhoz való csatlakoztatásához két engedélykészletet kell létrehozni, egyet az SQL Serveren és a tárolási rétegen.

Az SQL Serveren a biztonsági mentési vagy VISSZAÁLLÍTÁSi parancsok kiadásához használt felhasználói fióknak db_backupoperator adatbázis-szerepkörben kell lennie , és módosítania kell a hitelesítő adatokra vonatkozó engedélyeket.

A tárolási rétegen:

  • Az AWS S3-ban hozzon létre egy egyéni szerepkört, és konkrétan adja meg, hogy melyik S3 API igényel hozzáférést. A biztonsági mentéshez és a visszaállításhoz a következő engedélyek szükségesek: ListBucket (Tallózás), PutObject (Írás – biztonsági mentéshez).
  • Más S3-kompatibilis tárolókban a felhasználónak (Access Key ID) ListBucket és WriteOnly engedélyekkel is rendelkeznie kell.

Engedélyek visszaállítása

Ha a visszaállított adatbázis nem létezik, a felhasználónak rendelkeznie CREATE DATABASE kell engedéllyel a VISSZAÁLLÍTÁS végrehajtásához. Ha az adatbázis létezik, a RESTORE engedélyek alapértelmezés szerint az adatbázis és a sysadmindbcreator rögzített kiszolgálói szerepkörök tagjai, valamint az adatbázis tulajdonosa (dbo) számára lesznek alapértelmezettek.

A VISSZAÁLLÍTÁSi engedélyek olyan szerepkörökhöz lesznek adva, amelyekben a tagsági adatok mindig könnyen elérhetők a kiszolgáló számára. Mivel a rögzített adatbázisszerepkör-tagság csak akkor ellenőrizhető, ha az adatbázis elérhető és sértetlen, ami nem mindig történik meg a VISSZAÁLLÍTÁS végrehajtásakor, a db_owner rögzített adatbázis-szerepkör tagjai nem rendelkeznek VISSZAÁLLÍTÁSi engedélyekkel.

A tárolási rétegen:

  • Az AWS S3-ban hozzon létre egy egyéni szerepkört, és konkrétan adja meg, hogy melyik S3 API igényel hozzáférést. A biztonsági mentéshez és a visszaállításhoz a következő engedélyek szükségesek: ListBucket (Tallózás), GetObject (Olvasás – visszaállításhoz).
  • Más S3-kompatibilis tárolókban a felhasználónak (Access Key ID) a ListBucket és a ReadOnly engedélyekkel is rendelkeznie kell.

Támogatott funkciók

A BACKUP és RESTORE támogatott funkcióinak magas szintű áttekintése:

  1. Egyetlen biztonsági mentési fájl URL-címenként legfeljebb 200 000 MiB lehet (20 MB-ra MAXTRANSFERSIZE van állítva).
  2. A biztonsági másolatok eloszthatók legfeljebb 64 URL-címre.
  3. A tükrözés támogatott, de csak az URL-címek között. Az URL-cím és a DISK használatával történő tükrözés nem támogatott.
  4. A tömörítés támogatott és ajánlott.
  5. A titkosítás támogatott.
  6. Az URL-címről az S3-kompatibilis objektumtárolóval való visszaállításnak nincs méretkorlátozása.
  7. Adatbázis visszaállításakor a MAXTRANSFERSIZE biztonsági mentési fázis során hozzárendelt érték határozza meg.
  8. Az URL-címek megadhatóak virtuális gazdagép- vagy elérésiút-stílus formátumban is.
  9. WITH CREDENTIAL támogatott.
  10. REGION támogatott, az alapértelmezett érték pedig a us-east-1.
  11. MAXTRANSFERSIZE 5 MB és 20 MB közötti tartományba esik. Az S3-összekötő alapértelmezett értéke 10 MB.

A biztonsági mentés támogatott argumentumai

WITH beállítások S3 végpont Jegyzetek
BLOCKSIZE Igen MAXTRANSFERSIZE határozza meg az alkatrész méretét.
BUFFERCOUNT Igen
COMPRESSION Igen
COPY_ONLY Igen
CREDENTIAL Igen
DESCRIPTION Igen
DIFFERENTIAL Igen
ENCRYPTION Igen
FILE_SNAPSHOT Nem
MAXTRANSFERSIZE Igen Az érték 5 MB (5 242 880 bájt) és 20 MB (20 971 520 bájt) között lehet; az alapértelmezett 10 MB (10 485 760 bájt).
MEDIADESCRIPTION Igen
MEDIANAME Igen
MIRROR TO Igen Csak egy másik URL-címmel működik, MIRROR és URLDISK nem támogatott.
NAME Igen
NOFORMAT / FORMAT Igen
NOINIT / INIT Nem A hozzáfűzés nem támogatott. A biztonsági mentés felülírásához használja WITH FORMAT.
NO_CHECKSUM / CHECKSUM Igen
NO_TRUNCATE Igen
REGION Igen Az alapértelmezett érték a us-east-1. Ezt BACKUP_OPTIONS-el kell használni.
STATS Igen

A visszaállítás támogatott argumentumai

WITH beállítások S3 végpont Jegyzetek
BLOCKSIZE Igen MAXTRANSFERSIZE határozza meg az alkatrész méretét.
BUFFERCOUNT Nem
CHECKSUM / NO_CHECKSUM Igen
CREDENTIAL Igen
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER Igen
FILE Nem A logikai nevek nem támogatottak RESTORE FROM URL.
FILESTREAM Igen
KEEP_CDC Igen
KEEP_REPLICATION Igen
LOADHISTORY Igen
MAXTRANSFERSIZE Nem
MEDIANAME Igen
MEDIAPASSWORD Nem Az SQL Server 2012 előtti verziókban készített biztonsági másolatokhoz szükséges.
MOVE Igen
PARTIAL Igen
PASSWORD Nem Az SQL Server 2012 előtti verziókban készített biztonsági másolatokhoz szükséges.
RECOVERY / NORECOVERY / STANDBY Igen
REGION Igen Az alapértelmezett érték a us-east-1. Ezt RESTORE_OPTIONS-el kell használni.
REPLACE Igen
RESTART Igen
RESTRICTED_USER Igen
REWIND / NOREWIND Nem
STATS Igen
STOP_ON_ERROR / CONTINUE_AFTER_ERROR Igen
STOPAT / STOPATMARK / STOPBEFOREMARK Igen
UNLOAD / NOUNLOAD Nem

Régió

Az S3-kompatibilis objektumtároló-szolgáltató képes meghatározni a gyűjtő helyének egy adott régióját. Ennek az opcionális paraméternek a használata nagyobb rugalmasságot biztosíthat, ha megadja, hogy az adott gyűjtő melyik régióhoz tartozik. Ehhez a paraméterhez a WITH-t együtt kell használni BACKUP_OPTIONS-gyel vagy RESTORE_OPTIONS-vel. Ezekhez a beállításokhoz JSON formátumban kell deklarálni az értéket. Ez lehetővé teszi azokat a forgatókönyveket, amelyekben egy S3-kompatibilis tárolószolgáltató ugyanazt az univerzális URL-címet használhatja, de több régióban is elosztható. Ebben az esetben a biztonsági mentési vagy visszaállítási parancspont a megadott régiókra mutat anélkül, hogy módosítania kellene az URL-címet.

Ha nincs deklarált érték, us-east-1 a program alapértelmezés szerint hozzárendeli.

Példa biztonsági mentésre:

WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Visszaállítási példa:

WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Linux-támogatás

Az SQL Server a WinHttp használja az általa használt HTTP REST API-k kliensének megvalósításához. Az operációsrendszer-tanúsítványtárolóra támaszkodik a végpont által http(s) bemutatott TLS-tanúsítványok érvényesítéséhez. A Linuxon futó SQL Serveren azonban a hitelesítésszolgáltatót egy előre meghatározott helyre kell helyezni, ahol létre kell hozni /var/opt/mssql/security/ca-certificates, csak az első 50 tanúsítvány tárolható és támogatott ebben a mappában. A hitelesítésszolgáltatónak a helyén kell lennie az SQL Server-folyamat elindítása előtt.

Az SQL Server az indítás során beolvassa a tanúsítványokat a mappából, és hozzáadja őket a megbízhatósági tárolóhoz.

Csak a rendszergazda írhat a mappába, míg a mssql felhasználó tudnia kell olvasni.

Nem támogatott funkciók

  • A nem biztonságos http URL-címmel rendelkező S3-kompatibilis objektumtárolók biztonsági mentése nem támogatott. Az ügyfelek az S3-gazdagép url-címmel https való beállításáért felelősek, és ezt a végpontot az SQL Server operációsrendszer-gazdagépre telepített tanúsítvány érvényesíti.
  • Az S3-kompatibilis objektumtárolók biztonsági mentése nem támogatott az SQL Server Express és az SQL Server Express Speciális szolgáltatások kiadásával.

Korlátozások

Az S3-kompatibilis objektumtárolóval történő biztonsági mentés és visszaállítás jelenlegi korlátozásai a következők:

  • Az S3 Standard REST API jelenlegi korlátozása miatt az ügyfél S3-kompatibilis objektumtárolójában (folyamatban lévő többrészes feltöltési művelet miatt) létrehozott ideiglenes, nem véglegesített adatfájlok biztonsági mentési hibák esetén nem lesznek eltávolítva. Ezek a nem véglegesített adatblokkok továbbra is megmaradnak az S3-kompatibilis objektumtárolóban abban az esetben, ha a BACKUP T-SQL parancs meghiúsul vagy megszakad. Ha a biztonsági mentés sikeres, az objektumtároló automatikusan eltávolítja ezeket az ideiglenes fájlokat a végső biztonsági mentési fájl létrehozásához. Egyes S3-kompatibilis tárolószolgáltatók ideiglenes fájlokat kezelnek a szemétgyűjtő rendszerükön keresztül.
  • A teljes URL-cím hossza legfeljebb 259 karakter lehet. Ebben a korlátozásban a teljes karakterlánc szerepel, beleértve az s3:// összekötő nevét is. A használható korlát tehát 254 karakter. Javasoljuk azonban, hogy a lekérdezési paraméterek lehetséges bevezetése érdekében tartsa be a 200 karakteres korlátot.
  • Az SQL-hitelesítő adatok neve 128 karakterből áll UTF-16 formátumban.
  • A titkos kulcs azonosítója nem lehet : karakter.

Útvonalstílus és virtuális host stílus

Az S3-ra való biztonsági mentés támogatja, hogy az URL-címek az elérési út stílusában vagy a virtuális gazdagép stílusában íródjanak.

Példa elérésiút-stílusra: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Példa virtuális gazdagépre: s3://<bucket>.<domain>/<backup_file_name>

Példák

Hitelesítő adatok létrehozása

  • A hitelesítő adatok nevének meg kell adnia a tárolási útvonalat, és ehhez a tárolási platformtól függően több szabvány is létezik.
  • Az IDENTITÁSnak mindig az S3-összekötő használatakor kell lennie 'S3 Access Key' .
  • A hozzáférési kulcs azonosítója és a titkos kulcs azonosítója nem tartalmazhat kettőspontot. A hozzáférési kulcs azonosítója és titkos kulcs azonosítója az S3-kompatibilis objektumtárolóban létrehozott felhasználó és jelszó.
  • Csak alfanumerikus értékek engedélyezettek.
  • A hozzáférési kulcs azonosítójának megfelelő engedélyekkel kell rendelkeznie az S3-kompatibilis objektumtárolóhoz.

A CREATE CREDENTIAL használatával kiszolgálószintű hitelesítő adatokat hozhat létre az S3-kompatibilis objektumtároló végponttal való hitelesítéshez.

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

Az AWS S3 azonban két különböző URL-szabványt támogat.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (alapértelmezett)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Az AWS S3 hitelesítő adatainak sikeres létrehozásához több módszer is elérhető.

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Vagy

CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Biztonsági mentés az URL-címre

Az alábbi példa teljes adatbázis-biztonsági mentést hajt végre az objektumtár végpontja felé, több fájlra kiterjedően:

BACKUP DATABASE <db_name>
TO      URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    FORMAT -- overwrite
,       STATS               = 10
,       COMPRESSION;

Visszaállítás URL-címről

Az alábbi példa egy adatbázis-visszaállítást hajt végre az objektumtároló végpontjának helyére:

RESTORE DATABASE <db_name>
FROM    URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    REPLACE -- overwrite
,       STATS  = 10;

Titkosítási és tömörítési lehetőségek

Az alábbi példa bemutatja, hogyan lehet biztonsági másolatot készíteni és visszaállítani az AdventureWorks2025 adatbázist 20 MB-os titkosítással MAXTRANSFERSIZE és tömörítéssel:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO

CREATE CERTIFICATE AdventureWorks2022Cert
    WITH SUBJECT = 'AdventureWorks2022 Backup Certificate';
GO
-- Backup database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH FORMAT, MAXTRANSFERSIZE = 20971520, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)
GO

-- Restore database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH REPLACE

Régió használata biztonsági mentéshez és visszaállításhoz

Az alábbi példa bemutatja, hogyan lehet a AdventureWorks2025 adatbázist a REGION_OPTIONS használatával biztonsági másolatot készíteni és visszaállítani.

A régiót az egyes BACKUP / RESTORE parancsok között paraméterezheti. Jegyezze fel az S3-specifikus régió sztringjét a következőképpen: BACKUP_OPTIONS és RESTORE_OPTIONS, például '{"s3": {"region":"us-west-2"}}'. Az alapértelmezett régió az us-east-1. Egy egyszerű példa:

-- Backup Database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}'

-- Restore Database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.ldf'
, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'

Például:

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH
    BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
, COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

RESTORE DATABASE AdventureWorks2022_1 
FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
, STATS = 10, RECOVERY
, REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
GO