我用了两张 table 。
table1:Employees
表我有两列id,employees_id(类型:Long)
table2:Salary
表我有两列id,employees_encrpted_id(类型:字符串)
注意:
1.两个表的公共(public)字段是Employees
表中的employees_id(这里我们存储的是employees id)和employees_encrpted_id在Salary
表中(我们使用加密方法对员工id进行加密然后存储)
2.我已经解密了方法(名称是decrypt
)。可以将该方法绑定(bind)到 mysql 查询。我尝试过这样的
“从员工中选择 * 作为 emp,工资作为 s,其中 emp.employees_id = CAST("+decrypt
("s.employees_encrpted_id")+"AS UNSIGNED) ”
但抛出错误“[MySQLSyntaxErrorException:您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本对应的手册,以了解在第 1 行 ')' 附近使用的正确语法]”
最佳答案
如果您必须处理加密的 ID 列,您有以下选择:
1)将引用的表加载到内存中(从数据库中加载到应用程序中),然后解密,然后联接...显然这有一个小缺陷:您无法使用 DBMS 进行联接,或用于分组,或用于聚合等,如果所述事物依赖于加密列以解密形式提供
2) 加载第一个表,加密 ids,并创建一个包含第一个表(其 ID 已加密)的临时表,对临时表 + 其他具有加密 ID 的表运行查询,然后删除临时表...显然,又存在一个小缺陷:您的 DBMS 获得了它不应该知道的知识:加密和未加密 id 之间的关系...
3) 将加密/解密实现为存储函数,并在每次使用关系时使用 key 调用它...同样存在一个缺陷:您的 DBMS 需要为每个 id 值调用此函数才能获取解密/加密的值,这可能是您或您的用户最多只能勉强(如果有的话)容忍的性能影响
最后,您很可能会发现,由于 key 必须存储在应用程序服务器上,或者可能在 DBMS 端被拦截,因此您的加密 ID 的全部安全 yield 将会丢失。实现加密 ID 列的整个过程只是为了好玩,而不是为了盈利
关于mysql - 将方法名称绑定(bind)到 mysql where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677927/