【问题标题】:django-mssql-backend - Invalid connection string attribute (0)django-mssql-backend - 无效的连接字符串属性(0)
【发布时间】:2021-07-04 07:59:48
【问题描述】:

好吧,我快要疯了。我想将 Django 3 连接到 MSSQLv15 服务器。如果我使用 Trustedconnection=yes(使用 win 凭据),连接可以工作,如果我使用 FreeTDS v7.4,它也可以在 Ubuntu 上工作,但如果我手动插入服务帐户或个人凭据并使用 sql 登录,它在 Windows 中将无法工作。是某种依赖问题吗?我尝试了各种库版本组合,但无济于事。

错误信息是:

conn = Database.connect(connstr,
django.db.utils.InterfaceError: ('28000', "[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'DOMAIN\\user'. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute (0)")

Requiremetns.txt

asgiref              3.3.4
Django               3.2
django-mssql-backend 2.8.1
djangorestframework  3.12.4
pip                  20.2.3
pyodbc               4.0.30
pytz                 2021.1
setuptools           49.2.1
sqlparse             0.4.1

不工作(赢)


DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'db_name',
        'HOST': 'hostname',
        'USER': 'DOMAIN\\user',
        'PASSWORD': 'pass',
        'PORT': '1433',

        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
           }
        }
    }

工作(赢)

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'db_name',
        'HOST': 'hostname',
        'USER': '',
        'PASSWORD': '',
        'PORT': '1433',

        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'Trusted_Connection': 'yes',
           }
        }
    }

工作(Ubuntu)

django==2.1.0
django-pyodbc-azure-2019

    DATABASES = {
        'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'db_name',
        'HOST': 'hostname',
        'USER': 'DOMAIN\\user',
        'PASSWORD': 'pass',
        'PORT': '1433',

            'OPTIONS': {
                "driver": "FreeTDS",
                "host_is_server": True,
                "extra_params": "tds_version=7.4",

               }
            }
        }


【问题讨论】:

  • 在没有 Trustedconnection 的情况下使用服务帐户或个人凭据 这是什么意思?要么使用 Windows 帐户并设置受信任的连接选项,要么使用 sql 登录但不设置该选项(或将其设置为否)。如果您没有设置该选项,我相信默认设置为“未设置(否)” - 这意味着您正在使用 sql 登录。
  • 是的,“没有 Trustedconnection”在这里是不合适的。我的意思是可信连接有效,而使用手动凭据的 sql 登录无效。

标签: sql-server django pyodbc django-pyodbc-azure django-mssql-backend


【解决方案1】:

SQL Server 的 ODBC 驱动程序 17 似乎不支持通过用户名和密码验证域用户,而 FreeTDS 支持(请参阅https://stackoverflow.com/a/37702329/9461432)。在非 Windows 计算机上,Microsoft 将引导您 to use Kerberos

如果您连接到使用 SQL Server 身份验证(即非域)的用户,则通过用户名和密码进行身份验证可以正常工作。

【讨论】:

  • 啊,那么谜团就解开了。好吧,至少我可以在带有 FreeTDS 的 Docker 中使用域用户。感谢您的帮助!
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2021-03-28
  • 1970-01-01
相关资源
最近更新 更多