组的数据库架构
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
。
在Insert
中:结合uid
和gid
和特定的salt[=38制作哈希码(如sha256Hex) =].并将 uid
和 gid
插入 Member
.
在 Member
的 Select
秒内:你有一个额外的 难度 。您应该 select 具有正确哈希码的记录(来自 Member
)。
如果你有一个大而复杂的盐并且你的管理员无法访问盐(如你在评论中所说),he/she 找不到编解码器算法。因此,如果 he/she 向 Member
添加了一些记录,您的代码将忽略 select 中添加的记录,因为 key_info
不可能为真。
我有一个简单的用户和组数据库。
用户: uid(pk), name, password(不用担心密码明文)
组:gid(pk),名称,owner_uid
成员:uid(fk),gid(fk)(一个用户可以属于多个组)
现在,我不信任我的数据库管理员并希望 encrypt/secure 特定的列,以便数据库管理员无法将任何现有的 uid 添加到任何 gid。我如何修改我的模式以及我应该加密哪个列。
我有一个假定保持安全的加密密钥,我也想利用 sql 查询,因此无法完全加密表并存储为 blob。
我认为您无法通过数据库约束来执行此要求。您可以通过编程来管理它。但是,如果您编写一些触发器来处理它,您的(坏)管理员也可以访问触发器。
向 Member
添加一个额外的列,例如 key_info
。
在
Insert
中:结合uid
和gid
和特定的salt[=38制作哈希码(如sha256Hex) =].并将uid
和gid
插入Member
.在
Member
的Select
秒内:你有一个额外的 难度 。您应该 select 具有正确哈希码的记录(来自Member
)。
如果你有一个大而复杂的盐并且你的管理员无法访问盐(如你在评论中所说),he/she 找不到编解码器算法。因此,如果 he/she 向 Member
添加了一些记录,您的代码将忽略 select 中添加的记录,因为 key_info
不可能为真。