【问题标题】:django database reconnect with different userdjango 数据库重新连接不同的用户
【发布时间】:2013-02-07 00:48:03
【问题描述】:

背景是,我想要限制用户管理,而不是让前端应用程序完全访问数据库(用户表的创建由后端进程完成)。应该只允许前端访问当前登录用户有权读取的表。这样做的原因是,前端的安全问题不应该泄露对整个数据库的访问权限,而只会在最坏的情况下泄露给当前用户的内容,而我可以随机读取数据库而不会打扰后端进程。

因此,我希望 Django 模型与给定用户连接,而不是 settings.py 中对 django 数据库具有全局访问权限的用户。

这在不覆盖核心数据库连接的情况下是否可行?

【问题讨论】:

    标签: django database-connection user-management


    【解决方案1】:

    从 Django 1.2 或更高版本开始,您可以在 settings.py 中定义多个数据库。虽然我从来没有用它来指向同一个数据库,但我看不出有什么理由不能定义到同一个数据库但使用不同用户凭据的多个连接。

    然后,您可以根据数据库路由器中的登录用户(或未登录用户,视情况而定)决定使用哪个连接

    这方面的文档是here

    我发现他们选择使用名为“auth”的应用程序作为示例令人困惑,但它只是一个与其他应用程序一样的应用程序,所以不要误以为它与 auth 有任何关系,即使在你的情况会是这样。

    【讨论】:

    • 感谢您的回答,但这并不能解决我的问题:我必须在正在运行的生产环境中经常编辑 settings.py。我想避免这种情况。
    • 抱歉,我不确定我是否理解您为什么认为需要在生产环境中编辑设置文件才能使其正常工作?也许我在这里遗漏了一些东西。
    • 后台进程控制用户认证和新用户的注册。用户在那里开始一个项目等等,在前端进行,前端将该信息提供给控制用户的后端权限并在权限正常时执行用户操作。用户仍然希望在他的前端看到他的项目状态,所以他需要通过前端对他的表进行读取访问。为了不打扰后台,尤其是实时读取,我们希望所有的读访问都直接在数据库上,所有的写访问都通过后端
    • 好的,那么我上面的回答是我能想到的最简单的方法。没有理由实时编辑 settings.py (超出初始配置)。您可以将您喜欢的任何逻辑放入路由器中,从而确保用户拥有正确的权限,或者做任何您想做的事情。因此,如果您希望能够创建他们的帐户/无论如何,但不能再次写入数据库,您可以这样做。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2011-02-02
    • 2023-03-17
    • 2018-11-04
    • 2019-11-08
    • 1970-01-01
    相关资源
    最近更新 更多