[英]How to configure database permissions for a Django app?
我正在寻找如何正确配置数据库权限以保护Django应用程序的链接或答案? 为了清楚起见,我正在寻找专门处理数据库授权的材料,而不是Django框架本身的权限。
我通常:
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中有一个bug,你可能会打开你的数据库到可怕的东西,但如果django中有一个很大的安全漏洞你就会遇到其他问题。
django最低需要选择,插入,更新和删除操作。 如果你正在使用test或syncdb,你还需要能够创建表和索引(以及加载sql fixture的文件权限)。
因此,对于mysql数据库,我猜测最佳权限集可能是select,insert,update,delete,create,index和file。 如果你想获得真正的细节,你可以选择性地在表级别(而不是数据库级别)授予这些权限。
就个人而言,我发现grant all ...
更容易打字。
来自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-preparation):
顺便说一下 - 安全很重要。 您可以通过限制系统暴露来减少攻击影响。 在这种情况下 - 你可以限制'DROP' - 这是相当大的优点。 如果你留下一些具有SQL注入能力的棘手漏洞 - 你可能会减少伤害。 如果删除DELETE关键字不会造成任何伤害,我将在未来进行研究 - 这也会限制潜在的威胁。 只因为我们都不时留下错误:)
在数据库级别配置权限的目的是什么? 如果您的服务器遭到入侵,那么攻击者将能够对您的数据库执行任何操作(因为他有登录/通行证),并且许可将无济于事。 如果您的服务器是安全的,那么权限就没用了。
如果您的数据库服务器可以从外部世界获得,则权限可能有意义,但这样做并不是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.