【SQL】【SQL Server】暗号化 (まとめ)

まとめ

http://blogs.yahoo.co.jp/dk521123/35411224.html
の機能のまとめを以下に示す
USE [testDataBase];
GO

/* 対称キー削除 */
IF  EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] = 'testKeyName01')
	DROP SYMMETRIC KEY testKeyName01 REMOVE PROVIDER KEY
GO

/* 証明書削除 */
IF  EXISTS (SELECT * FROM sys.certificates WHERE [name] = 'testCertificate01')
	DROP CERTIFICATE testCertificate01
GO
/* マスタキー削除 */
IF  EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] LIKE '%DatabaseMasterKey%')
	DROP MASTER KEY
GO

/* マスタキー作成 */
CREATE MASTER KEY ENCRYPTION BY 
PASSWORD = 'test_password'

/* マスタキーをオープン */
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'test_password'
GO

/* 証明書作成 */
CREATE CERTIFICATE testCertificate01
   WITH SUBJECT = 'testCertificate01',
   START_DATE = '09/02/2010', EXPIRY_DATE = '09/02/2016';
GO

/* 対称キー作成 */
CREATE SYMMETRIC KEY testKeyName01
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE testCertificate01;
GO

/* マスタキーのクローズ */
CLOSE MASTER KEY
GO

/* 準備:テーブル作成 */
CREATE TABLE testTable( 
  testId nvarchar(100)
  , testName nvarchar(100)
  , age int
) 
GO
/* 対称キーのオープン */
OPEN SYMMETRIC KEY testKeyName01 DECRYPTION BY CERTIFICATE testCertificate01;
GO
/* データ追加(testIdを暗号化) */
INSERT INTO testTable
(testId, testName, age) 
VALUES
(EncryptByKey(Key_GUID('testKeyName01'), N'001'), 'Mike', 23);
GO
/* データ参照(testIdを複合化) */
SELECT
CONVERT(NVarChar(MAX), DecryptByKey(testId)) AS testId
, testName
, age
FROM
testTable
GO
/* 対称キーのクローズ */
CLOSE SYMMETRIC KEY testKeyName01;