Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Az SQL Server Remote BLOB Store (RBS) egy opcionális bővítményösszetevő, amely lehetővé teszi, hogy az adatbázis-rendszergazdák bináris nagyméretű objektumokat tároljanak árualapú tárolási megoldásokban, nem pedig közvetlenül a fő adatbázis-kiszolgálón.
Az RBS megtalálható az SQL Server telepítési adathordozóján, de az SQL Server telepítőprogramja nem telepíti. A telepítőfájl megkereséséhez keressen RBS.msi a telepítési adathordozón.
Ha nem rendelkezik SQL Server telepítési adathordozóval, az RBS-t az alábbi helyek egyikén töltheti le:
| SQL Server-verzió | RBS letöltési hely |
|---|---|
| SQL Server 2016 (13.x) | SQL Server 2016 (13.x) SP2 szolgáltatáscsomag |
| SQL Server 2017 (14.x) | SQL Server 2017 (14.x) szolgáltatáscsomag |
| SQL Server 2019 (15.x) | SQL Server 2019 (15.x) RBS letöltési oldal |
Miért érdemes az RBS-t?
Optimalizált adatbázis-tárolás és -teljesítmény
A BLOBok adatbázisban való tárolása nagy mennyiségű fájlterületet és költséges kiszolgálói erőforrásokat is igénybe vehet. Az RBS a BLOB-okat egy ön által kiválasztott dedikált tárolási megoldásba továbbítja, és az adatbázisban lévő BLOB-okra mutató hivatkozásokat tárol. Ez felszabadítja a kiszolgálói tárolót a strukturált adatok számára, és felszabadítja a kiszolgálói erőforrásokat az adatbázis-műveletekhez.
Hatékony BLOB-kezelés
Számos RBS-funkció támogatja a tárolt BLOB-kezelést:
A BLOB-ok kezelését ACID (atomi, konzisztens, izolálható, tartós) tranzakciók biztosítják.
A BLOB-k gyűjteményekbe vannak rendezve.
A rendszer a szemétgyűjtést, a konzisztencia-ellenőrzést és más karbantartási funkciókat is tartalmazza.
Standardizált API
Az RBS olyan API-kat határoz meg, amelyek szabványosított programozási modellt biztosítanak az alkalmazások számára a BLOB-tárolók eléréséhez és módosításához. Minden BLOB-tároló megadhat egy saját szolgáltatói kódtárat, amely az RBS-ügyfélkódtárhoz csatlakozik, és meghatározza a BLOB-k tárolásának és elérésének módját.
Számos külső tárolómegoldás-gyártó fejlesztett ki olyan RBS-szolgáltatókat, amelyek megfelelnek ezeknek a standard API-knak, és támogatják a BLOB Storage-t különböző tárolási platformokon.
RBS-követelmények
- Az RBS megköveteli az SQL Server Enterprise-t ahhoz a fő adatbázis-kiszolgálóhoz, amelyben a BLOB-metaadatok tárolódnak. Ha azonban a megadott FILESTREAM-szolgáltatót használja, maguk is tárolhatják a BLOB-okat az SQL Server Standardban. Az SQL Serverhez való csatlakozáshoz az RBS-hez az SQL Server 2014 (12.x) és az SQL Server 2016 13-os (13.x) ODBC-illesztőprogramjának legalább 11-es verziójára van szükség. Az illesztőprogramok az SQL Server ODBC-illesztőprogramjának letöltésében érhetők el.
Az RBS tartalmaz egy FILESTREAM-szolgáltatót, amely lehetővé teszi, hogy az RBS használatával blobokat tároljon az SQL Server egy példányán. Ha az RBS-t szeretné használni a BLOB-k egy másik tárolási megoldásban való tárolására, akkor az adott tárolási megoldáshoz kifejlesztett külső RBS-szolgáltatót kell használnia, vagy egy egyéni RBS-szolgáltatót kell fejlesztenie az RBS API használatával.
RBS-biztonság
Az SQL Remote Blob Storage csapat blogja jó információforrás erről a funkcióról. Az RBS biztonsági modelljét az RBS biztonsági modell bejegyzése ismerteti.
Egyéni szolgáltatók
Ha egyéni szolgáltatót használ a BLOB-k SQL Serveren kívüli tárolására, győződjön meg arról, hogy az egyéni szolgáltató által használt tárolóeszköznek megfelelő engedélyekkel és titkosítási beállításokkal védi a tárolt BLOB-okat.
Hitelesítőadat-tároló szimmetrikus kulcsa
Ha egy szolgáltató megköveteli a hitelesítőadat-tárolóban tárolt titkos kulcs beállítását és használatát, az RBS szimmetrikus kulccsal titkosítja a szolgáltató titkos kulcsait, amelyekkel az ügyfél engedélyt kaphat a szolgáltató blobtárolójára.
Az RBS 2016 egy AES_128 szimmetrikus kulcsot használ. Az SQL Server 2016 (13.x) nem teszi lehetővé új TRIPLE_DES kulcsok létrehozását, kivéve a visszamenőleges kompatibilitási okokból. További információ: SZIMMETRIKUS KULCS LÉTREHOZÁSA (Transact-SQL).
Az RBS 2014 és a korábbi verziók olyan hitelesítőadat-tárolót használnak, amely az elavult TRIPLE_DES szimmetrikus kulcs algoritmusával titkosítja a titkos kulcsokat. Ha jelenleg TRIPLE_DES használ, a Microsoft azt javasolja, hogy növelje a biztonságot a jelen témakör lépéseit követve, hogy a kulcsot erősebb titkosítási módszerre forgassa.
Az RBS hitelesítőadat-tároló szimmetrikus kulcstulajdonságait az alábbi Transact-SQL utasítás végrehajtásával határozhatja meg az RBS-adatbázisban:
SELECT * FROM sys.symmetric_keys WHERE name = 'mssqlrbs_encryption_skey'; Ha az utasítás kimenete azt mutatja, hogy a TRIPLE_DES továbbra is használatban van, akkor forgassa el ezt a kulcsot.
A szimmetrikus kulcs elforgatása
Az RBS használatakor rendszeresen forgassa el a hitelesítőadat-tároló szimmetrikus kulcsát. Ez egy gyakori biztonsági ajánlott eljárás a szervezeti biztonsági szabályzatok betartásához. Az RBS hitelesítőadat-tároló szimmetrikus kulcsának elforgatásának egyik módja az alábbi szkript használata az RBS-adatbázisban. Ezzel a szkripttel erősebb titkosítási szilárdságú tulajdonságokra, például algoritmusra vagy kulcshosszra migrálhat. Készítsen biztonsági másolatot az adatbázisról a kulcsváltás előtt. A szkript következtetése szerint rendelkezik néhány ellenőrzési lépéssel.
Ha a biztonsági szabályzatok eltérő kulcstulajdonságokat (például algoritmust vagy kulcshosszt) igényelnek a megadottaktól, akkor a szkript sablonként is használható. Módosítsa a kulcstulajdonságokat két helyen: 1) az ideiglenes kulcs létrehozása 2) az állandó kulcs létrehozása.
RBS-erőforrások
RBS blog
Az RBS blog további információkat nyújt az RBS megértéséhez, üzembe helyezéséhez és karbantartásához.
Kulcsrotációs szkript
Ez a példa létrehoz egy tárolt eljárást, amely sp_rotate_rbs_symmetric_credential_key a jelenleg használt RBS hitelesítőadat-tároló szimmetrikus kulcsának cseréjére szolgál
az ön választása szerint. Ezt akkor érdemes megtennie, ha olyan biztonsági szabályzat van, amely megköveteli a
kulcsok rendszeres elforgatása, vagy ha bizonyos algoritmusokra vonatkozó követelmények vonatkoznak.
Ebben a tárolt eljárásban a AES_256 használatával használt szimmetrikus kulcs lecseréli az aktuálisat. A szimmetrikus kulcs cseréje miatt a titkos kulcsokat újra kell titkosítani az új kulccsal. Ez a tárolt eljárás a titkos kulcsokat is újra titkosítja. Az adatbázisról a kulcsváltás előtt biztonsági másolatot kell készíteni.
CREATE PROC sp_rotate_rbs_symmetric_credential_key
AS
BEGIN
BEGIN TRANSACTION;
BEGIN TRY
CLOSE ALL SYMMETRIC KEYS;
/* Prove that all secrets can be re-encrypted, by creating a
temporary key (#mssqlrbs_encryption_skey) and create a
temp table (#myTable) to hold the re-encrypted secrets.
Check to see if all re-encryption worked before moving on.*/
CREATE TABLE #myTable(sql_user_sid VARBINARY(85) NOT NULL,
blob_store_id SMALLINT NOT NULL,
credential_name NVARCHAR(256) COLLATE Latin1_General_BIN2 NOT NULL,
old_secret VARBINARY(MAX), -- holds secrets while existing symmetric key is deleted
credential_secret VARBINARY(MAX)); -- holds secrets with the new permanent symmetric key
/* Create a new temporary symmetric key with which the credential store secrets
can be re-encrypted. These will be used once the existing symmetric key is deleted.*/
CREATE SYMMETRIC KEY #mssqlrbs_encryption_skey
WITH ALGORITHM = AES_256 ENCRYPTION BY
CERTIFICATE [cert_mssqlrbs_encryption];
OPEN SYMMETRIC KEY #mssqlrbs_encryption_skey
DECRYPTION BY CERTIFICATE [cert_mssqlrbs_encryption];
INSERT INTO #myTable
SELECT cred_store.sql_user_sid, cred_store.blob_store_id, cred_store.credential_name,
encryptbykey(
key_guid('#mssqlrbs_encryption_skey'),
decryptbykeyautocert(cert_id('cert_mssqlrbs_encryption'),
NULL, cred_store.credential_secret)
),
NULL
FROM [mssqlrbs_resources].[rbs_internal_blob_store_credentials] AS cred_store;
IF( EXISTS(SELECT * FROM #myTable WHERE old_secret IS NULL))
BEGIN
PRINT 'Abort. Failed to read some values';
SELECT * FROM #myTable;
ROLLBACK;
END;
ELSE
BEGIN
/* Re-encryption worked, so drop the existing RBS credential store
symmetric key and replace it with a new symmetric key.*/
DROP SYMMETRIC KEY [mssqlrbs_encryption_skey];
CREATE SYMMETRIC KEY [mssqlrbs_encryption_skey]
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE [cert_mssqlrbs_encryption];
OPEN SYMMETRIC KEY [mssqlrbs_encryption_skey]
DECRYPTION BY CERTIFICATE [cert_mssqlrbs_encryption];
/*Re-encrypt using the new permanent symmetric key.
Verify if encryption provided a result*/
UPDATE #myTable
SET [credential_secret] =
encryptbykey(key_guid('mssqlrbs_encryption_skey'), decryptbykey(old_secret))
IF( EXISTS(SELECT * FROM #myTable WHERE credential_secret IS NULL))
BEGIN
PRINT 'Aborted. Failed to re-encrypt some values'
SELECT * FROM #myTable
ROLLBACK
END
ELSE
BEGIN
/* Replace the actual RBS credential store secrets with the newly
encrypted secrets stored in the temp table #myTable.*/
SET NOCOUNT ON;
DECLARE @sql_user_sid varbinary(85);
DECLARE @blob_store_id smallint;
DECLARE @credential_name varchar(256);
DECLARE @credential_secret varbinary(256);
DECLARE curSecretValue CURSOR
FOR SELECT sql_user_sid, blob_store_id, credential_name, credential_secret
FROM #myTable ORDER BY sql_user_sid, blob_store_id, credential_name;
OPEN curSecretValue;
FETCH NEXT FROM curSecretValue
INTO @sql_user_sid, @blob_store_id, @credential_name, @credential_secret
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE [mssqlrbs_resources].[rbs_internal_blob_store_credentials]
SET [credential_secret] = @credential_secret
FROM [mssqlrbs_resources].[rbs_internal_blob_store_credentials]
WHERE sql_user_sid = @sql_user_sid AND blob_store_id = @blob_store_id AND
credential_name = @credential_name
FETCH NEXT FROM curSecretValue
INTO @sql_user_sid, @blob_store_id, @credential_name, @credential_secret
END
CLOSE curSecretValue
DEALLOCATE curSecretValue
DROP TABLE #myTable;
CLOSE ALL SYMMETRIC KEYS;
DROP SYMMETRIC KEY #mssqlrbs_encryption_skey;
/* Verify that you can decrypt all encrypted credential store entries using the certificate.*/
IF( EXISTS(SELECT * FROM [mssqlrbs_resources].[rbs_internal_blob_store_credentials]
WHERE decryptbykeyautocert(cert_id('cert_mssqlrbs_encryption'),
NULL, credential_secret) IS NULL))
BEGIN
print 'Aborted. Failed to verify key rotation'
ROLLBACK;
END;
ELSE
COMMIT;
END;
END;
END TRY
BEGIN CATCH
PRINT 'Exception caught: ' + cast(ERROR_NUMBER() as nvarchar) + ' ' + ERROR_MESSAGE();
ROLLBACK
END CATCH
END;
GO
A tárolt eljárással elforgathatja az sp_rotate_rbs_symmetric_credential_key RBS hitelesítőadat-tároló szimmetrikus kulcsát, és a titkos kulcsok a kulcs elforgatása előtt és után is változatlanok maradnak.
SELECT *, decryptbykeyautocert(cert_id('cert_mssqlrbs_encryption'), NULL, credential_secret)
FROM [mssqlrbs_resources].[rbs_internal_blob_store_credentials];
EXEC sp_rotate_rbs_symmetric_credential_key;
SELECT *, decryptbykeyautocert(cert_id('cert_mssqlrbs_encryption'), NULL, credential_secret)
FROM [mssqlrbs_resources].[rbs_internal_blob_store_credentials];
/* See that the RBS credential store symmetric key properties reflect the new changes*/
SELECT * FROM sys.symmetric_keys WHERE name = 'mssqlrbs_encryption_skey';
Lásd még:
Távoli blobtároló és Always On rendelkezésre állási csoportok (SQL Server)
SZIMMETRIKUS KULCS LÉTREHOZÁSA (Transact-SQL)