![如何禁用破坏性数据库命令?](https://linux22.com/image/490859/%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8%E7%A0%B4%E5%9D%8F%E6%80%A7%E6%95%B0%E6%8D%AE%E5%BA%93%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
大多数系统管理员都了解黑客对他们管理的 SQL 数据库执行 DROP 或 DELETE 等破坏性命令的风险。有没有办法完全禁止执行此类命令,也许是通过配置 MySQL / MS SQL / PostgreSQL,或者修改源代码(如果它们是开源的),删除这些危险功能。
Once you have your webapp online,
would someone with honorable intentions
ever need to DROP a table?!
这可能是“主要”数据库安全的终极解决方案,而不是四处奔波试图阻止这些完全不必要的命令。当然,在开发或可维护期间,可以重新启用它们,然后在不需要时关闭它们。
答案1
SQL Server 2005 中的 DDL 触发器可以禁止删除或修改表。
如果您将与数据库的交互限制为存储过程,则不必担心这一点。应用程序帐户只能运行存储过程 - 因此没有 SQL 注入的权限。
如果您无法做到这一点,那么您可以删除删除权限并执行任何类型的 DDL。这总比没有好。但如果有人想用 Null 更新您的所有数据,他们可以。
你将要如果您拥有宝贵的数据,请进行最新的备份,否则您将失业/失去生意。
答案2
您不需要修改数据库代码,因为它已经存在。只是人们不使用它。大多数 Web 应用程序最多需要插入、选择、更新、删除和创建的能力。许多安装过程会引导您完成使用特权用户创建所需帐户和具有最低权限的数据库的过程。如果我没记错的话,mediawiki 在这方面做得很好。
但是,我无法统计出有多少 Web 应用程序的 Web 应用程序数据库用户对其数据库拥有完全权限,甚至更糟的是,对整个数据库安装拥有完全权限。此外,有些应用程序的构建方式需要太多权限。或者不要使用内部特权和非特权帐户来执行管理功能。
答案3
听起来你可能想看看数据库防火墙。GreenSQL 是一个开源的防火墙:http://www.greensql.net/
干杯
答案4
这与文件访问没什么不同。用户帐户应具有完成该工作所需的绝对最低权限。除非绝对不可避免,否则应仅向管理员级别帐户授予诸如删除之类的权限,在这种情况下,应用程序设计可能应该进行审查。删除经常是必需的,但应仅限于需要删除的表。
如果在授予权限时小心谨慎并运用常识,则代码不需要修改。完全删除潜在的危险命令可能会导致数据库系统无法维护。