Есть ли способ зашифровать значения ячеек на основе учетной записи пользователя? Таким образом:MSSQL2012 шифрует ячейки на уровне пользователя
- Только действительные пользователи могут расшифровать значения некоторых ячеек?
- Или способ шифрования данных по аутентификации пользователей, поэтому только правильный пользователь расшифрует его?
На данный момент это мое решение: я создаю асимметричные ключи и предоставляю пользователям их. Это не хорошо, потому что:
- Я должен создать один ключ для каждого пользователя или группы пользователей;
- Он не может быть атомарным;
- Запрос на чтение данных должен всегда запрашивать имя ключа.
Пример:
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
Какую версию sql вы используете? Если вы играете с предварительным просмотром 2016 года, вы должны посмотреть на эту функцию. http://blogs.microsoft.com/next/2015/05/27/always-encrypted-sql-server-2016-includes-new-advances-that-keeps-data-safer/#sm.000n5aecc10nrfkuxaz24umzkk4q0 – Igor
Версия 2012. Я собираюсь обновить сообщение. Спасибо – Radioleao