【问题标题】:How to connect to Remote MS SQL Database using Windows Authentication of Remote Desktop in Java?如何使用 Java 中远程桌面的 Windows 身份验证连接到远程 MS SQL 数据库?
【发布时间】:2017-03-15 07:44:07
【问题描述】:

我正在尝试使用 Java 从我的机器连接到 MS SQL 数据库。

通常,我登录到远程桌面并使用远程桌面的 Windows 身份验证连接到数据库。

我尝试使用 JTDS

  "jdbc:jtds:sqlserver://<database server>;"
        + "user=<domain>\<username>;password=<password>"

但是返回登录失败错误。 “java.sql.SQLException: 用户 'domain\username' 登录失败。”

【问题讨论】:

  • Windows 身份验证意味着您指定名称。应用程序连接到当前用户的帐户。

标签: java sql-server jdbc remote-desktop jtds


【解决方案1】:

当您说“使用远程桌面的 Windows 身份验证”时,我很确定远程桌面默认使用您的 Windows 凭据。通过添加

integratedSecurity=true;

并删除

"user=<domain>\<username>;password=<password>"

您强制 java 使用您的集成(Windows 身份验证)凭据登录到数据库,就像您“一般”一样

注意 这仅在您从“通常”用于登录远程桌面的普通 COMPUTER 和 USER 访问数据库时才有效

总之:

"jdbc:jtds:sqlserver://<database server>;integratedSecurity=true;"

【讨论】:

    【解决方案2】:

    试试这个

    jdbc:jtds:sqlserver://<Server name>:<Port Number>;databaseName=<Database Name>;domain=<Domain Name>;useNTLMv2=True;user=<Domain Account Name>;password=<Domain Account password>;
    

    【讨论】:

    • 感谢您的回复。现在我收到了这条消息。登录失败。登录来自不受信任的域,不能用于 Windows 身份验证。在搜索这个时,我发现了这个stackoverflow.com/questions/546746/… 这里最上面的答案是“对我来说,这发生在我编辑一个空白的驱动程序/etc/hosts 文件并为本地网站添加一个条目时,但忽略了添加 127.0.0.1 localhost”你知道我在哪个系统上做这个吗?远程还是本地?
    • 可能从该服务器检查域服务器连接。
    • Windows 身份验证意味着您提供任何用户名。应用程序与登录用户的帐户连接。这意味着您不必将凭据存储在任何地方,密码可以更改而不会影响应用程序,而且您不必担心有人窃取用户名和密码。
    • 此外,NTLM v2 已过时。它早在 2000 年就在 NT 4 SP4 中引入,几乎在所有域中都被禁用。此连接字符串试图通过模拟指定用户(需要管理员权限),使用弱且不推荐使用的协议进行连接
    • 您是否参考过“NTLMV2 已过时”这一说法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多