対称キーを使用して SQL Server のデータを暗号化しようとしています。ユーザーが Web フォームからデータを送信するときに、SQL Server 内に保存した対称キーを使用してデータを暗号化したいと考えています。これを行う方法を見つけようとしています。現在、私は以下を実行しています:
USE myDb
GO
OPEN SYMMETRIC KEY myKey
DECRYPTION BY CERTIFICATE myCert
GO
INSERT INTO [myDb].[dbo].[passData]
([userid]
,[passName]
,[passLogin1]
,[passLogin2]
,[passPass1]
,[passPass2]
,[passWebsite]
,[passNote])
VALUES
('1'
,'test_2'
,ENCRYPTBYKEY(KEY_GUID('myKey'),'somedata1')
,NULL
,ENCRYPTBYKEY(KEY_GUID('myKey'),'somedata2')
,NULL
,NULL
,NULL)
GO
これはうまく機能しますが、Web.Config ファイルからキーを開こうとすると、エラーが発生します。
C# コード:
private void openKey(Dictionary<String, String> inputStrings)
{
try
{
SqlCommand seeqlCmd = new SqlCommand();
String sqlInfo = ConfigurationManager.AppSettings.Get("OpenKey");
seeqlCmd.CommandText = sqlInfo;
seeqlCmd.CommandType = CommandType.Text;
seeqlCmd.Connection = __SQLConn;
seeqlCmd.ExecuteNonQuery();
submitDataToDb(inputStrings);
__SQLConn.Close();
}
catch (SqlException err)
{
// show error commands here
}
}
private void submitDataToDb(Dictionary<String, String> sqlString)
{
try
{
SqlCommand sqlCmd = new SqlCommand();
String confSet = ConfigurationManager.AppSettings.Get("DepositPasswordData");
sqlCmd.CommandText = String.Format(confSet, sqlString["userID"], sqlString["passName"], sqlString["loginOne"], sqlString["loginTwo"], sqlString["passOne"], sqlString["passTwo"], sqlString["webSite"], sqlString["passNote"]);
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Connection = __SQLConn;
sqlCmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
// show error commands here
}
}
Web.Config ファイル
<add key="OpenKey" value="OPEN SYMMETRIC KEY myKey DECRYPTION BY CERTIFICATE myCert"/>
<add key="DepositPasswordData" value="INSERT INTO Passwords.dbo.userPassData{0} userid, passName, passLogin1, passLogin2, passPass1, passPass2, passWebsite, passNote) VALUES ('{0}', '{1}', 'ENCRYPTBYKEY(KEY_GUID('myKey '),'{2}')', 'ENCRYPTBYKEY(KEY_GUID('myKey'),'{3}')', 'ENCRYPTBYKEY(KEY_GUID('myKey'),'{4}')', 'ENCRYPTBYKEY(KEY_GUID('myKey'),'{5}')', '{6}', '{7}')" />
try/catch ステートメントからのエラー:
エラー番号: 102、エラー メッセージ: 'myKey' 付近の構文が正しくありません。: -2146232060 および System.Data.SqlClient.SqlErrorCollection
質問/問題:
- エラーが発生するのはなぜですか?
- キーにアクセスしたり、データを暗号化する別の方法はありますか?
追加:キー名を「myKey」から「myKeya」などに変更しようとしたところ、次のエラーが発生しました。
エラー番号: 15151、エラー メッセージ: 対称キー 'myKeya' が見つかりません。存在しないか、権限がないためです。: -2146232060 および System.Data.SqlClient.SqlErrorCollection
当然、「myKey」とは別の単語を使用していますが、使用している単語が何らかのキーワードであるかどうかを確認したところ、Google、bing、msdn の検索で出てきません...だから私は私はそこで安全だと思います。また、これは、データベースが実際にリクエストを受信しているという点で私に手がかりを与えますが、別の方法でキーが必要です。うーん....