2016-11-09 19 views
9

Używam programu SQL Server 2008/2012. W mojej bazie danych mam tabelę z zaszyfrowaną kolumną. Kolumna jest szyfrowana za pomocą następującej kwerendy -Uzyskaj zaszyfrowaną nazwę kolumny kluczem szyfrowania i certyfikatem na serwerze sql

Utwórz przykładową tabelę

CREATE TABLE [HR].[Employees](
     [EmployeeID]  [int]   NOT NULL, 
     [EmployeeName] [varchar](50) NULL, 
     [SSN]    [varchar](20) NOT NULL, 
     [EncryptedSSN] [varbinary] (200) NULL, 
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
( [EmployeeID] ASC) 
) 
GO 

Skonfiguruj Master Key

CREATE MASTER KEY ENCRYPTION BY 
PASSWORD = '[email protected]' 
GO 

Tworzenie Symetryczny klucz i certyfikat

CREATE CERTIFICATE TestCert 
    WITH SUBJECT = 'SSN Encryption'; 
GO 

CREATE SYMMETRIC KEY HRKey 
    WITH ALGORITHM = DES 
    ENCRYPTION BY CERTIFICATE TestCert; 
GO 

szyfrowania danych

OPEN SYMMETRIC KEY HRKey 
    DECRYPTION BY CERTIFICATE TestCert; 
Now we can update the EncryptedSSN column of our Employees table. 

UPDATE [HR].[Employees] 
    SET [EncryptedSSN] = EncryptByKey(Key_GUID('HRKey'), SSN); 
GO 

Jestem odszyfrowania tych danych za pomocą kwerendy -

OPEN SYMMETRIC KEY HRKey 
    DECRYPTION BY CERTIFICATE TestCert; 
SELECT [SSN], 
    CONVERT(VARCHAR, DecryptByKey([EncryptedSSN])) 
    AS 'Decrypted SSN' 
    FROM [HR].[Employees] 
GO 

Poniżej podajemy wartość klucz/certyfikat ustalony.

jestem coraz zaszyfrowaną nazwę kolumny z ich stole przez tego zapytania -

SELECT stab.name Table_Name, sc.name Column_Name FROM sys.columns sc 
     INNER JOIN sys.types st ON sc.system_type_id=st.system_type_id 
     INNER JOIN sys.tables stab ON stab.object_id=sc.object_id 
     WHERE st.name='varbinary' 
     AND stab.is_ms_shipped=0 

a lista kluczy i certyfikatu przez tego zapytania -

SELECT name, key_length, algorithm_desc, create_date, modify_date 
FROM sys.symmetric_keys; 
SELECT name, subject, start_date, expiry_date 
FROM sys.certificates 

teraz chcę, aby uzyskać dany klawisz/do kolumny zaszyfrowanej należy certyfikat, dlatego mogę zastosować odszyfrowywanie w tej kolumnie bez podawania wartości zakodowanej na stałe. Proszę mi pomóc ....

Odpowiedz

2

Po wyszukiwania i spróbuj znalazłem rozwiązanie, które jest -

SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable; 

To zapytanie daje spowodować zaszyfrowany klucz, który jest należą do tej kolumny.

1

Nie można, przynajmniej korzystać z wbudowanych funkcji systemu T-SQL i widoków.

Ponadto typ kolumny może być varbinary, a dane nie są konieczne do zaszyfrowania.

Jeśli chcesz budować dynamiczne instrukcje T-SQL i aby uniknąć certyfikatów i kluczy twardych kodowań, możesz utworzyć tabelę mapping. Na przykład coś takiego:

TableName 
ColumnName 
Certificate 
EncryptionKey 
IsSymmetric 

To nie jest idealne obejście (tak, trzeba utrzymywane dane), ale jeśli nowe kolumny nie są szyfrowane ciągle może wykonać zadanie.