下列示例使用列级别加密来保护信用卡数据。 使用列级别加密来保护信用卡数据: 1. 创建表:create table customer (id char(30), creditcard lvarchar(67)); 2. 插入加密数据: a. 设置会话密码: SET ENCRYPTION PASSWORD "credit card number is encrypted"; b. 加密数据。 INSERT INTO customer VALUES ("Alice", encrypt_aes("1234567890123456")); INSERT INTO customer VALUES ("Bob", encrypt_aes("2345678901234567")); 3. 使用解密函数查询加密数据。
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 112 -
SET ENCRYPTION PASSWORD "credit card number is encrypted"; SELECT id FROM customer WHERE DECRYPT_CHAR(creditcard) = "2345678901234567"; 重要: 加密数据值比相应的未加密数据占用更多的存储空间。列宽足够存储明文的列可能需要 增大宽度才能支持列级别加密或单元级别加密。如果要将加密值插入声明宽度小于加密字符串 的列,那么列存储截断后的值,该值无法被解密。 有关加密安全性的更多信息,请参阅《GBase 8s 管理员指南》。 有关内置加密和解密函数语法和存储要求的更多信息, 请参阅 《GBase 8s SQL 指南: 语法》 。
ifx_int8soasc() 函数将 int8 类型数值转换为 C char 类型值。 语法
mint ifx_int8soasc(int8_val, strng_val, len) ifx_int8_t *int8_val;
printf("IFX_INT8sOASC Sample ESQL Program running.\n\n");
if (x = ifx_int8cvasc(string1, strlen(string1), &num1)) { printf("Error %d in converting string1 to INT8\n", x); exit(1); } if (x = ifx_int8cvasc(string2, strlen(string2), &num2)) { printf("Error %d in converting string2 to INT8\n", x); exit(1); } if (x = ifx_int8cvasc(string3, strlen(string3), &num3)) { printf("Error %d in converting string3 to INT8\n", x); exit(1); } printf("\nConverting INT8 back to ASCII\n"); printf(" Executing: ifx_int8soasc(&num1, result, END - 1)"); if (x = ifx_int8soasc(&num1, result, END - 1))
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 749 - printf("\tError %d in converting INT8 to string\n", x); else { result[END - 1] = '\0'; /* null terminate */ printf("\n The value of the first INT8 is = %s\n", result); } printf("\nConverting second INT8 back to ASCII\n"); printf(" Executing: ifx_int8soasc(&num2, result, END - 1)"); if (x= ifx_int8soasc(&num2, result, END - 1)) printf("\tError %d in converting INT8 to string\n", x); else { result[END - 1] = '\0'; /* null terminate */ printf("\n The value of the 2nd INT8 is = %s\n", result); }
printf("\nConverting third INT8 back to ASCII\n"); printf(" Executing: ifx_int8soasc(&num3, result, END - 1)"); /* note that the decimal is truncated */
if (x= ifx_int8soasc(&num3, result, END - 1)) printf("\tError %d in converting INT8 to string\n", x); else { result[END - 1] = '\0'; /* null terminate */ printf("\n The value of the 3rd INT8 is = %s\n", result); } printf("\nIFX_INT8sOASC Sample Program over.\n\n"); exit(0); } 输出
IFX_INT8sOASC Sample ESQL Program running.
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 750 -
Converting INT8 back to ASCII Executing: ifx_int8soasc(&num1, result, sizeof(result)-1) The value of the first INT8 is = -12555444333786456
Converting second INT8 back to ASCII Executing: ifx_int8soasc(&num2, result, sizeof(result)-1) The value of the 2nd INT8 is = 480
Converting third INT8 back to ASCII Executing: ifx_int8soasc(&num3, result, END) The value of the 3rd INT8 is = 5
GBA-02BR-0009 错误码 错误标识 错误信息 GBA-02BR-0009 无 Network Has Error