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

pcrecxhr  于 2023-04-13  发布在  Go
关注(0)|答案(5)|浏览(130)

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

xpszyzbs

xpszyzbs1#

Django文档:
https://docs.djangoproject.com/en/dev/topics/install/
如果你计划使用Django的manage.pysyncdb命令来自动为你的模型创建数据库表(在第一次安装Django并创建一个项目之后),你需要确保Django有权限在你正在使用的数据库中创建和修改表;如果你打算手动创建表,你可以简单地授予Django SELECT,INSERT,UPDATE和DELETE权限。在一些数据库上,Django在syncdb期间需要ALTER TABLE权限,但一旦syncdb创建了表,就不会对表发出ALTER TABLE语句。在创建具有这些权限的数据库用户之后,你将在项目的设置文件中指定详细信息,请参阅DATABASE以获取详细信息。

hm2xizp9

hm2xizp92#

我刚刚用MySQL测试了初始设置。对于python manage.py migrate,至少需要以下赠款来进行简单操作(如果使用db-preparation):

  1. CREATE、ALTER、INDEX
  2. SELECT、UPDATE、INSERT、DELETE
    还有顺便说一句-安全问题。你可以通过限制你的系统暴露来减少攻击的影响。在这种情况下-你可以限制'DROP' -这是相当大的优势。如果你留下一些棘手的漏洞,能够SQL注入-你可能会减少损害。我将在未来研究,如果它不会做任何伤害删除DELETE关键字-这将限制潜在的威胁以及。就因为我们都会时不时地留下bug:)
ee7vknir

ee7vknir3#

我通常:

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最低限度需要select、insert、update和delete来操作。如果你使用test或syncdb,你还需要能够创建表和索引(可能还有加载sql fixture的文件权限)。
因此,对于mysql数据库,我猜最佳的权限设置可能是select、insert、update、delete、create、index和file.如果你想了解真正的细节,你可以在表级别(而不是数据库级别)有选择地授予这些权限。
就个人而言,我发现grant all ...更容易输入。

vfwfrxfs

vfwfrxfs4#

您需要创建自定义迁移并使用原始SQL进行任何微调。
1.首先创建一个空迁移文件

python manage.py makemigrations --empty myapp

1.重命名为有意义的名称

mv 0002_* 0002_allow_workers_access_to_user_table.py

1.编辑迁移文件

from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        ("myapp_user", "0001_initial"),
    ]

    operations = [

        # Allow web workers access to the user table
        migrations.RunSQL(
            sql="""
                GRANT SELECT ON TABLE myapp_user TO "web-worker";
            """,
            reverse_sql="""
                REVOKE SELECT ON TABLE myapp_user FROM "web-worker";
            """,
        ),
    ]
czq61nw1

czq61nw15#

在数据库级别上配置权限的目的是什么?如果您的服务器被入侵,那么攻击者将能够对您的数据库做任何事情(因为他有登录/通行证),并且权限不会有帮助。如果您的服务器是安全的,那么权限是无用的。
如果您的DB服务器可以从外部世界访问,则权限是有意义的,但这样做并不是一个好主意。

相关问题