繁体   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