【问题标题】:Per user database authentication in DjangoDjango中的每个用户数据库身份验证
【发布时间】:2018-12-26 18:46:11
【问题描述】:

下午好, 我正在为一个包含敏感健康信息的研究数据库编写前端。我的机构制定了一项政策,即 SQL 服务器记录用户操作,以便他们可以在发生违规事件时对服务器日志文件执行审计。

由于这个策略,我不能以系统用户身份将 Django 连接到数据库(否​​则,前端操作的所有用户都将被服务器记录为 Django 系统用户,而不是单独作为实际用户)。

有没有办法使用每个用户的凭据连接到数据库,以便在前端执行的操作将作为该用户记录在数据库服务器上?我已经能够找到很多关于使用多个数据库的信息,但没有关于这些数据库的每个用户身份验证的信息。

谢谢你!

【问题讨论】:

    标签: sql-server django django-models


    【解决方案1】:

    我认为你不能这样做,连接到数据库的用户需要有权访问所有表。

    当我想在 Django 之外使用 Django 模型并限制某些用户对某些模型的访问时,我有一个 similar issue

    我最终在现有的 Django 数据库上使用了SQLAlchemy 及其automap 功能。然后您可以使用您的 SQL 用户连接到数据库。

    但是,如果您不介意所有用户访问所有表并且只关心日志,也许您可​​以为每个用户使用不同的settings.py 或至少不同的DATABASES 配置?

    【讨论】:

    • 谢谢,我以前不知道 SQLAlchemy 的自动映射功能,虽然它对我当前的问题没有帮助,但我已将其添加到我的工具箱中以供以后使用!一旦我有声望,我就会投票。
    【解决方案2】:

    我能够通过授予 SQL 用户 IMPERSONATE 权限并在我需要登录 models.py 的数据库查询之前执行 EXECUTE AS 来完成此操作。

        cursor = self.connection.cursor()
        try:
            cursor.execute("EXECUTE AS " + get_current_user()
        except DatabaseError as e:
            cursor.close()
            raise e
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 2010-12-23
      • 2020-12-21
      • 2019-04-23
      • 1970-01-01
      相关资源
      最近更新 更多