TechNet
Exportieren (0) Drucken
Alle erweitern

Remote Blob Store (RBS) (SQL Server)

 

Betrifft: SQL Server 2016

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

SQL Server Remote Blob Store (RBS) ist eine optionale Add-On-Komponente, mit der Datenbankadministratoren Binary Large Objects in Speicherlösungen statt direkt auf dem Hauptdatenbankserver speichern können.

RBS ist nicht auf den SQL Server 2016-Installationsmedien enthalten. Er wird auch nicht über das SQL Server-Setupprogram installiert.

Weitere Informationen zu RBS finden Sie in diesem Thema unter RSB-Ressourcen .

RBS bietet die folgenden Vorteile:

Optimierte Datenbankspeicher und optimierte Datenbankleistung

Durch das Speichern von BLOBs in der Datenbank können große Mengen an Dateispeicherplatz sowie teure Serverressourcen belegt werden. RBS überträgt auf effiziente Weise BLOBs auf eine dedizierte Speicherlösung Ihrer Wahl und speichert Verweise auf diese in der Datenbank. Dadurch werden Serverspeicher für strukturierte Daten und Serverressourcen für Datenbankoperationen freigegeben.

Effiziente Verwaltung von BLOBs

Mehrere RBS-Funktionen unterstützen die bequeme Verwaltung von gespeicherten BLOBs:

  • BLOBs werden mithilfe von ACID-Transaktionen (atomic consistency isolation durable; Unteilbarkeit, Konsistenz, Isolation, Dauerhaftigkeit) verwaltet.

  • BLOBs sind in Auflistungen unterteilt.

  • Automatische Speicherbereinigung, Konsistenzüberprüfung und andere Wartungsfunktionen sind enthalten.

Standardisierte API

RBS definiert einen Satz von APIs, die ein standardisiertes Programmiermodell für Anwendungen bereitstellen, um auf BLOB-Speicher zuzugreifen und zu ändern. Jeder BLOB-Speicher kann eine eigene Anbieterbibliothek angeben, die an die RBS-Clientbibliothek angeschlossen wird und angibt, wie BLOBs gespeichert werden und auf sie zugegriffen wird.

Eine Reihe von Speicherlösungen von Drittanbietern haben RBS-Anbieter entwickelt, die diesen Standard-APIs entsprechen und BLOB-Speicherung auf verschiedenen Speicherplattformen unterstützen.

RSB erfordert SQL Server Enterprise für den Hauptdatenbankserver, in dem die BLOB-Metadaten gespeichert werden. Wenn Sie jedoch den bereitgestellten FILESTREAM-Anbieter verwenden, können Sie die BLOBs selbst auf SQL Server Standard speichern.

RBS beinhaltet einen FILESTREAM-Anbieter, mit dem Sie BLOBs mithilfe von RBS auf einer Instanz von SQL Serverspeichern können. Wenn Sie BLOBs mithilfe von RBS in einer anderen Speicherlösung speichern möchten, müssen Sie einen für diese Speicherlösung entwickelten RSB-Anbieter eines Drittanbieters verwenden oder einen benutzerdefinierten RBS-Anbieter mithilfe der RBS-API entwickeln. Ein Beispielanbieter, der BLOBs im NTFS-Dateisystem speichert, steht als Lernressource auf Codeplexzur Verfügung.

Der SQL Remote Blob Storage-Teamblog ist eine gute Informationsquelle für diese Funktion. Das RBS-Sicherheitsmodell wird in dem Beitrag unter RBS Security Model (RBS-Sicherheitsmodell) beschrieben.

Benutzerdefinierte Anbieter

Wenn Sie einen benutzerdefinierten Anbieter zum Speichern von Blobs außerhalb von SQL Server verwenden, stellen Sie sicher, dass die gespeicherten Blobs anhand von Berechtigungen und Verschlüsselungsoptionen geschützt sind, die für das vom benutzerdefinierten Anbieter verwendete Speichermedium geeignet sind.

Symmetrischer Schlüssel des Anmeldeinformationsspeichers

Wenn für einen Anbieter das Setup und die Verwendung eines Schlüssels im Anmeldeinformationsspeicher gespeichert werden muss, verwendet RBS einen symmetrischen Schlüssel um die Anbieterschlüssel zu verschlüsseln, die der Client möglicherweise benötigt, um die Autorisierung für den Blobspeicher des Anbieters zu erhalten.

  • RBS 2016 verwendet einen mit AES_128 erstellten symmetrischen Schlüssel. SQL Server 2016 lässt die Erstellung neuer TRIPLE_DES-Schlüssel nicht zu, außer aus Gründen der Abwärtskompatibilität. Weitere Informationen finden Sie unter CREATE SYMMETRIC KEY (Transact-SQL).

  • RBS 2014 und frühere Versionen verwenden einen Anmeldeinformationsspeicher mit geheimen Schlüsseln, die mithilfe des veralteten symmetrischen TRIPLE_DES-Schlüsselalgorithmus verschlüsselt werden. Wenn Sie derzeit TRIPLE_DES verwenden, empfiehlt Microsoft, dass Sie ihre Sicherheit erhöhen, indem Sie folgende Schritte in diesem Thema ausführen, um beim Rotieren des Schlüssels auf eine sicherere Verschlüsselungsmethode wechseln.

Sie können die Eigenschaften der symmetrischen Schlüssel für den RBS-Anmeldeinformationsspeicher bestimmen, indem Sie die folgende Transact-SQL-Anweisung in der RBS-Datenbank ausführen:
SELECT * FROM sys.symmetric_keys WHERE name = 'mssqlrbs_encryption_skey'; Wenn die Ausgabe von dieser Anweisung zeigt, dass TRIPLE_DES weiterhin verwendet wird, sollten Sie diesen Schlüssel rotieren.

Rotieren des symmetrischen Schlüssels

Wenn Sie RBS verwenden, sollten Sie in regelmäßigen Abständen den symmetrischen Schlüssel des Anmeldeinformationsspeichers drehen. Dies ist eine allgemeine bewährte Sicherheitsmethode, um organisationsweite Sicherheitsrichtlinien zu erfüllen. Eine Möglichkeit, den symmetrischen Schlüssel des RBS-Anmeldeinformationsspeichers zu rotieren, ist die Verwendung des unten aufgeführten Skripts in der RBS-Datenbank. Mit diesem Skript können Sie auch zu stärkeren Verschlüsselungsstärkeeigenschaften migrieren, z.B. Algorithmus oder Schlüssellänge. Sichern Sie Ihre Datenbank vor der Schlüsselrotation. Am Ende des Skripts finden Sie einige Überprüfungsschritte.
Wenn Ihre Sicherheitsrichtlinien verschiedene Schlüsseleigenschaften (z.B. Algorithmus oder Schlüssellänge) aus den angebotenen benötigen, kann das Skript als Vorlage verwendet werden. Ändern Sie die Schlüsseleigenschaften an zwei Stellen: 1) die Erstellung des temporären Schlüssels, 2) die Erstellung des permanenten Schlüssels.

RBS-Dokumentation
Die RBS-Dokumentation ist im Windows Installer-Paket enthalten. Wenn Sie die RBS-Dokumentation durchlesen möchten, ohne RBS zu installieren, können Sie die SQL Server 2008 R2 -Version der Dokumentation auch online in der MSDN Libraryanzeigen.

RSB-Whitepaper
Das Whitepaper Remote BLOB Storage, das als Microsoft Word-Dokument in englischer Sprache zum Download zur Verfügung steht, bietet ausführliche Informationen zur Installation und Konfiguration von RBS.

RSB-Beispiele
In den auf CodePlex verfügbaren RSB-Beispielen wird veranschaulicht, wie Sie eine RBS-Anwendung entwickeln und einen benutzerdefinierten RBS-Anbieter installieren.

RBS-Blog
Der RBS-Blog bietet zusätzliche Informationen, durch die Sie RBS besser verstehen, bereitstellen und verwalten können.

In diesem Beispiel wird eine gespeicherte Prozedur namens sp_rotate_rbs_symmetric_credential_key erstellt, um den aktuell verwendeten symmetrischen Schlüssel des RBS-Anmeldeinformationsspeichers
durch einen Ihrer Wahl zu ersetzen. Sie sollten dies tun, wenn eine Sicherheitsrichtlinie die regelmäßige Rotation von Schlüsseln erfordert
oder der Algorithmus besondere Anforderungen hat.
In dieser gespeicherten Prozedur wird ein symmetrischer Schlüssel, der AES_256 verwendet, den aktuellen ersetzten. Aufgrund
des Austauschs des symmetrischen Schlüssels müssen geheime Schlüssel mit dem neuen Schlüssel erneut verschlüsselt werden. Diese gespeicherte
Prozedur wird auch die geheimen Schlüssel erneut verschlüsseln. Die Datenbank sollte vor der Schlüsselrotation gesichert werden.

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 go ahead and 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  

Nun können Sie die gespeicherte sp_rotate_rbs_symmetric_credential_key-Prozedur verwenden, um den symmetrischen Schlüssel des RBS-Anmeldeinformationsspeichers zu rotieren. Die geheimen Schlüssel bleiben dabei vor und nach der Schlüsselrotation dieselben.

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';  

Remote Blob Store (RBS) und Always On-Verfügbarkeitsgruppen (SQL Server)
CREATE SYMMETRIC KEY (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2016 Microsoft