簡體   English   中英

如何使用 Windows 身份驗證將 Django 連接到 MSSQL

[英]How to connect Django to MSSQL with Windows Authentication

類似於這個問題:

如何使用 windows 身份驗證從另一個域中的 windows 工作站連接到 MS SQL 服務器,使用 ZA72115F3541B5627

我當前的數據庫配置如下所示:

   'default': {
        'ENGINE': "sql_server.pyodbc",
        'HOST': "myServer\server1",
        'USER': "myUserName",
        'PASSWORD': "myPassWord",
        'NAME': "myDB"

但是,我想通過 Windows 身份驗證,以便我可以跟蹤誰在對數據庫進行更改。 我通過 IIS 啟用了 Windows 身份驗證,因此在用戶訪問我的應用程序時會提示登錄。 我已經嘗試過了,但沒有奏效:

   'default': {
        'ENGINE': "sql_server.pyodbc",
        'HOST': "myServer\server1",
        'trusted_connection': 'yes'
        'NAME': "myDB"

有沒有辦法通過 windows 身份驗證到 Django 數據庫設置?

我不確定您是否可以使用客戶端的窗口用戶名作為到 SQL Server 的可信連接的身份驗證器。

如果您將 Web 應用程序設置為使用 AD 身份驗證(受信任的連接),如 Windows 身份驗證,則您的 Web 應用程序將使用在您的服務器上托管您的 Web 應用程序的 Windows 帳戶連接到您的 SQL Server。

要完成跟蹤哪些用戶對 SQL Server 中的表進行了哪些編輯...如果您正在跟蹤誰對 tableA 進行了編輯:

  • 為 tableA 創建一個額外的列,並將其稱為 UpdatedBy 存儲 nvarchar(255) 數據類型
  • 每當您的 Web 應用程序更改 tableA 中的記錄時,請確保使用您客戶端的窗口用戶名更新同一記錄的 [UpdatedBy]

查看此模塊https://pypi.org/project/django-windowsauth/

您可以使用此模塊通過 IIS 將 Windows 身份驗證集成到您的 Django 項目中。

然后,您可以將create_by / updated_by字段添加到您想要的任何模型。

from django.contrib.auth.models import get_user_model()
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=200)
    created_by = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

    # ...

使用請求上下文中的用戶,您可以像這樣設置字段:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(LoginRequiredMixin, CreateView):
    model = Author
    fields = ['name']

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super().form_valid(form)

https://docs.djangoproject.com/en/3.1/topics/class-based-views/generic-editing/#models-and-request-user

或者像這樣使用 DRF:

class YourView(generics.ListCreateAPIView):
    ...
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

如何在 Django Rest Framework 中將當前用戶設置為用戶字段?

同樣適用於update_by字段,但我建議您查看這個很棒的模塊https://pypi.org/project/django-simple-history/

我們可以使用mssql-django使用Windows 身份驗證Django連接到MSSQL(SQL Server)

首先,將下面的代碼設置為“settings.py” ,通過Windows AuthenticationDjango連接到MSSQL 下面的代碼是DjangoMSSQL同一台 Windows 計算機(localhost)中的示例, “ENGINE”必須為“mssql”“NAME”用於數據庫名稱(DB 名稱)“test”“DESKTOP-QVRCPTA”用於“主機”Windows 計算機名稱(設備名稱) *將“PORT”留空,因為如果設置任何端口號,例如“2244”“9877”甚至“1433” ,這是MSSQL的默認端口號,都會出錯:

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',                    # Must be "mssql"
        'NAME':'test',                       # DB name "test"
        'HOST':'DESKTOP-QVRCPTA\SQLEXPRESS', # <server>\<instance>
        'PORT':'',                           
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

此外, “DESKTOP-QVRCPTA”可以替換為“localhost”“USER”“PASSWORD”可以放入空字符串“PORT”可以刪除,如下圖所示,通過Windows 身份驗證Django連接到MSSQL

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',
        'NAME':'test',
        'USER':'',                     # Here
        'PASSWORD':'',                 # Here
        'HOST':'localhost\SQLEXPRESS', # Here
        # 'PORT':'',                   # Here      
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

接下來,安裝最新的 package mssql-django

pip install mssql-django

然后,進行遷移並遷移:

python manage.py makemigrations && python manage.py migrate

然后,創建超級用戶:

python manage.py createsuperuser

現在,我們可以使用Windows AuthenticationDjango連接到MSSQL ,然后為“test”數據庫創建表。 *默認模式“dbo”放在表名之前,如下所示:

在此處輸入圖像描述

而且,這是Django 管理員

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM