Magasin d'objets blob distants (RBS) (SQL Server)Remote Blob Store (RBS) (SQL Server)

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Le magasin d'objets blob distants SQL ServerSQL Server est un composant additionnel facultatif qui permet aux administrateurs de base de données de stocker des objets blob dans des solutions de stockage de marchandises au lieu de les stocker directement sur le serveur de base de données principal. Remote BLOB Store (RBS) is an optional add-on component that lets database administrators store binary large objects in commodity storage solutions instead of directly on the main database server.

RBS est inclus dans le CD d'installation de SQL Server 2016SQL Server 2016 , mais n'est pas installé par le programme d'installation de SQL ServerSQL Server .RBS is included on the SQL Server 2016SQL Server 2016 installation media, but is not installed by the SQL ServerSQL Server Setup program.

Pourquoi RBS ?Why RBS?

Performances et stockage de base de données optimisésOptimized database storage and performance

Le stockage d'objets blob dans la base de données peut consommer une grande quantité d'espace de fichiers et se révéler coûteuse du point de vue des ressources de serveur.Storing BLOBs in the database can consume large amounts of file space and expensive server resources. RBS transmet les objets blob à la solution de stockage de votre choix, et en stocke les références dans la base de données.RBS transfers the BLOBs to a dedicated storage solution you choose and stores references to thr BLOBs in the database. Cela permet de libérer de l'espace de stockage serveur pour les données structurées, ainsi que des ressources serveur pour les opérations de base de données.This frees server storage for structured data, and frees server resources for database operations.

Gestion efficace des objets blobEfficient BLOB management

Plusieurs fonctionnalités de RBS prennent en charge la gestion des objets blob stockés :Several RBS features support stored BLOBs management:

  • Les objets blob sont gérés à l'aide des transactions ACID (Atomicité, Cohérence, Isolation et Durabilité).BLOBS are managed with ACID (atomic consistency isolation durable) transactions.

  • Les objets blob sont organisés en collections.BLOBs are organized into collections.

  • Le nettoyage de la mémoire, la vérification de la cohérence et les autres fonctions de maintenance y sont inclus.Garbage collection, consistency checking, and other maintenance functions are included.

API standardiséeStandardized API

RBS définit un ensemble d'API qui fournit un modèle de programmation standardisé permettant aux applications d'accéder à tous les magasins d'objets blob et de les modifier.RBS defines a set of APIs that provide a standardized programming model for applications to access and modify any BLOB store. Chaque magasin d’objets blob peut spécifier sa propre bibliothèque de fournisseurs qui se connecte à la bibliothèque cliente RBS et indique comment les objets blob sont stockés et accessibles.Each BLOB store can specify its own provider library which plugs into the RBS client library and specifies how BLOBs are stored and accessed.

Certains fournisseurs de solutions de stockage tiers ont développé des fournisseurs RBS qui sont conformes à ces API standard et qui prennent en charge le stockage d'objets blob sur différentes plateformes de stockage.A number of third-party storage solution vendors have developed RBS providers that conform to these standard APIs and support BLOB storage on various storage platforms.

Conditions requises du magasin d'objets blob distants (RBS)RBS Requirements

Le magasin d'objets blob distants nécessite SQL ServerSQL Server Enterprise pour le serveur de base de données principal sur lequel les métadonnées d'objets blob sont stockées.RBS requires SQL ServerSQL Server Enterprise for the main database server in which the BLOB metadata is stored. Cependant, si vous utilisez le fournisseur FILESTREAM fourni, vous pouvez stocker les objets blob sur SQL ServerSQL Server Standard.However, if you use the supplied FILESTREAM provider, you can store the BLOBs themselves on SQL ServerSQL Server Standard. Pour vous connecter à SQL ServerSQL Server, RBS nécessite au moins la version 11 du pilote ODBC pour SQL Server 2014SQL Server 2014 et la version 13 du pilote ODBC pour SQL Server 2016SQL Server 2016.To connect to SQL ServerSQL Server, RBS requires at least ODBC driver version 11 for SQL Server 2014SQL Server 2014 and ODBC Driver version 13 for SQL Server 2016SQL Server 2016. Les pilotes sont disponibles à la page Download ODBC Driver for SQL Server (Télécharger le pilote ODBC pour SQL Server).Drivers are available at Download ODBC Driver for SQL Server.

Le magasin d'objets blob distants comprend un fournisseur FILESTREAM qui vous permet de stocker les objets blob sur une instance de SQL ServerSQL Server.RBS includes a FILESTREAM provider that lets you use RBS to store BLOBs on an instance of SQL ServerSQL Server. Si vous souhaitez utiliser le magasin d'objets blob distants pour stocker des objets blob dans une solution de stockage différente, vous devez utiliser un fournisseur RBS tiers, qui aura été développé pour cette solution de stockage particulière, ou bien développer un fournisseur RBS personnalisé à l'aide de l'API RBS.If you want use RBS to store BLOBs in a different storage solution, you have to use a third party RBS provider developed for that storage solution, or develop a custom RBS provider using the RBS API. Un exemple de fournisseur stockant des objets blob sur un système de fichiers NTFS est disponible parmi les ressources pédagogiques du site CodePlex.A sample provider that stores BLOBs in the NTFS file system is available as a learning resource on Codeplex.

Sécurité relative au magasin d'objets blob distants (RBS)RBS Security

Le blog de l'équipe de stockage d’objets blob distants SQL est une bonne source d'informations sur cette fonctionnalité.The SQL Remote Blob Storage Team Blog is a good source of information about this feature. Le modèle de sécurité RBS est décrit dans la partie Modèle de sécurité RBSde la publication.The RBS security model is described in the post at RBS Security Model.

Fournisseurs personnalisésCustom providers

Lorsque vous utilisez un fournisseur personnalisé pour stocker des objets blob en dehors de SQL ServerSQL Server, assurez-vous de protéger les objets blob stockés à l'aide d'autorisations et d'options de chiffrement convenant au support de stockage utilisé par le fournisseur personnalisé.When you use a custom provider to store BLOBs outside of SQL ServerSQL Server, make sure that you protect the stored BLOBs with permissions and encryption options that are appropriate to the storage medium used by the custom provider.

Clé symétrique du magasin d'informations d'identificationCredential store symmetric key

Si un fournisseur demande l'installation et l'utilisation d'une clé secrète stockée dans le magasin d'informations d'identification, RBS utilise une clé symétrique pour chiffrer les clés secrètes du fournisseur qu’un client peut utiliser pour obtenir l'autorisation d’accès au magasin d'objets blob du fournisseur.If a provider requires the setup and use of a secret stored within the credential store, RBS uses a symmetric key to encrypt the provider secrets which a client may use to gain authorization to the provider’s blob store.

  • RBS 2016 utilise une clé symétrique AES_128 .RBS 2016 uses an AES_128 symmetric key. SQL Server 2016SQL Server 2016 n’autorise pas la création de nouvelles clés TRIPLE_DES, sauf pour des raisons de compatibilité descendante. does not allow the creation of new TRIPLE_DES keys except for backwards compatibility reasons. Pour plus d’informations, consultez CREATE SYMMETRIC KEY (Transact-SQL).For more information, see CREATE SYMMETRIC KEY (Transact-SQL).

  • RBS 2014 et les versions antérieures utilisent un magasin d’informations d’identification qui maintient le chiffrement des clés secrètes à l’aide de l’algorithme de clé symétrique TRIPLE_DES, obsolète.RBS 2014 and prior versions use a credential store which holds secrets encrypted using the TRIPLE_DES symmetric key algorithm which is outdated. Si vous utilisez TRIPLE_DES MicrosoftMicrosoft , nous vous recommandons d’améliorer votre sécurité en suivant les étapes décrites dans cette rubrique pour permuter votre clé vers une méthode de chiffrement plus forte.If you are currently using TRIPLE_DES MicrosoftMicrosoft recommends that you enhance your security by following the steps in this topic to rotate your key to a stronger encryption method.

    Pour déterminer les propriétés des clés symétriques du magasin d’informations d’identification RBS, vous pouvez exécuter l’instruction Transact-SQLTransact-SQL suivante dans la base de données RBS :You can determine the RBS credential store symmetric key properties by executing the following Transact-SQLTransact-SQL statement in the RBS database:
    SELECT * FROM sys.symmetric_keys WHERE name = 'mssqlrbs_encryption_skey'; Si la sortie de cette instruction indique que TRIPLE_DES est toujours utilisé, vous devez permuter cette clé.SELECT * FROM sys.symmetric_keys WHERE name = 'mssqlrbs_encryption_skey'; If the output from that statement shows that TRIPLE_DES is still used, then you should rotate this key.

Rotation de la clé symétriqueRotating the symmetric key

Lorsque vous utilisez RBS, la clé symétrique du magasin d'informations d'identification doit régulièrement faire l’objet d’une rotation.When using RBS, you should periodically rotate the credential store symmetric key. Il s'agit d’une meilleure pratique de sécurité courante permettant de suivre les stratégies de sécurité de l'organisation.This is a common security best practice to meet organizational security policies. Pour effectuer la rotation de la clé symétrique du magasin d’informations d'identification RBS, il est possible d’utiliser le script ci-dessous dans la base de données RBS.One way to rotate the RBS credential store symmetric key, is to use the script below in the RBS database. Vous pouvez également utiliser ce script pour migrer vers des propriétés de chiffrement plus fortes, notamment la longueur de l'algorithme ou de la clé.You can also use this script to migrate to stronger encryption strength properties, such as algorithm or key length. Sauvegardez votre base de données avant d’effectuer la rotation de la clé.Backup your database prior to key rotation. Le script comprend à la fin quelques étapes de vérification.At the script’s conclusion, it has some verification steps.
Si vos stratégies de sécurité nécessitent d’autres propriétés de clé (par exemple, la longueur de l’algorithme ou de la clé) que celles qui sont fournies, le script peut être utilisé comme modèle.If your security policies require different key properties (e.g., algorithm or key length) from the ones provided, then the script may be used as a template. Modifiez les propriétés de la clé à deux endroits : 1) la création de la clé temporaire 2) la création de la clé permanente.Modify the key properties in two places: 1) the creation of the temporary key 2) the creation of the permanent key.

RBS resources RBS resources

Exemples RBSRBS samples
Les exemples de magasins d'objets blob distants (RBS) disponibles sur le site CodePlex montrent comment développer une application RBS et comment développer et installer un fournisseur RBS personnalisé.The RBS samples available on Codeplex demonstrate how to develop an RBS application, and how to develop and install a custom RBS provider.

Blog RBSRBS blog
Le blog du magasin d'objets blob distants (RBS) fournit des informations supplémentaires qui vous aideront à mieux comprendre, déployer et gérer les magasins d'objets blob distants.The RBS blog provides additional information to help you understand, deploy, and maintain RBS.

Key rotation script Key rotation script

Cet exemple crée une procédure stockée nommée sp_rotate_rbs_symmetric_credential_key pour remplacer la clé symétrique du magasin d’informations d’identification RBS actuellement utiliséeThis example creates a stored procedure named sp_rotate_rbs_symmetric_credential_key to replace the currently used RBS credential store symmetric key
par celle de votre choix.with one of your choosing. Ce remplacement est préférable s’il existe une stratégie de sécurité qui exigeYou may want to do this if there is a security policy requiring
une permutation des clés régulière ou si des algorithmes spécifiques le précisent.periodic key rotation or if there are specific algorithm requirements.
Dans cette procédure stockée, une clé symétrique utilisant AES_256 remplace l’actuelle.In this stored procedure, a symmetric key using AES_256 will replace the current one. À la suite duAs a result of
remplacement de la clé symétrique, les clés secrètes doivent être chiffrées de nouveau avec la nouvelle clé.the symmetric key replacement, secrets need to be re-encrypted with the new key. Cette procédureThis stored
stockée rechiffre également les clés secrètes.procedure will also re-encrypt the secrets. La base de données doit être sauvegardée avant toute rotation de clé.The database should be backed up prior to key rotation.

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  

Vous pouvez désormais utiliser la procédure stockée sp_rotate_rbs_symmetric_credential_key pour effectuer la rotation de la clé symétrique du magasin d’informations d’identification RBS ; les clés secrètes restent les mêmes avant et après la rotation de la clé.Now you can use the sp_rotate_rbs_symmetric_credential_key stored procedure to rotate the RBS credential store symmetric key, and the secrets remain the same before and after the key rotation.

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

Voir aussiSee Also

Magasin d’objets blob distants et groupes de disponibilité Always On (SQL Server) Remote Blob Store and Always On Availability Groups (SQL Server)
CREATE SYMMETRIC KEY (Transact-SQL) CREATE SYMMETRIC KEY (Transact-SQL)