2014-07-18 42 views
0

我需要將舊的oracle數據庫集成到django應用程序中。基本上我需要將一些表映射到django模型。將角色設置爲django orm上的oracle數據庫用戶

連接工作正常,如下:

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應用程序,管理向右運行SET ROLE語句打開連接後

回答

1

我不確定默認情況下是否有任何選項。但我認爲你可以用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) 

我沒有oracle數據庫,也沒有測試過,但它應該指向你正確的方向。

+0

這似乎是一個很好的方法。我會盡快進行測試 –