Token AD del database SQL Server di Azure: Django

Oct 08 2020

Ho connesso con successo Azure SQL Server utilizzando AccessTokenin pyodbc . Qui non ho usato usernameo passwordper connettere il database. Invece di quello, ho usato attrs_beforeper il passaggio token. Qui sto generando automaticamente il token.

Generazione di token:

identity_endpoint = os.environ["IDENTITY_ENDPOINT"]
identity_header = os.environ["IDENTITY_HEADER"]

def get_bearer_token(resource_uri): #Automattically token will generate
    token_auth_uri = f"{identity_endpoint}?resource={resource_uri}&api-version=2019-08-01"
    head_msi = {'X-IDENTITY-HEADER': identity_header}

    resp = requests.get(token_auth_uri, headers=head_msi)
    access_token = resp.json()['access_token']
    return access_token

Connessione Pyodbc:

accessToken = bytes(get_bearer_token("https://database.windows.net/"), 'utf-8');
exptoken = b"";
for i in accessToken:
    exptoken += bytes({i});
    exptoken += bytes(1);
tokenstruct = struct.pack("=i", len(exptoken)) + exptoken;

conn = pyodbc.connect(
      "Driver={ODBC Driver 17 for SQL Server};Server=yoursqlserver.database.windows.net,1433;Database=dbName",
      attrs_before={1256: bytearray(tokenstruct)});

Ora il problema è come usarlo nel framework Django per connettere DB? Non è possibile avere un usernameo passwordper connettere il database quando si usa il token di Azure.

Per favore aiutatemi.

Risposte

Shakthifuture Nov 18 2020 at 16:23

Ho creato un nuovo pacchetto per gestire questa funzionalità.

pip install django-mssql-azure-backend

quindi configurare settings.py

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'mydb',
        'HOST': 'myserver.database.windows.net',
        'PORT': '',
        'IS_AZURE_BASED_TOKEN': True
        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
        },
    },
}

Se stai usando un server SQL locale , usa questa configurazione.

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'mydb',
        'USER': 'user@myserver',
        'PASSWORD': 'password',
        'HOST': 'myserver.database.windows.net',
        'PORT': '',
        'IS_AZURE_BASED_TOKEN': False

        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
        },
    },
}

Collegamento Git: https://github.com/shakthifuture/django-mssql-azure-backend

In caso di problemi, segnalare il problema qui .