Azure SQL Server 데이터베이스 AD 토큰-Django
Oct 08 2020
나는 성공적으로 사용하여 푸른 SQL 서버를 연결 한 AccessToken에 pyodbc . 여기서는 데이터베이스를 사용 username하거나 password연결 하지 않았습니다 . 그 대신 attrs_beforepass를 사용 했습니다 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
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데이터베이스에 연결할 수 없습니다 .
제발 도와주세요.
답변
Shakthifuture Nov 18 2020 at 16:23
이 기능을 처리하기 위해 새 패키지를 만들었습니다.
pip install django-mssql-azure-backend
그런 다음 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 서버 ,이 구성을 사용합니다.
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://github.com/shakthifuture/django-mssql-azure-backend
문제가 발생한 경우 여기에서 버그를 신고 하세요 .