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

emr*_*mru 18 database security django permissions

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

Set*_*eth 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'
Run Code Online (Sandbox Code Playgroud)

我想如果django中有一个bug,你可能会打开你的数据库到可怕的东西,但如果django中有一个很大的安全漏洞你就会遇到其他问题.

django最低需要选择,插入,更新和删除操作.如果你正在使用test或syncdb,你还需要能够创建表和索引(以及加载sql fixture的文件权限).

因此,对于mysql数据库,我猜测最佳权限集可能是select,insert,update,delete,create,index和file.如果你想获得真正的细节,你可以选择性地在表级别(而不是数据库级别)授予这些权限.

就个人而言,我觉得grant all ...更容易打字.


小智 8

我刚刚用 MySQL 测试了初始设置。对于python manage.py migrate你至少需要简单的操作如下补助(如果哟使用DB-准备):

  1. 创建、更改、索引
  2. 选择、更新、插入、删除

而且,顺便说一句 - 安全很重要。您可以通过限制系统暴露来减少攻击影响。在这种情况下 - 您可以限制“DROP” - 这是相当大的优势。如果您留下一些具有 SQL 注入能力的棘手漏洞 - 您可能会减少损害。我将来会研究删除 DELETE 关键字是否不会造成任何伤害 - 这也会限制潜在的威胁。只是因为我们都会不时留下错误:)


Rob*_*Rob 7

来自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.