Jeton AD Azure SQL Server Database - Django

Oct 08 2020

J'ai connecté avec succès Azure SQL Server en utilisant AccessTokendans le pyodbc . Ici, je n'ai pas utilisé usernameni passwordpour connecter la base de données. Au lieu de cela, j'ai utilisé attrs_beforepour passer token. Ici, je génère le jeton automatiquement.

Génération de jetons:

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

Connexion 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)});

Maintenant, le problème est de savoir comment utiliser cela dans le framework Django pour connecter DB? Nous ne pouvons pas avoir un usernameou passwordpour connecter la base de données lors de l'utilisation d'un jeton Azure.

Sil te plait aide moi.

Réponses

Shakthifuture Nov 18 2020 at 16:23

J'ai créé un nouveau package pour gérer cette fonctionnalité.

pip install django-mssql-azure-backend

puis configurez 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',
        },
    },
}

Si vous utilisez un serveur SQL local , utilisez cette configuration.

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',
        },
    },
}

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

Si vous rencontrez un problème, veuillez signaler votre bogue ici .