Python 在django orm上将角色设置为oracle数据库用户

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

我需要将遗留oracle数据库集成到django应用程序中。基本上,我需要将一些表映射到django模型

连接工作正常,如下所示:

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数据库,也没有进行过测试,但它应该为您指明了正确的方向。

这似乎是一个不错的方法。我会尽快测试它