2017-01-26 3 views
2

나는 C++에서 PostgreSQL DB에 연결하기 위해 libpqxx을 사용합니다. 난 테이블의 열을 암호화하고 현재 열로 바꿉니다. 나는 이것을 쓴다 :PostgreSQL +에서 테이블 열의 값을 바꾸는 방법은 무엇입니까?

int num; 
cout << "Select Your COLUMN Number For Encryption: "; 
cin >> num; 

/* Create SQL statement */    
sql = "SELECT * from " + tbName; 

/* Execute SQL query */ 
result R3(N.exec(sql)); 

/* List down all the records */ 
for (result::const_iterator c = R3.begin(); c != R3.end(); ++c) { 
    c[num].as<string>() = encnum->encryptionData(3,5,c[num].as<int>()); 
    cout << "Encryption = " << c[num].as<string>() << endl; 
} 

그러나 결과는 암호화 이전과 같다. 나의 잘못은 무엇이며 어떻게 값을 열의 다른 값으로 대체 할 수 있습니까?

+0

테이블 열을 업데이트하려는 경우 [업데이트] (https://www.postgresql.org/docs/9.6/static/dml-update.html) 문을 실행해야합니다. – karastojko

+0

나를 보여줄 수 있습니까? 업데이트로 하나의 값을 시도했지만 전체 열을 업데이트하려고합니다. @karastojko – Richard

+0

업데이트 문장이있는 [간단한 예] (http://pqxx.org/development/libpqxx/)를 사용해 보셨습니까? – karastojko

답변

0

귀하의 문제에 대한 이해는 텍스트 또는 이진 데이터 열이 있고 해당 열의 모든 행을 파일의 현재 콘텐츠 암호화 된 버전을 나타내는 cipherText로 업데이트하려는 것입니다.

두 가지 접근 방법이 있습니다.

  1. 한 번에 한 행을 선택하고 업데이트하십시오. 장점은 트랜잭션 크기를보다 쉽게 ​​관리 할 수 ​​있다는 것입니다. 즉,이 경우 한 번에 하나의 값을 업데이트하고 클라이언트에서 암호화를 수행합니다.

  2. 데이터를 암호화하고 단일 업데이트 쿼리를 사용하여 표준 확장자 인 pg_crypto과 같은 것을 사용할 수 있습니다. 이것은 autovacuum이 정리할 수있는 것보다 더 긴 오픈 쓰기 트랜잭션을 제한 할 수 있음을주의하십시오. 또한 키를 쿼리에 제공해야하므로 로그에 키 공개 가능성이 있습니다.

접근 방식간에 큰 차이가 있습니다. PostgreSQL에서는 대개 클라이언트 관리 암호화가 백엔드에서 발생하는 주요 공개 및 관리 문제로 인해 수행됩니다. 그러나 다른 접근법이 존재합니다.