mysql - 将方法名称绑定(bind)到 mysql where 子句?

标签 mysql scala encryption playframework

我用了两张 table 。

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

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

注意: 1.两个表的公共(public)字段是Employees表中的employees_id(这里我们存储的是employees id)和employees_encrpted_idSalary表中(我们使用加密方法对员工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/

相关文章:

php - mysql查询错误opencart过滤价格

mysql - show processlist 中的 mysql binlog dump 是什么

mysql union all with aliases,语法错误

使用 akka actors 的 Scala 简单 funsuite 单元测试失败

ios - 如何使用 Keychain 保存密码,如 GenericKeychain 示例代码

java - 在 Java 中使用 RSA 私钥加密

php - AJAX 表单提交错误

scala - 调用 Redis 方法时出现 NullPointerException

scala - 作为默认值不符合预期的隐式参数的函数引用

algorithm - 当我输入错误的密码时会发生什么?