如何使用Windows身份验证将Django连接到MSSQL

8

类似于这个问题:

如何使用Windows身份验证在Python中连接到另一个域中的Windows工作站上的MS SQL服务器

我当前的数据库配置如下:

   '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数据库设置?

你看过这个吗?https://dev59.com/yF8d5IYBdhLWcg3wYxY- - Andrey Shipilov
3个回答

0

看看这个模块 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/


0

我不确定您是否可以使用客户端的窗口用户名作为连接到SQL Server的受信任连接的验证器。

如果您将Web应用程序设置为使用AD身份验证(受信任连接),例如Windows身份验证,则Web应用程序将使用托管Web应用程序的服务器上的Windows帐户连接到SQL Server。

要跟踪哪个用户对SQL Server中的表进行了哪些编辑...

如果您正在跟踪谁正在编辑tableA:
  • 创建一个额外的列到tableA,并称其为UpdatedBy,存储nvarchar(255)数据类型
  • 每当您的Web应用程序更改tableA中的记录时,请确保使用客户端的窗口用户名更新相同记录的[UpdatedBy]

0

我们可以使用mssql-djangoDjangoMSSQL(SQL Server)连接起来,并使用Windows身份验证。*我使用SQL Server 2019 Express

首先,在"settings.py"中设置下面的代码,将DjangoMSSQL连接起来,使用Windows身份验证。下面的代码是在同一台Windows计算机(localhost)上展示DjangoMSSQL的例子,“ENGINE”必须是“mssql”,“NAME”用于数据库名称“test”,“HOST”的值为“DESKTOP-QVRCPTA”,表示Windows计算机名称(设备名称)。*对于"PORT"请保持为空白,因为如果设置任何端口号(例如“2244”、“9877”甚至是MSSQL的默认端口号“1433”),都会出现错误:

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

接下来,安装最新的软件包mssql-django
pip install mssql-django

然后,进行迁移并执行迁移:

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

然后,创建超级用户:

python manage.py createsuperuser

现在,我们可以使用Windows身份验证Django连接到MSSQL,然后为"test"数据库创建表。 *默认模式"dbo"会放在表名之前,如下所示:

enter image description here

这是 Django Admin

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接