Token usługi Azure SQL Server Database AD - Django

Oct 08 2020

I z powodzeniem podłączony Azure SQL Server przy użyciu AccessTokenw pyodbc . Tutaj nie korzystałem usernameani passwordnie podłączałem bazy danych. Zamiast tego użyłem attrs_beforedo podania token. Tutaj generuję token automatycznie.

Generowanie tokena:

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

Połączenie 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)});

Teraz problem polega na tym, jak to wykorzystać we frameworku Django do połączenia bazy danych? Nie możemy mieć usernameani passworddo połączenia bazy danych przy użyciu tokenu Azure.

Proszę pomóż mi.

Odpowiedzi

Shakthifuture Nov 18 2020 at 16:23

Utworzyłem nowy pakiet do obsługi tej funkcji.

pip install django-mssql-azure-backend

następnie skonfiguruj 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',
        },
    },
}

Jeśli używasz lokalnego serwera SQL , użyj tej konfiguracji.

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

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

Jeśli napotkasz jakiś problem, zgłoś swój błąd tutaj .