TechNet
Exporter (0) Imprimer
Développer tout

Magasin d'objets blob distants (RBS) (SQL Server)

 

S’applique à : SQL Server 2016

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse

SQL Server Le magasin d’objets blob distants 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.

RBS est inclus dans le CD d'installation de SQL Server 2016, mais n'est pas installé par le programme d'installation de SQL Server.

Pour plus d'informations sur le magasin d'objets blob distants, consultez Ressources relatives au magasin d'objets blob distants (RBS) plus loin dans cette rubrique.

Le magasin d'objets blob distants possède les avantages suivants :

Performances et stockage de base de données optimisés

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. Le magasin d'objets blob distants transmet de manière efficace les objets blob à la solution de stockage de votre choix, et en stocke les références dans la base de données. 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.

Gestion efficace des objets blob

La gestion des objets blob stockés est prise en charge par plusieurs fonctionnalités du magasin d'objets blob distants :

  • Les objets blob sont gérés à l'aide des transactions ACID (Atomicité, Cohérence, Isolation et Durabilité).

  • Les objets blob sont organisés en collections.

  • Le nettoyage de la mémoire, la vérification de la cohérence et les autres fonctions de maintenance y sont inclus.

API standardisée

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. Chaque magasin d'objets blob peut spécifier sa propre bibliothèque de fournisseur, connectée à la bibliothèque cliente RBS et spécifiant la manière dont les objets blob sont stockés et accessibles.

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.

Le magasin d'objets blob distants nécessite SQL Server Enterprise pour le serveur de base de données principal sur lequel les métadonnées d'objets blob sont stockées. Cependant, si vous utilisez le fournisseur FILESTREAM fourni, vous pouvez stocker les objets blob sur SQL Server Standard.

Le magasin d'objets blob distants comprend un fournisseur FILESTREAM qui vous permet de stocker les objets blob sur une instance de SQL 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. 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.

Le blog de l'équipe de stockage d’objets blob distants SQL est une bonne source d'informations sur cette fonctionnalité. Le modèle de sécurité RBS est décrit dans la partie Modèle de sécurité RBSde la publication.

Fournisseurs personnalisés

Lorsque vous utilisez un fournisseur personnalisé pour stocker des objets blob en dehors de SQL 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é.

Clé symétrique du magasin d'informations d'identification

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.

  • RBS 2016 utilise une clé symétrique AES_128. SQL Server 2016 n’autorise pas la création de nouvelles clés TRIPLE_DES, sauf pour des raisons de compatibilité descendante. Pour plus d’informations, consultez 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. Si vous utilisez TRIPLE_DESMicrosoft, 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.

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-SQL suivante dans la base de données RBS :
SELECT * FROM sys.symmetric_keys WHERE name = 'mssqlrbs_encryption_skey'; Si la sortie de cette instruction indique que TRIPLE_DES est toujours utilisé, alors il est préférable de permuter cette clé.

Rotation de la clé symétrique

Lorsque vous utilisez RBS, la clé symétrique du magasin d'informations d'identification doit régulièrement faire l’objet d’une rotation. Il s'agit d’une meilleure pratique de sécurité courante permettant de suivre les stratégies de sécurité de l'organisation. 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. 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é. Sauvegardez votre base de données avant d’effectuer la rotation de la clé. Le script comprend à la fin quelques étapes de vérification.
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. 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.

Documentation relative au magasin d'objets blob distants (RBS)
La documentation relative au magasin d'objets blob distants (RBS) est comprise dans le package Windows Installer. Si vous souhaitez consulter la documentation relative au magasin d'objets blob distants sans installer ce dernier, vous pouvez consulter la version SQL Server 2008 R2 de la documentation en ligne sur le site MSDN Library.

Livre blanc du magasin d'objets blob distants (RBS)
Le livre blanc « Stockage étendu des objets blob », disponible au téléchargement sous la forme d’un document Microsoft Word, fournit des informations détaillées sur l’installation et la configuration du magasin d’objets blob distants (RBS).

Exemples de magasins d'objets blob distants (RBS)
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é.

Blog du magasin d'objets blob distants (RBS)
Le blog RBS fournit des informations supplémentaires qui vous aideront à mieux comprendre, déployer et gérer les magasins d’objets blob distants.

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ée
par celle de votre choix. Ce remplacement est préférable s’il existe une stratégie de sécurité qui exige
une permutation des clés régulière ou si des algorithmes spécifiques le précisent.
Dans cette procédure stockée, une clé symétrique utilisant AES_256 remplace l’actuelle. À la suite du
remplacement de la clé symétrique, les clés secrètes doivent être chiffrées de nouveau avec la nouvelle clé. Cette procédure
stockée rechiffre également les clés secrètes. La base de données doit être sauvegardée avant toute rotation de clé.

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é.

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

Magasin d’objets blob distants(RBS) et groupes de disponibilité AlwaysOn (SQL Server)
CREATE SYMMETRIC KEY (Transact-SQL)

Ajouts de la communauté

AJOUTER
Afficher:
© 2016 Microsoft