SQL Server 2008/2012を使用しています。データベースに暗号化された列が含まれています。暗号化された列名をSQL Serverの暗号化キーと証明書で取得する
がマスターキー
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = '[email protected]'
GO
対称鍵を作成し、CERTIFICATE
を設定する例テーブル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
を作成します - 列は、次のクエリを使用して暗号化されています
CREATE CERTIFICATE TestCert WITH SUBJECT = 'SSN Encryption'; GO CREATE SYMMETRIC KEY HRKey WITH ALGORITHM = DES ENCRYPTION BY CERTIFICATE TestCert; GO
暗号化データ
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
私はクエリを使用してこのデータを復号化しています - ここで
OPEN SYMMETRIC KEY HRKey
DECRYPTION BY CERTIFICATE TestCert;
SELECT [SSN],
CONVERT(VARCHAR, DecryptByKey([EncryptedSSN]))
AS 'Decrypted SSN'
FROM [HR].[Employees]
GO
我々は、ハードコードの鍵/証明書の値を与えます。
私はこのクエリでそのテーブルで暗号化された列名を取得しています -
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
そして、このクエリによるキーと証明書リスト -
SELECT name, key_length, algorithm_desc, create_date, modify_date
FROM sys.symmetric_keys;
SELECT name, subject, start_date, expiry_date
FROM sys.certificates
今、私が/どのキーを取得したいです証明書はどの暗号化された列に属していますか?ハードコーディングされた値を与えずにその列に対して復号化を適用できます。助けてください....