【问题标题】:Django Windows AuthenticationDjango Windows 身份验证
【发布时间】:2017-02-24 04:39:11
【问题描述】:

类似于这个问题:

How to use windows authentication to connect to MS SQL server from windows workstation in another domain with Python

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

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

【问题讨论】:

标签: python django windows authentication windows-authentication


【解决方案1】:

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

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

要完成跟踪用户对 SQL Server 中的表进行了哪些编辑... 如果您正在跟踪谁在对 tableA 进行编辑:

  • 为 tableA 创建一个附加列,并将其命名为 UpdatedBy 存储 nvarchar(255) 数据类型
  • 每当您的 Web 应用对表 A 中的记录进行更改时,请确保使用您的客户端窗口用户名更新同一记录的 [UpdatedBy]

【讨论】:

    【解决方案2】:

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

    How to set current user to user field in Django Rest Framework?

    同样适用于update_by 字段,不过我建议你看看这个很棒的模块https://pypi.org/project/django-simple-history/

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 2013-10-30
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 2023-03-22
      相关资源
      最近更新 更多