如何为Django应用程序配置数据库权限?

时间:2010-02-24 00:06:15

标签: database django security permissions

我正在寻找如何正确配置数据库权限以保护Django应用程序的链接或答案?为了清楚起见,我正在寻找专门处理数据库授权的材料,而不是Django框架本身的权限。

4 个答案:

答案 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):

  1. CREATE,ALTER,INDEX
  2. SELECT,UPDATE,INSET,DELETE
  3. 顺便说一下 - 安全很重要。您可以通过限制系统暴露来减少攻击影响。在这种情况下 - 您可以限制' DROP' - 这是相当巨大的加分。如果你留下一些具有SQL注入能力的棘手漏洞 - 你可能会减少伤害。如果删除DELETE关键字不会造成任何伤害,我将在未来进行研究 - 这也会限制潜在的威胁。只是因为我们不时都会留下虫子:))

答案 3 :(得分:-1)

在数据库级别配置权限的目的是什么?如果您的服务器遭到入侵,那么攻击者将能够对您的数据库执行任何操作(因为他有登录/通行证),并且许可将无济于事。如果您的服务器是安全的,那么权限就没用了。

如果你的数据库服务器可以从外部世界获得,那么权限就有意义,但这样做并不是一个好主意。