【问题标题】:Sonarqube 5.2 SQLServer connectionSonarqube 5.2 SQLServer 连接
【发布时间】:2016-02-05 23:43:47
【问题描述】:

Sonarqube 5.2 发布后,不再支持 jTDS JDBC 驱动。我们使用此驱动程序连接到我们的 SQLServer 实例,但我们必须切换到 Microsoft SQLServer 驱动程序。我们在 Ubuntu 上运行 Sonarqube,并使用 Active Directory 帐户连接到 SQLServer 数据库。因为我们在 Ubuntu 上运行,所以不能使用集成安全性,因此必须在 Sonarqube 的 JDBC 配置中提供凭据。这将产生以下属性:

sonar.jdbc.url=jdbc:sqlserver://sqlserverhost.my.domain.com:1433;databaseName=sonar;selectMethod=cursor
sonar.jdbc.username=someuser
sonar.jdbc.password=somepassword

这会导致 SQLServer 出现“登录失败”并显示消息“找不到与提供的名称匹配的登录名”。

接下来我尝试使用包含域的用户名进行连接,从而产生以下属性:

sonar.jdbc.url=jdbc:sqlserver://sqlserverhost.my.domain.com:1433;databaseName=sonar;selectMethod=cursor
sonar.jdbc.username=DOMAIN\\someuser
sonar.jdbc.password=somepassword

然而,这也会导致 SQLServer 中出现“登录失败”,这里的消息是“尝试使用带有 SQL Server 身份验证的 NT 帐户名。”

我错过了什么?

更新:
Sonarqube 日志可以在这里找到:http://pastebin.com/AGB9bTQG
我能想到与 jTDS 连接 url 不同的一件事: jTDS 连接 url 包含“;domain=my.domain.com”,Microsoft SQLServer 驱动程序似乎不支持。因此我尝试了 SQLServer 拒绝的 DOMAIN\someuser 设置。

【问题讨论】:

  • 在之前版本的SQ中(使用jTDS时),你使用的用户名和密码和现在的一样吗?换句话说,您是只更新了“sonar.jdbc.url”属性还是更改了其他内容?
  • 是的,我们使用相同的凭据已经有一段时间了,只更改了 sonar.jdbc.url 和 sonar.jdbc.driver ofcourse
  • 你不必指定“sonar.jdbc.driver”,你设置了什么值?
  • 我设置了 sonar.jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
  • 你确定你使用的用户和以前一样吗?您能否将服务器日志放在 pastebin.com 上并编辑您的问题以提供链接,以便我们仔细查看?

标签: sql-server jdbc sonarqube


【解决方案1】:

驱动与jtds驱动完全不同。为了使用它,您需要指定 authenticationScheme=JavaKerberos 参数(请参阅https://msdn.microsoft.com/en-us/library/gg558122(v=sql.110).aspxhttp://blogs.msdn.com/b/psssql/archive/2015/01/09/jdbc-this-driver-is-not-configured-for-integrated-authentication.aspx) 这里的问题是你的 Linux 机器很可能不在同一个域中,所以你也需要在你的 Linux 机器上配置 kerberos。您最好的选择确实是混合模式。

【讨论】:

    【解决方案2】:

    连接字符串格式已更改。没有更多:1443 或 selectMethod

    sonar.jdbc.url=jdbc:sqlserver://sqlserverhost.my.domain.com;databaseName=sonar

    【讨论】:

    • 也不起作用。顺便说一句,问题没有到达 SQLServer 实例。 SQLServer 只是说它无法识别登录
    【解决方案3】:

    连接字符串设置需要采用以下格式:

    sonar.jbc.url=jdbc:sqlserver://{server}:{port #};databaseName={db name}

    例如

    sonar.jbc.url=jdbc:sqlserver://localhost:36549;databaseName=Sonar

    在 SQL Server 配置管理器中检查 TCP/IP 协议是否已启用,并查找您要连接的 SQL 实例的端口号。请注意,连接字符串中的数据库名称区分大小写,并且必须与 SSMS 中显示的名称匹配。

    Re: Windows Auth to SQL Server - 您需要使用 SQL Server Auth 用户,或注释掉 sonar.jdbc.username 和 sonar.jdbc.password 以便 SonarQube 在运行用户的凭据下建立连接SonarQube 服务;我认为它不支持模拟。

    【讨论】:

    • 这实际上是问题所在。 Sonarqube 在 Linux 主机上运行,​​不使用 Active Directory 用户帐户,但 SQLServer 期望 AD 用户进行连接。不幸的是,jdbc:sqlserver 驱动程序不支持域配置,因此无法使用 AD 用户帐户连接到 SQLServer 实例。
    • 您能否将 SQL 实例更改为混合模式身份验证,以便您可以使用 SQL Auth 而不是 Win Auth (msdn.microsoft.com/en-gb/library/ms188670.aspx)?
    • 我认为这应该可行,但出于安全考虑,我们不会激活 SQL Auth。所以,这是问题的答案,但不是我要找的答案。
    【解决方案4】:

    我们的解决方案是创建一个具有数据库权限的 SQL Server 帐户并使用该帐户,而不是使用 AD/Windows 帐户。

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多