我正在寻找如何正确配置数据库权限以保护Django应用程序的链接或答案?为了清楚起见,我正在寻找专门处理数据库授权的材料,而不是Django框架本身的权限。
答案 0 :(得分:8)
我通常:
grant all privileges on my_db.* to my_user@localhost identified by 'my_user_pass'
grant all privileges on test_my_db.* to my_user@localhost identified by 'my_user_pass'
我想如果django中有一个错误,你可能会打开你的数据库直到可怕的事情,但如果django中存在大量的安全漏洞你就会遇到其他问题。
django最低需要选择,插入,更新和删除才能运行。如果你正在使用test或syncdb,你还需要能够创建表和索引(以及加载sql fixture的文件权限)。因此,对于mysql数据库,我猜测最佳权限集可能是select,insert,update,delete,create,index和file。如果你想获得真正的细节,你可以选择性地在表级别(而不是数据库级别)授予这些权限。
就个人而言,我发现grant all ...
更容易输入。
答案 1 :(得分:7)
来自django docs:
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。
答案 2 :(得分:3)
我刚用MySQL测试了初始设置。对于python manage.py migrate
,至少需要以下授权进行简单操作(如果您使用db-preparation):
顺便说一下 - 安全很重要。您可以通过限制系统暴露来减少攻击影响。在这种情况下 - 您可以限制' DROP' - 这是相当巨大的加分。如果你留下一些具有SQL注入能力的棘手漏洞 - 你可能会减少伤害。如果删除DELETE关键字不会造成任何伤害,我将在未来进行研究 - 这也会限制潜在的威胁。只是因为我们不时都会留下虫子:))
答案 3 :(得分:-1)
在数据库级别配置权限的目的是什么?如果您的服务器遭到入侵,那么攻击者将能够对您的数据库执行任何操作(因为他有登录/通行证),并且许可将无济于事。如果您的服务器是安全的,那么权限就没用了。
如果你的数据库服务器可以从外部世界获得,那么权限就有意义,但这样做并不是一个好主意。