如何为Django应用程序配置数据库权限?
我正在寻找链接或答案,以了解如何正确配置数据库权限以保护Django应用程序?为了清楚起见,我正在专门讨论处理数据库授权的材料,而不是Django框架本身的权限。如何为Django应用程序配置数据库权限?
我通常:
grant all privileges on my_db.* to [email protected] identified by 'my_user_pass'
grant all privileges on test_my_db.* to [email protected] identified by 'my_user_pass'
我想,如果有在Django的错误,你可能会打开你的数据库恢复到可怕的事情,但如果有这么大的安全你有其他问题django洞。
django最低限度需要选择,插入,更新和删除操作。如果你使用测试或syncdb,你还需要能够创建表和索引(也许是加载sql fixtures的文件权限)。
因此,对于MySQL数据库,我猜想最佳的一组权限可能是选择,插入,更新,删除,创建,索引和文件。如果你想得到真正的实质,你可以有选择地在表级别(而不是数据库级别)上授予这些权限。
就我个人而言,我发现grant all ...
更容易打字。
配置数据库级权限的目的是什么?如果你的服务器受到攻击,那么攻击者就可以对你的数据库做任何事情(因为他有登录/密码),而且许可证无济于事。如果你的服务器是安全的,那么权限是无用的。
如果您的数据库服务器可从外部世界获得,权限可能是有意义的,但这样做并不是一个好主意。
通过添加数据库权限,您有机会限制SQL注入等攻击可以实现的功能。如果Web服务器受到损害,DB权限可能会限制损害 - 例如可能没有任何理由让Web应用程序登录可以删除数据库等。 – emru 2010-02-24 21:20:09
使用django可以很容易避免SQL注入,并且在清除所有表和删除数据库之间没有看到很大的区别。无论哪种方式,您都会丢失数据,并在消除漏洞后恢复备份中的任何内容。数据库级权限使您的项目更安全并不明显。我认为django没有内置的数据库级权限支持,因为最好是努力解决实际问题:XSS,CSRF,SQL注入等,而不是用一半的手段骗自己。 – 2010-02-25 03:59:09
这里是微软对ASP.NET应用程序的建议“......只授予应用程序必须运行的最低权限。” 和SANS“...这种方法应该只授予应用程序运行所需的最低权限。” 等 缺陷可以在应用程序堆栈中的任何级别 - 为什么你不想使用每种可能的工具来防止攻击传播。 – emru 2010-02-25 04:27:42
从Django文档:
https://docs.djangoproject.com/en/dev/topics/install/
“如果你打算使用Django的manage.py执行syncdb命令来自动创建您的模型数据库表(后首次安装Django和创建一个项目),你你需要确保Django有权限创建和修改你正在使用的数据库中的表;如果你打算手动创建这些表,你可以简单地授予Django SELECT,INSERT,UPDATE和DELETE权限在某些数据库上,Django将在syncdb期间需要ALTER TABLE特权,但一旦syncdb创建它就不会在表上发出ALTER TABLE语句。创建数据库后,我们呃具有这些权限,您将在项目的设置文件中指定详细信息,请参阅DATABASES以获取详细信息。“
我刚刚用MySQL测试了初始设置。对于python manage.py migrate
你至少需要简单的操作如下补助(如果哟使用DB-制剂):
- CREATE,ALTER,INDEX
- SELECT,UPDATE,插图,DELETE
而且,通过方式 - 安全至关重要。您可以通过限制系统暴露来降低攻击影响。在这种情况下 - 你可以限制'DROP' - 这是相当大的加。如果你留下一些棘手的漏洞并具备SQL注入的能力 - 你可能会减少损害。我将在未来研究如果它不会损害删除DELETE关键字 - 这也将限制潜在的威胁。只是因为我们都不时留下错误:)
谢谢Seth。我也这样做。但是,我一直在寻找“真正的细节”。我在网络上看到了一些东西,详细说明了这一点,看起来很值得加强。遗憾的是我没有收藏它... – emru 2010-02-24 00:38:37
这不言而喻,但在上述之后:'冲洗特权;' – mlissner 2010-08-14 02:44:24
@mlissner你能解释为什么吗? – 2012-05-13 23:44:18