基本編
DBに対して暗号化有効
http://msdn.microsoft.com/ja-jp/library/bb630389.aspx構文
ALTER DATABASE 【データベース名】 SET ENCRYPTION ON;
例
USE testDataBase; GO ALTER DATABASE testDataBaseSET ENCRYPTION ON; GO
マスタキーの作成
http://msdn.microsoft.com/ja-jp/library/ms174382.aspx構文
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 【パスワード】
例
/* マスタキーを作成 */ CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'test_password'
マスタキーの削除
現在のデータベースからマスター キーを削除するhttp://msdn.microsoft.com/ja-jp/library/ms180071.aspx
構文
DROP MASTER KEY
例
* マスタキーの存在を確認して、あれば削除IF EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] LIKE '%DatabaseMasterKey%') DROP MASTER KEY
例の参考資料
http://msdn.microsoft.com/ja-jp/library/bb326115.aspxマスタキーのオープン
http://msdn.microsoft.com/ja-jp/library/ms174433.aspx構文
OPEN MASTER KEY DECRYPTION BY PASSWORD = 【パスワード】
例
/* マスタキーのオープン */ OPEN MASTER KEY DECRYPTION BY PASSWORD = 'test_password'
マスタキーのクローズ
構文
CLOSE MASTER KEY
証明書作成
http://msdn.microsoft.com/ja-jp/library/ms187798.aspx構文
CREATE CERTIFICATE 【証明書名】 【パスワードなどのプロパティ指定】;
例
/* 証明書作成(期間は1年間) */ CREATE CERTIFICATE testCertificate01 WITH SUBJECT = 'testCertificate01', START_DATE = '09/02/2010', EXPIRY_DATE = '09/02/2011';
証明書削除
http://msdn.microsoft.com/ja-jp/library/ms179906.aspx構文
DROP CERTIFICATE 【証明書名】;
例
* 証明書「testCertificate01」の存在を確認して、あれば削除IF EXISTS (SELECT * FROM sys.certificates WHERE [name] = 'testCertificate01') DROP CERTIFICATE testCertificate01
対称キー作成
http://msdn.microsoft.com/ja-jp/library/ms188357%28v=SQL.90%29.aspx構文
CREATE SYMMETRIC KEY 【キー名】 【パスワードなどのプロパティ指定】;
例
CREATE SYMMETRIC KEY testKeyName01 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE testCertificate01;
対称キー削除
http://technet.microsoft.com/en-us/library/ms182698.aspx構文
DROP SYMMETRIC 【キー名】REMOVE PROVIDER KEY
例
* 対称キー「testKeyName01」の存在を確認して、あれば削除IF EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] = 'testKeyName01') DROP SYMMETRIC testKeyName01 REMOVE PROVIDER KEY
対称キーのオープン
構文
OPEN SYMMETRIC KEY 【キー名】 DECRYPTION BY 【パスワードなどのプロパティ指定】;
構文・参考資料
http://msdn.microsoft.com/ja-jp/library/ms190499%28SQL.90%29.aspx例
* CERTIFICATE:対称キーの暗号化解除に使用する秘密キーを備えた、証明書testCertificate01を指定OPEN SYMMETRIC KEY testKeyName01 DECRYPTION BY CERTIFICATE testCertificate01;
対称キーのクローズ
構文
CLOSE SYMMETRIC KEY 【キー名】;
構文・参考資料
http://msdn.microsoft.com/ja-jp/library/ms177938.aspx例
CLOSE SYMMETRIC KEY testKeyName01;
データの一部を暗号化して追加
対称キーの GUID を Key_GUID 関数で取得して、EncryptByKey でデータを暗号化して INSERTする例
/* 手順1:対称キーのオープン */ OPEN SYMMETRIC KEY testKeyName01 DECRYPTION BY CERTIFICATE testCertificate01; /* 手順2:データ追加(testIdを暗号化) */ INSERT INTO testTable (testId, testName, age) VALUES (EncryptByKey(Key_GUID('testKeyName01'), N'001'), 'Mike', 23); /* 手順3:対称キーのクローズ */ CLOSE SYMMETRIC KEY testKeyName01;
暗号化したデータを修正
基本的に追加した時と変わらず、追対称キーの GUID を Key_GUID 関数で取得して、EncryptByKey でデータを暗号化して UPDATEする例
/* 手順1:対称キーのオープン */ OPEN SYMMETRIC KEY testKeyName01 DECRYPTION BY CERTIFICATE testCertificate01; /* 手順2:データ修正(testIdを暗号化) */ UPDATE testTable SET testId= EncryptByKey(Key_GUID('ENC_KEY_01'), N'012') WHERE age = 23 /* 手順3:対称キーのクローズ */ CLOSE SYMMETRIC KEY testKeyName01;
例
/* 手順1:対称キーのオープン */ OPEN SYMMETRIC KEY testKeyName01 DECRYPTION BY CERTIFICATE testCertificate01; /* 手順2:暗号化したデータの参照(testIdを暗号化解除) */ SELECT CONVERT(NVarChar(MAX), DecryptByKey(testId)) AS testId , testName , age FROM testTable /* 手順3:対称キーのクローズ */ CLOSE SYMMETRIC KEY testKeyName01;