Token de AD de Azure SQL Server Database - Django

Oct 08 2020

He conectado con éxito el servidor SQL de Azure usando AccessTokenen el pyodbc . Aquí no usé usernameni passwordpara conectar la base de datos. En lugar de eso, usé attrs_beforepara pasar token. Aquí estoy generando el token automáticamente.

Generación de tokens:

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

Conexión 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)});

Ahora el problema es cómo usar esto en el marco de Django para conectar DB. No podemos tener un usernameo passwordpara conectar la base de datos cuando usamos un token azul.

Por favor, ayúdame.

Respuestas

Shakthifuture Nov 18 2020 at 16:23

He creado un nuevo paquete para manejar esta función.

pip install django-mssql-azure-backend

luego configure 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 está utilizando un servidor SQL local , utilice esta configuración.

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

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

Si tuvo algún problema, mencione su error aquí .