我有一个使用Python 3.6
和Django 1.11
的项目,其中我使用内置的User
模型。
用户对象都在默认数据库(即postgres
(中,但该项目使用第二个身份验证后端,因为一些用户需要根据传统的Oracle
数据库进行身份验证。
# settings.py
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend', # new postgres DB
'project_config.auth_backends.OtherBackend', # legacy Oracle DB
]
到目前为止,这很好,但现在我有3组用户:
- 有些用户只能在
ModelBackend
中进行身份验证,因为他们不在旧数据库中(因为他们是新用户( - 一些用户只能在遗留数据库中进行身份验证;他们具有CCD_ 7,因为他们还没有在新的CCD_
- 有些用户可以在两个后端进行身份验证,甚至可以在每个后端使用不同的密码;这是因为他们在新系统中更改了密码,但根据设计,更改不会传输回遗留数据库(不要对我开枪,在遗留数据库中更改密码的唯一方法是通过用户界面手动进行(
出于审核目的,我想列出所有用户,并查看每个用户都有哪些后端可用(暂时忽略is_active
标志(,以简化审核任务。我的想法是使用一个类似于这个的循环:
for usr in User.objects.all():
backend_list = []
if usr.has_usable_password():
backend_list.append('ModelBackend')
if ... : # what should I check here ?
backend_list.append('OtherBackend')
print(usr, backend_list)
我并没有遗留数据库中每个用户的密码,所以这个想法可能吗?
我还没有找到办法,但我愿意接受建议。
最后,我不得不接受@ivissani的建议,并查询遗留Oracle
DB:中的users表
select * from all_users;
有了这些信息,我可以将其与postgres
DB中的用户进行比较,并确定哪些用户只出现在一个或两个数据库中。