本文介绍了使用MSI-Django的Azure SQL Server连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
我已使用pyodbc中的AccessToken
成功连接Azure SQL Server。这里我没有使用username
或password
来连接数据库。相反,我使用attrs_before
作为passtoken
。我在这里自动生成令牌。
令牌生成:
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
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)});
现在的问题是如何在Django框架中使用它来连接DB?使用Azure令牌时,不能使用username
或password
连接数据库。
请帮帮我。
推荐答案
使用此软件包处理此功能。
pip install azure-msi-mssql-django
然后配置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',
},
},
}
如果您使用的是本地SQL Server,请使用此配置。
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',
},
},
}
更多详细信息:https://pypi.org/project/azure-msi-mssql-django/
这篇关于使用MSI-Django的Azure SQL Server连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!