组的数据库架构

Database Schema for group

我有一个简单的用户和组数据库。

用户: uid(pk), name, password(不用担心密码明文)

组:gid(pk),名称,owner_uid

成员:uid(fk),gid(fk)(一个用户可以属于多个组)

现在,我不信任我的数据库管理员并希望 encrypt/secure 特定的列,以便数据库管理员无法将任何现有的 uid 添加到任何 gid。我如何修改我的模式以及我应该加密哪个列。

我有一个假定保持安全的加密密钥,我也想利用 sql 查询,因此无法完全加密表并存储为 blob。

我认为您无法通过数据库约束来执行此要求。您可以通过编程来管理它。但是,如果您编写一些触发器来处理它,您的(坏)管理员也可以访问触发器。

Member 添加一个额外的列,例如 key_info

  1. Insert中:结合uidgid和特定的salt[=38制作哈希码(如sha256Hex) =].并将 uidgid 插入 Member.

  2. MemberSelect 秒内:你有一个额外的 难度 。您应该 select 具有正确哈希码的记录(来自 Member)。

如果你有一个大而复杂的盐并且你的管理员无法访问盐(如你在评论中所说),he/she 找不到编解码器算法。因此,如果 he/she 向 Member 添加了一些记录,您的代码将忽略 select 中添加的记录,因为 key_info 不可能为真。