レガシー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(特権をまったく持たない)を使用することです。INSERT、DELETE、SELECTなどの権限は、ロール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アプリケーションで同じことを行う必要があり、接続を開いた直後にSETROLEステートメントを実行することができます
デフォルトでオプションがあるかどうかはわかりません。しかし、Djangoシグナル(フック)で目標を達成できると思います。
https://docs.djangoproject.com/en/dev/ref/signals/#connection-created
connection_createdシグナルは、データベースへの新しい接続が正常に確立された後に呼び出されます。それはあなたに接続オブジェクトを与えます。したがって、次のようなことができます。
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)
私はオラクルデータベースを持っておらず、それもテストしていませんが、それはあなたに正しい方向を示すはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加