Database 检测数据库篡改,可能吗?

Database 检测数据库篡改,可能吗?,database,tampering,Database,Tampering,长时间侦听器,第一次调用 '假设您有一个负责记录用户活动的数据库表。此日志的完整性很重要,因此您希望能够检测是否有人修改了表中的任何数据。为了让事情更有趣,也要考虑一个事实,即你的系统可以由一个邪恶的SQL管理员来操作,他对这个可怜的系统有完全的控制。哎呀 您将如何保护您的数据 如果有人篡改了您的数据,您将如何检测 你可以使用无限的工具。(即散列、加密等)设置您的系统,将日志数据写入邪恶的SQL管理员无法控制的远程系统。这不会阻止上述管理员删除或篡改您的日志记录程序,但会阻止他在事后修改这些程序

长时间侦听器,第一次调用

'假设您有一个负责记录用户活动的数据库表。此日志的完整性很重要,因此您希望能够检测是否有人修改了表中的任何数据。为了让事情更有趣,也要考虑一个事实,即你的系统可以由一个邪恶的SQL管理员来操作,他对这个可怜的系统有完全的控制。哎呀

您将如何保护您的数据

如果有人篡改了您的数据,您将如何检测


你可以使用无限的工具。(即散列、加密等)

设置您的系统,将日志数据写入邪恶的SQL管理员无法控制的远程系统。这不会阻止上述管理员删除或篡改您的日志记录程序,但会阻止他在事后修改这些程序。

您可以使用触发器来审核插入、更新和删除。现在,如果“邪恶的SQL管理员”禁用触发器,那么您将遇到一些更困难的问题。如果我想保护我的数据,我不会允许一个邪恶的管理员完全控制系统。

这是一个常见的数据安全问题。简单的答案是——如果您的环境中只有一个“邪恶的SQL管理员”可以访问您的整个环境,那么您就没有办法保护您的数据

任务关键型数据的一种常见做法是登录到多个备份,并通过确保任何人都没有权限来进行保护。

如果“邪恶管理员”无法访问填充数据库的应用程序,则每个表上的一个额外列将完成此工作,该列由一个代表其余列的列组成。“无法访问”的条件是必要的,这样他们就不能仅仅提取您的私钥并签署他们的伪造数据


<>编辑:啊,评论家指出,我不认为管理员只是删除了一行。为此,您将需要一个额外的行,该行带有加密签名的行计数,您每次都会更新该行计数(或表内容其余部分的签名哈希,或上次访问时间,或您选择的任何指示符)

创建一个阴影表,该表使用只有您和应用程序知道的密钥/salt对每个字段进行散列。如果要检查数据篡改情况,请重新刷新用户表并与影子表进行比较。

如果您确实希望安全,请使用-一次写入多个介质读取该表。

如果您的应用程序始终在运行,您可以在数据库上启动事务,直到应用程序关闭后再释放它。。。这样一来,除了你的应用程序之外,任何东西都无法查看表格

同样是的,如果你有时间加密所有进出你程序的文本字符串数据


我也喜欢BobbyShaftoe的答案。。。再深入一点,看看你能不能触发“睡眠”之类的,几分钟后所有记录都会回到原来的状态。。。因此,我们邪恶的管理员认为他进行了更改,但这些更改将被还原。

如果您确实必须检测到已发生篡改,请在表中添加一个校验和字段。每一新行的校验和必须包括前一行的校验和。然后,要验证内容,请在前进时遍历数据集并计算校验和。如果计算的校验和与表中的值不匹配,则某些值已被篡改


-Mike

以及审核触发器、校验和等,您可以考虑将数据库复制到另一个从属数据库,而没有人能够直接对其执行任何操作


你仍然有被人弄乱触发器等的风险,但当他们被弄乱时,这是非常明显的,因此,您可以检测复制在哪一点被破坏。

您可以添加一个触发器,在数据输入到非生产数据库时发送数据副本,而恶意管理员也无权访问该数据库。管理员可以阻止触发器运行,但问题是如何检测操纵,而不是阻止操纵

我认为这是一个很好的问题!但是您的场景违背了数据库的设计原则

行校验和、触发器导出到其他数据库-您所做的任何事情都将是一种妥协

我只能提出一些开箱即用的建议——如果你采用某种类型的标准,比如合规性,会有帮助吗


如果失败了,我建议再找一份工作!在我们的行业中,有足够多的工作,您不需要与这些类型的人一起工作……

只需使用您的交易ID运行一个纸质日志,并将打印机放在一个只有一把钥匙的房间中即可。与金融系统合作,你会发现他们中的许多人仍然依赖纸质备份。几乎不可能不可追踪地“破解”纸质日志……这就是为什么人们一直在推动投票机中的纸质日志

很多人都在说,“只需添加另一个数据库”,尽管我自己也在实践这种日志记录,但我不相信它。一个恶意的内部人士可能会以十几种方式破坏这种保护措施

我们在这里所做的只是试图找到一种方法,让人们清楚地知道发生了什么事。你会丢失日志的。你不能相信他们:如果我遇到一个带有万无一失的日志系统的系统,我要么用垃圾数据填充它,要么干脆把它完全抹掉。不要陷入马其诺防线的心态


但是如果你准备得足够充分,以至于不得不发生太多的失败,你可以将破坏范围缩小到内部来源。你需要记录数据库,你需要保存大量的系统日志,你需要监控IP流量,在服务器室放一个摄像头,在控制台上放一个键盘记录器,等等。即使是最好的也会在某个地方出错,如果你周围有足够多的捕鼠器,你可能会在某个地方意外抓到它们。

首先,要非常小心你雇用谁来管理你的系统

下一个审计表由trigg填充