2017-09-11 5 views
0

Nous recherchons une solution pour implémenter des colonnes "toujours chiffrées" dans une base de données, où nous utilisons en même temps de nombreuses tables temporaires SQL (#tmp).SQL 2016 Toujours des colonnes cryptées et des tables temporaires SQL (#temp)

Nous avons exploré le chemin alternatif - arrêtez d'utiliser les tables #temp, mais cela aurait un impact important sur notre application en termes de temps/coût.

Quelqu'un a-t-il trouvé un moyen d'écrire des requêtes comme "insert dans #tmp select from my_table", où my_table contient des colonnes AE?

J'ai essayé d'appliquer les mêmes clés CMK et CEK à la base de données tempdb, de sorte que je puisse créer la même structure pour la table #tmp, que la structure de my_table. Ceci ne résout cependant pas le problème - le fait que les tables de 2 bases de données différentes semblent empêcher le transfert de données.

Je suis à la recherche d'une solution SQL, et non pour une solution qui implique une application cliente (C#, vb, etc.) qui a accès à toutes les clés de cryptage.

Répondre

0

Les opérations d'insertion de la manière que vous décrivez ne sont pas prises en charge pour les colonnes cryptées.

« insérer dans #tmp choisir parmi my_table »

Vous devrez écrire une application client pour obtenir un résultat similaire. Si vous voulez explorer ce chemin, s'il vous plaît laissez un commentaire et je peux vous guider.


Vous devriez être capable de réaliser quelque chose de similaire en C# comme suit.

  • Ne select * from encryptedTable pour charger les données dans un SqlDataReader puis utilisez SqlBulkCopy pour le charger à la table temporaire en utilisant SqlBulkCopy.WriteToServer(IDataReader) Méthode

Si vous avez la table cryptée et la table en texte brut sur la même instance SQL Server , puis sachez que vous pourriez transmettre des informations à l'administrateur SQL Server, car ils peuvent examiner les données en texte brut et le texte chiffré correspondant

+0

Merci Nikhil - J'utilise l'insertion dans #tmp pour réduire le temps de traitement en sql. L'utilisation d'une application cliente va probablement augmenter cette fois-ci, n'est-ce pas? Si les temps d'exécution sont comparables, alors j'aimerais l'explorer ... –

+0

Utilisez CTE au lieu de table temporaire. – Namphibian

+0

Étant donné que les opérations de chiffrement sont exécutées en dehors de SQL Server côté client, vous encourez les coûts supplémentaires d'aller-retour et de surcharge de chiffrement pour le chiffrement et le déchiffrement. Vous analysez la performance en utilisant l'application C# et décidez si elle est tolérable pour votre cas d'utilisation. J'ai modifié la réponse pour inclure la façon dont vous le feriez avec C# @ andrei.toma –