下午好, 我正在为包含敏感健康信息的研究数据库编写前端。我所在机构制定了一项政策,要求用户操作由SQL Server记录,以便在发生违规时可以对服务器日志文件执行审核。
由于此策略,我无法以系统用户身份将Django连接到db(否则,前端操作的所有用户将以Django系统用户的身份(而不是实际用户的身份)由服务器记录。 / p>
是否有一种方法可以使用按用户凭据连接到数据库,以便在前端执行的操作将作为该用户记录在db服务器上?我已经找到了很多有关使用多个数据库的信息,但是没有关于这些数据库的每个用户身份验证的信息。
谢谢你!
答案 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