Existe-t-il un moyen de chiffrer les valeurs de cellule en fonction du compte d'utilisateur? Alors que:MSSQL2012 crypte les cellules au niveau de l'utilisateur
- Seuls les utilisateurs valides peuvent déchiffrer les valeurs de certaines cellules?
- Ou, un moyen de crypter les données par l'authentification de l'utilisateur, de sorte que seul le bon utilisateur va le décrypter?
Pour l'instant c'est ma solution: je crée des clés asymétriques, et j'accorde des utilisateurs dessus. Ce n'est pas bon parce que:
- Je dois créer une clé pour chaque utilisateur ou groupe d'utilisateurs;
- Il ne peut pas être atomique;
- La requête pour les données lues doit toujours récupérer le nom de la clé.
Exemple:
create database test_for_encrypt
Go
use test_for_encrypt
Go
-- Create Master key and certificate
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPass1234';
CREATE CERTIFICATE MySelfSignedCert
WITH SUBJECT = 'MySelfSignedCert',
EXPIRY_DATE = '07/14/2020';
-- Create Asymmetric keys
CREATE ASYMMETRIC KEY Asym_user_1 WITH ALGORITHM = RSA_2048
CREATE ASYMMETRIC KEY Asym_user_2 WITH ALGORITHM = RSA_2048
-- create table with data and select data
create table tb_encrypt (word nvarchar(100), asymkey nvarchar(100), crypt varbinary(1000))
Go
insert tb_encrypt (word, asymkey) values (N'One', N'Asym_user_1'), (N'Two', N'Asym_user_2')
update tb_encrypt set crypt = ENCRYPTBYASYMKEY(ASYMKEY_ID(asymkey), word)
select word, crypt, convert(nvarchar, DECRYPTBYASYMKEY(ASYMKEY_ID(asymkey), crypt)) as decrypt
from tb_encrypt
-- create new user with grants
create login [user_asym] With password = N'password_1234'
CREATE USER [user_asym] FOR login [user_asym]
ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [user_asym]
GRANT CONTROL ON ASYMMETRIC KEY::[Asym_user_1] TO [user_asym]
ALTER ROLE [db_datareader] ADD MEMBER [user_asym]
-- After this, Logout and Login with [user_asym]
-- Select data with user [user_asym]
select word, crypt, convert(nvarchar, DECRYPTBYASYMKEY(ASYMKEY_ID(asymkey), crypt)) as decrypt
from tb_encrypt
Quelle version de sql utilisez-vous? Si vous jouez avec l'aperçu de 2016, vous devriez regarder cette fonctionnalité. http://blogs.microsoft.com/next/2015/05/27/always-encrypted-sql-server-2016-includes-new-advances-that-keeps-data-safer/#sm.000n5aecc10nrfkuxaz24umzkk4q0 – Igor
Version 2012. Je vais mettre à jour le post. Merci – Radioleao