【问题标题】:Restricted database user for DjangoDjango 的受限数据库用户
【发布时间】:2015-03-05 09:00:51
【问题描述】:

我正在使用 Postgres 数据库运行 Django。除了应用程序级别的安全检查之外,我正在考虑添加数据库级别的限制。例如。应用程序代码应该只能插入到日志表中,而不能从它们中更新或删除。

我会为此手动创建具有适当授权的数据库用户。我还需要一个更强大的用户来运行数据库迁移。

我的问题是,人们会这样练习吗?关于在 Django 中使用受限数据库用户的任何建议和最佳实践?

编辑:澄清一下,没有技术问题,我只是想听听其他人的经验和收获。一个 Django 特定的事情是,我需要至少两个 DB 用户:正常操作和运行迁移。我在哪里存储更多特权用户的凭据?也许让manage.py migrate 提示输入密码?

至于推理,假设我的应用存在 SQL 注入漏洞。使用特权用户,攻击者可以执行诸如删除所有表之类的操作。对于更有限的用户,潜在的损害会稍小一些,然后在仅插入的日志表中就有一些证据。

【问题讨论】:

  • 这个问题似乎与编程无关,至少在 StackOverflow 的范围内。推荐图书馆和场外资源是题外话。
  • 这是“如何用 Django 做 'X'?尝试用 Django 做 'X' 是不是一个明智的想法?”问题的类型。有没有更适合这个问题的 StackExchange 网站?
  • 我认为没有比这更好的 SE 网站了。聊天可能有助于获得答案或重写问题以使其更具话题性。
  • 我不明白这个问题。如果你想添加数据库级别的限制,那就去做吧。这与 Django 无关。就我个人而言,我不明白其中的原因,因为您的应用程序应该决定谁来控制什么,而 Django 的安全检查应该足够了,即使没有,也有很多库可以扩展基本身份验证后端并为您提供更多控制权。话虽如此,在 db 级别添加安全检查可能只是意味着您必须处理使用 django 管理数据库时遇到的任何问题

标签: python django database postgresql security


【解决方案1】:

我会尝试解决这个问题的方法是:

  • 为同一个数据库但不同用户设置两个数据库连接:
    1. 非特权数据库用户的“默认”。
    2. 'master' 用于对数据库具有完全访问权限的用户。
  • 根据自己的喜好配置路由器:https://docs.djangoproject.com/en/dev/topics/db/multi-db/
  • 执行迁移:./manage.py migrate --database=master

话虽如此,如果您有漏洞,例如 SQL 注入,即使用户可以读取,这已经是一场灾难。如果你有数据库备份设置,你不应该担心丢失/损坏数据,你应该担心数据泄漏!

另一方面,提出的问题可能还有其他用例。

【讨论】:

    【解决方案2】:

    为了将凭据存储给特权用户以执行管理命令,在运行 manage.py 时,您可以使用 --settings 标志,您可以将其指向具有其他数据库凭据的另一个设置文件。

    使用新设置文件的示例迁移命令:

    python manage.py migrate --settings=myapp.privileged_settings

    【讨论】:

      【解决方案3】:

      是的,有时会这样做,但并不常见。最好的方法是授予用户特定的权限,而不是在 django 中。做出这样的限制意味着我们不应该信任应用程序,因为它可能会以我们不希望它这样做的方式更改数据库中的某些文件/数据。

      所以,总结一下:创建另一个能够创建/修改数据的用户和另一个有限制正常使用的用户。

      在公司中创建一个用户来插入数据并创建另一个用户/脚本来访问数据的做法也很常见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-29
        • 2017-09-26
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        相关资源
        最近更新 更多