将方法名称绑定到mysql where子句?

时间:2016-11-18 13:07:38

标签: mysql scala encryption playframework

我用过两张桌子。

table1:Employees表我有两列 id,employees_id (类型:长)

table2:Salary表我有两列 id,employees_encrpted_id (类型:字符串)

注意 1。 Employees表中的两个表公共字段 employees_id (此处我们存储在员工ID中)和{{strong> employees_encrpted_id 位于{{ 1}} table(我们使用加密方法加密员工ID然后存储它)

2. 我有解密方法(名称为Salary)。可以将该方法绑定到mysql查询。我试过这个

" 从员工中选择*为emp,薪水为s,其中emp.employees_id = CAST(" + decrypt(" s.employees_encrpted_id")+ " AS UNSIGNED)"

但抛出错误" [MySQLSyntaxErrorException:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用')'在第1行]"

1 个答案:

答案 0 :(得分:0)

如果您必须处理加密的ID列,则可以使用以下选项:

1)将引用的表(从数据库中,加载到应用程序中)加载,然后解密,然后加入......显然这有一点缺陷:您无法使用DBMS进行连接,如果所说的东西依赖于加密列以解密形式提供,则用于分组或聚合等

2)加载第一个表,加密ID,并创建一个临时表,其中包含加密ID的第一个表,对临时表+其他具有加密ID的表运行查询,并删除临时表...显然还有一个小漏洞:你的DBMS获得了关于它不应该知道什么的知识:加密和未加密的id之间的关系......

3)将加密/解密实现为存储函数,并在每次使用关系时使用密钥调用它...再次存在缺陷:您的DBMS需要为每个id值调用此函数以获取解密/加密值,这可能会影响您或您的用户最多只能忍受(如果有的话)容忍

最后,您很可能会发现,由于密钥必须存储在应用程序服务器上,或者可以在DBMS端拦截,因此加密ID的整体安全性增益将会丢失。实施加密ID列的整个过程仅仅是为了娱乐而非盈利

相关问题