Django中的每用户数据库身份验证

时间:2018-07-18 18:41:11

标签: sql-server django django-models

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

由于此策略,我无法以系统用户身份将Django连接到db(否则,前端操作的所有用户将以Django系统用户的身份(而不是实际用户的身份)由服务器记录。 / p>

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

谢谢你!

2 个答案:

答案 0 :(得分:0)

我认为您无法做到,连接数据库的用户需要访问所有表的权限。

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

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

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

答案 1 :(得分:0)

我能够通过向SQL用户授予IMPERSONATE权限并在需要登录model.py的数据库查询之前执行EXECUTE AS来实现这一目标。

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