2009-11-28 4 views
1

SQL Server에서 대칭 키를 통해 데이터를 암호화하려고합니다. 사용자가 웹 양식을 통해 데이터를 제출하면 SQL Server에 저장 한 대칭 키를 사용하여 데이터를 암호화하고 싶습니다. 나는 이것을하는 방법을 찾으려고 노력하고있다. 내 Web.Config 파일에서 키를 열려고하면 그러나, 나는 오류가 발생 -SQL 대칭 키 및 C#에서 열어

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 

이 위대한 작품 : 현재, 나는 다음 실행합니다.

C# 코드 :

<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 문에서

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 파일 :

Error Number: 102, Error Message: Incorrect syntax near 'myKey'. in: -2146232060 and System.Data.SqlClient.SqlErrorCollection

질문/문제 :

  • 왜 오류가 발생합니까?
  • 키에 액세스하거나 데이터를 암호화하는 다른 방법이 있습니까? 또한

: 자연

Error Number: 15151, Error Message: Cannot find the symmetric key 'myKeya', because it does not exist or you do not have permission. in: -2146232060 and System.Data.SqlClient.SqlErrorCollection

내가 사용하고 있습니다 :는 나는이 오류가 발생했습니다 "myKeya"을 "의 mykey"또는 그런 일로부터보다 키 이름을 변경 시도 'myKey'와는 다른 단어이지만 내가 사용하고있는 단어가 어떤 종류의 키워드인지 확인하려면 google, bing 및 msdn에 대한 검색 결과에 나타나지 않습니다 ... 그래서 나는 안전하다고 생각합니다. 그곳에. 또한 이것은 db가 실제로 요청을 수신한다는 점에서 단서를 제공하지만 일부 다른 fasion에서는 키를 원합니다. 흠 ...

+1

submitDataToDb에 대한 호출이 아니라 오류가 열려 있는지 확인 하시겠습니까? – SqlACID

+0

흥미로운 점 ... 디버거를 실행할 때 오류가 submitDataToDb()의 sqlCmd.ExecuteNonQuery();에서 발생하지만 "OpenKey"의 값을 가리키며 잘못된 구문이 있다고합니다. "myKey"에. –

+0

사실 친애하는 각하, 나는 네가 머리에 못을 박 았을지도 모른다고 생각한다. .. 그리고 나에게 가치있는 교훈을 가르쳤다.그것의 다른 기능입니다. 감사합니다. 답변을 게시하여 제가 동의하고 신용을 줄 수 있도록해야합니다. :) –

답변

0

웹 구성에서 세미콜론을 제거하거나 삭제해야합니까? 테스트되지 않은 단지 아이디어.

+0

흠 ... 나는 다양한 탈출 방법을 시도했다. 아마도 내가 시도하지 않은 것일까? 여기 제가 시도한 것이 있습니다 : '/ myKey /';/'myKey'/;/myKey /; ''myKey ''그리고 그것은 모두 오류를 반환합니다 : ( –

+0

첫 번째 sql 명령 에서처럼 세미콜론을 삭제하려 했습니까? –

0

구성 파일에 'myKey'을 단독으로 인용하고 싶지는 않습니다. 구성 파일을 올바르게 작동한다고 말한 문구와 비교하십시오. 유일한 차이점은 따옴표입니다. SQL 서버를 살펴보면 documentation은 키나 인증서 모두 따옴표가 있어야 함을 나타냅니다.

+0

실제로 실제로 (')를 사용하여 테스트에 붙여 넣었습니다. 방법을 시도하고 같은 오류가 발생했습니다. 내 질문을 업데이트했습니다. 감사합니다/죄송합니다 –

+0

새 오류는 사용 권한 오류처럼 보입니다. 웹 응용 프로그램과 동일한 사용자로 MSSQL에 로그인 했습니까? – Donnie

+0

Donnie, 오전 –

0

SQL Server Profiler으로 추적을 실행 해보십시오. 그런 다음 웹 응용 프로그램이 실행중인 정확한 진술을 볼 수 있습니다. 거기에서 SQL Server Management Studio로 해당 문을 잘라내거나 붙여 넣을 수 있으며 문이 실행되는지 또는 구문 오류가 있는지 확인할 수 있습니다. 실행되면 Donnie와 같은 사용 권한 문제임을 암시 할 수 있습니다.

+0

나는 이것을 시험해 보겠습니다! SQL 버전이므로 대안을 설치해야합니다. –

0

submitDataToDb에 대한 호출이 아니라 오류가 열려 있는지 확인 하시겠습니까?