merge
This commit is contained in:
@@ -9,12 +9,7 @@ RotateCommandResult parseRotateCommand(const std::string& command,const std::str
|
||||
result.valid = false;
|
||||
|
||||
std::string current_cmk;
|
||||
//得到当前用户的cmk
|
||||
// cmk_mapperGetCmkByUsername(user_name, current_cmk);
|
||||
//存储当前cmk
|
||||
// cmk_mapperSetCurrentCmk(current_cmk);
|
||||
// cmk_mapperSetInfoUser(user_name);
|
||||
// cmk_mapperSetInfoDb(db_name);
|
||||
|
||||
DekInterface::setInfoUser(user_name);
|
||||
DekInterface::setInfoDb(db_name);
|
||||
|
||||
@@ -147,9 +142,6 @@ void connectionDelete() {
|
||||
|
||||
// 构建删除查询
|
||||
std::string query = "DELETE FROM dek_store WHERE ";
|
||||
// query.append("username = '").append(cmk_mapperGetInfoUser()).append("' AND ")
|
||||
// .append("db = '").append(cmk_mapperGetInfoDb()).append("' AND ")
|
||||
// .append("t = '").append(cmk_mapperGetInfoTable()).append("'");
|
||||
query.append("username = '").append(DekInterface::getInfoUser()).append("' AND ")
|
||||
.append("db = '").append(DekInterface::getInfoDb()).append("' AND ")
|
||||
.append("t = '").append(DekInterface::getInfoTable()).append("'");
|
||||
@@ -273,8 +265,6 @@ void connectionUpdateDek_Init(RotateCommandResult &cmd) {
|
||||
// 判断 如果是 NULL 则为表级密钥 && (轮换表级||轮换全部) -> 需要轮换表密钥
|
||||
if (PQgetisnull(res1, i, 0)) { // 如果列名是NULL,表示这是表级密钥
|
||||
// 创建新密钥
|
||||
// if (cmk_mapperCreateDek(dek_for_update, "")) { // 表级密钥使用空列名
|
||||
// cmk_mapperDecryptDek(dek_for_update, cmk);
|
||||
if (KMSInterface::createDek(dek_for_update, "")) { // 表级密钥使用空列名, 也可以DekAPI::getInfoTable())
|
||||
KMSInterface::decryptData(dek_for_update);
|
||||
} else {
|
||||
@@ -282,10 +272,8 @@ void connectionUpdateDek_Init(RotateCommandResult &cmd) {
|
||||
}
|
||||
|
||||
if(cmd.type == ROTATE_TABLE || cmd.type == ROTATE_ALL) {
|
||||
// cmk_mapperSetDekTableLevelForUpdate(dek_for_update);
|
||||
DekInterface::setDekTableLevelForUpdate(dek_for_update);
|
||||
}else{
|
||||
// cmk_mapperSetDekTableLevelForUpdate(dek);
|
||||
DekInterface::setDekTableLevelForUpdate(dek);
|
||||
}
|
||||
}else{
|
||||
@@ -294,8 +282,6 @@ void connectionUpdateDek_Init(RotateCommandResult &cmd) {
|
||||
plain = plain.substr(0,plain.rfind('_'));
|
||||
|
||||
// 创建新密钥,使用加密后的列名
|
||||
// if (cmk_mapperCreateDek(dek_for_update, col_name)) { // 使用加密后的列名
|
||||
// cmk_mapperDecryptDek(dek_for_update, cmk);
|
||||
if (KMSInterface::createDek(dek_for_update, col_name)) { // 使用加密后的列名
|
||||
KMSInterface::decryptData(dek_for_update);
|
||||
} else {
|
||||
@@ -304,19 +290,15 @@ void connectionUpdateDek_Init(RotateCommandResult &cmd) {
|
||||
|
||||
if(cmd.type == ROTATE_TABLE){ // 轮换表级密钥
|
||||
all_columns.erase(plain);
|
||||
// cmk_mapperSetDekStoreTmpForUpdate(col_name, dek); // 这些列使用旧密钥
|
||||
DekInterface::setDekColLevelForUpdate(col_name, dek);
|
||||
} else if(cmd.type == ROTATE_ALL){ // 轮换所有密钥
|
||||
cmd.enc_cols_set.insert(col_name); // 存储密文列名
|
||||
// cmk_mapperSetDekStoreTmpForUpdate(col_name, dek_for_update); // dek_store中的所有密钥都要轮换
|
||||
DekInterface::setDekColLevelForUpdate(col_name, dek_for_update);
|
||||
} else if(cmd.type == ROTATE_COLUMNS){ // 轮换指定列密钥
|
||||
if(cmd.cols_set.find(plain) != cmd.cols_set.end()){ // 判断dek_store中的列是否在命令中,是的话用新密钥,不是则用旧密钥
|
||||
cmd.enc_cols_set.insert(col_name); // 存储密文列名
|
||||
// cmk_mapperSetDekStoreTmpForUpdate(col_name,dek_for_update);
|
||||
DekInterface::setDekColLevelForUpdate(col_name, dek_for_update);
|
||||
}else{
|
||||
// cmk_mapperSetDekStoreTmpForUpdate(col_name,dek);
|
||||
DekInterface::setDekColLevelForUpdate(col_name, dek);
|
||||
}
|
||||
}
|
||||
@@ -542,16 +524,13 @@ void connectionUpdateDek_Final(RotateCommandResult &cmd) {
|
||||
|
||||
// 获取待更新的表级密钥
|
||||
std::string table_dek_for_update;
|
||||
// cmk_mapperGetDekTableLevelForUpdate(table_dek_for_update);
|
||||
DekInterface::getDekTableLevelForUpdate(table_dek_for_update);
|
||||
|
||||
// 获取CMK
|
||||
// std::string cmk = cmk_mapperGetCurrentCmk();
|
||||
|
||||
// 如果有表级密钥需要更新
|
||||
if (cmd.type != ROTATE_COLUMNS && !table_dek_for_update.empty()) {
|
||||
// 加密表级密钥
|
||||
// cmk_mapperEncryptDek(table_dek_for_update, cmk);
|
||||
KMSInterface::encryptData(table_dek_for_update);
|
||||
if (table_dek_for_update.empty()) {
|
||||
fprintf(stderr, "Encrypt table DEK failed\n");
|
||||
@@ -580,7 +559,6 @@ void connectionUpdateDek_Final(RotateCommandResult &cmd) {
|
||||
if(!cmd.cols_set.empty() && cmd.type != ROTATE_TABLE){
|
||||
// 获取所有待更新的列级密钥
|
||||
std::unordered_map<std::string, std::string> column_deks;
|
||||
// cmk_mapperGetAllDekStoreTmpForUpdate(column_deks);
|
||||
DekInterface::getAllDekColLevelForUpdate(column_deks);
|
||||
|
||||
// 更新列级密钥
|
||||
@@ -642,19 +620,9 @@ void connectionInsertTest() {
|
||||
}
|
||||
|
||||
std::string table_dek;
|
||||
// 获取CMK
|
||||
// std::string cmk = cmk_mapperGetCurrentCmk();
|
||||
// cmk_mapperGetCmkByUsername(cmk_mapperGetInfoUser(), cmk);
|
||||
// if (cmk_mapperCreateDek(table_dek, "")) { // 表级密钥使用空列名
|
||||
if (KMSInterface::createDek(table_dek, "")) { // 表级密钥使用空列名
|
||||
// cmk_mapperEncryptDek(table_dek, cmk); // 加密表级密钥,create里写了加密所以不需要
|
||||
std::string query1 = "insert into dek_store values";
|
||||
std::string tuple1 = "(";
|
||||
// tuple1.append("'").append(cmk_mapperGetInfoUser()).append("',")
|
||||
// .append("'").append(cmk_mapperGetInfoDb()).append("',")
|
||||
// .append("'").append(cmk_mapperGetInfoTable()).append("',")
|
||||
// .append("NULL,")
|
||||
// .append("'").append(table_dek).append("')");
|
||||
|
||||
tuple1.append("'").append(DekInterface::getInfoUser()).append("',")
|
||||
.append("'").append(DekInterface::getInfoDb()).append("',")
|
||||
@@ -672,15 +640,8 @@ void connectionInsertTest() {
|
||||
// 处理所有列密钥
|
||||
while (!tmp1.empty()) {
|
||||
std::string col_dek;
|
||||
// if (cmk_mapperCreateDek(col_dek, tmp1)) { // 使用当前列名作为参数
|
||||
if(KMSInterface::createDek(col_dek, tmp1)) {
|
||||
// cmk_mapperEncryptDek(col_dek, cmk); // 加密列级密钥
|
||||
std::string tuple_col = "(";
|
||||
// tuple_col.append("'").append(cmk_mapperGetInfoUser()).append("',")
|
||||
// .append("'").append(cmk_mapperGetInfoDb()).append("',")
|
||||
// .append("'").append(cmk_mapperGetInfoTable()).append("',")
|
||||
// .append("'").append(tmp1).append("',")
|
||||
// .append("'").append(col_dek).append("')");
|
||||
tuple_col.append("'").append(DekInterface::getInfoUser()).append("',")
|
||||
.append("'").append(DekInterface::getInfoDb()).append("',")
|
||||
.append("'").append(DekInterface::getInfoTable()).append("',")
|
||||
@@ -768,23 +729,17 @@ void connectionSelect() {
|
||||
int nrows = PQntuples(res1);
|
||||
|
||||
// 获取CMK
|
||||
// std::string cmk = cmk_mapperGetCurrentCmk();
|
||||
// cmk_mapperGetCmkByUsername(cmk_mapperGetInfoUser(), cmk);
|
||||
|
||||
for (int i = 0; i < nrows; i++) { // 遍历每一行
|
||||
std::string col_name(PQgetvalue(res1, i, 0)); // 列名
|
||||
std::string dek(PQgetvalue(res1, i, 1)); // 对应的密钥
|
||||
|
||||
// 解密密钥
|
||||
// cmk_mapperDecryptDek(dek, cmk);
|
||||
KMSInterface::decryptData(dek);
|
||||
|
||||
if (PQgetisnull(res1, i, 0)) { // 如果列名是NULL,表示这是表级密钥
|
||||
// cmk_mapperSetDekTableLevel(dek);
|
||||
DekInterface::setDekTableLevel(dek);
|
||||
// dek_for_decrypt = dek;
|
||||
} else { // 否则是列级密钥
|
||||
// cmk_mapperSetInfoDekTmp(col_name, dek);
|
||||
DekInterface::setDekColLevel(col_name, dek);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user