Python 在django orm上将角色设置为oracle数据库用户
我需要将遗留oracle数据库集成到django应用程序中。基本上,我需要将一些表映射到django模型 连接工作正常,如下所示:Python 在django orm上将角色设置为oracle数据库用户,python,django,django-models,oracle11g,Python,Django,Django Models,Oracle11g,我需要将遗留oracle数据库集成到django应用程序中。基本上,我需要将一些表映射到django模型 连接工作正常,如下所示: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', 'NAME': 'orad03', 'USER': 'u_hrp', 'PASSWORD': 'myp4ssw0rd', 'HOST': 'myho
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'orad03',
'USER': 'u_hrp',
'PASSWORD': 'myp4ssw0rd',
'HOST': 'myhost.com.br',
'PORT': '1521'
}
}
我这里的问题是,应用程序表在所有者ADM_HRP下,应用程序使用用户U_HRP(它根本没有特权)。插入、删除、选择等的权限在角色R_HRP上
因此,在旧版ASP/VbScript应用程序上,它在建立连接后立即设置角色:
Sub Connect()
Set objConexao = Server.CreateObject("ADODB.Connection")
objConexao.Mode = 3
objConexao.CommandTimeout = 90
Dim strDSN
strDSN="DSN=orad03;Uid=u_hrp;Pwd=myp4ssw0rd;"
objConexao.Open strDSN
objConexao.execute "SET ROLE R_HRP IDENTIFIED BY " & chr(34) & "myp4ssw0rd" & chr(34)
End Sub
我需要在django应用程序上执行相同的操作,在打开连接后立即运行SET ROLE语句我不确定默认情况下是否有任何选项。但我认为你可以通过Django信号(hook)实现你的目标 连接\u创建的信号在成功建立到数据库的新连接后调用。它为您提供了一个连接对象。因此,您可以执行以下操作:
from django.db.backends.signals import connection_created
def set_role(**kwargs):
connection = kwargs.get("connection", None)
if connection:
cursor = connection.cursor()
cursor.execute("SET ROLE R_HRP IDENTIFIED BY %s", "myp4ssw0rd")
connection_created.connect(set_role)
我没有oracle数据库,也没有进行过测试,但它应该为您指明了正确的方向。这似乎是一个不错的方法。我会尽快测试它