我被分配研究列级加密,附加要求sa
是无法读取加密列。
我在这篇 DBSE 帖子中读到的想法是创建一个受密码保护的证书,下面是一堆对称密钥,客户端应该使用只有他们知道的密码打开这些密钥。
这似乎可以确保除了客户端之外没有其他人可以读取加密数据。但是,他们仍然可以修改它们(删除它们或更新=损坏它们)。据我了解, usingENC/DECRYPTBYKEY
只是一个标量函数,与表无关。这意味着是否有人在特定列上使用这些函数不会“通知”数据库这些列包含加密数据。因此,“保护”数据的唯一方法是老式的特权方法。
我错过了什么吗?有没有办法限制列仅在打开特定键时接受更新或删除?甚至,在更新的情况下,要求该inserted.
值始终是 EncryptByKey 函数的输出?
不,无论加密如何,系统管理员或具有足够权限的人都可以更改数据。
如果问题或调查发生变化,数据是否可以更改并不重要,但它已被加密或系统管理员或具有足够权限的人无法使用,那么是的,这是可能的,但需要存储密钥在数据库系统之外或秘密密码被知道(安全性较低)。