Token AD dari Azure SQL Server Database - Django

Oct 08 2020

Saya telah berhasil menyambungkan Azure SQL Server menggunakan AccessTokendi pyodbc . Di sini saya tidak menggunakan usernameatau passwordmenghubungkan database. Alih-alih itu, saya menggunakan attrs_beforeuntuk lulus token. Di sini saya membuat token secara otomatis.

Pembuatan 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

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

Sekarang masalahnya adalah bagaimana menggunakan ini dalam kerangka Django untuk menghubungkan DB? Kami tidak dapat memiliki usernameatau passworduntuk menghubungkan database saat menggunakan token azure.

Tolong bantu saya.

Jawaban

Shakthifuture Nov 18 2020 at 16:23

Saya telah membuat paket baru untuk menangani fitur ini.

pip install django-mssql-azure-backend

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

Jika Anda menggunakan server SQL lokal , gunakan konfigurasi ini.

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

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

Jika Anda menghadapi masalah apa pun, harap laporkan bug Anda di sini .