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


Távoli blobtároló (RBS) (SQL Server)

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)