【问题标题】:Problem while trying to connect from R to SQL server using a service account not the default Windows authentication尝试使用服务帐户而不是默认的 Windows 身份验证从 R 连接到 SQL 服务器时出现问题
【发布时间】:2021-07-27 13:19:04
【问题描述】:

我在公司环境中。使用包 DBIodbc 我可以轻松地在 R 和 SQL 数据库之间建立连接:

con <- DBI::dbConnect(
  odbc::odbc(),
  driver = SQL.driver,
  server = SQL.server,
  database = SQL.database,
  encoding = SQL.encoding
)

我了解到,在没有特定 UID/PWD 的情况下,DBI 使用 Windows 身份验证。

由于这个 R 代码必须在外部服务器上运行(实际上,它是一个闪亮的应用程序),我需要指定一个 UID/PWD,为此我请求并从我的 IT 获取“服务帐户”部门。

但是,一旦我将服务帐户 UID/PWD 指定为 DBI::dbConnect(),我就会登录失败:

con <- DBI::dbConnect(
  odbc::odbc()
  ,driver = SQL.driver
  ,server = SQL.server
  ,database = SQL.database
  ,encoding = SQL.encoding
  ,UID = SQL.UID
  ,PWD = SQL.PWD
)
# Error: nanodbc/nanodbc.cpp:1021: 28000: [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'xxxxxxxx'.

如果我手动打开 MS SQL 服务器并尝试使用“SQL 服务器身份验证方法”而不是“Windows 身份验证”连接此服务帐户,我也会遇到同样的错误。

根据 IT 部门的说法,这是“正常的”,我想我应该使用此服务帐户作为用户启动 MS SQL 服务器,然后使用 Windows 身份验证进行连接。有趣的是,我们不允许“以”另一个用户的身份运行。

因此,假设这种机制可行,如何在 R 中模仿这种行为

【问题讨论】:

  • 你有访问服务器的权限吗?错误日志中可能有more info 正是登录失败的原因。我经常看到的一种可能是服务器没有启用SQL身份验证--here's如何启用它。
  • 我可以使用我的 Windows 凭据连接到服务器,如上所述,我可以读/写 SQL 表,但不能对服务器本身进行任何修改(无权限)。
  • 啊,我不确定你是否在这两个部分中指的是同一台服务器。如果这是在其他地方运行的服务器(而不是在您的本地计算机上),那么您和您的 IT 部门之间存在沟通不畅。使用服务帐户运行 SQL Server 实例确实很有意义,但它应该是 Windows 用户或 MSA,而不是 SQL 身份验证用户。如果他们确实创建了一个经过 SQL 身份验证的登录,那么他们的建议就没有意义。

标签: r sql-server odbc dbi


【解决方案1】:

我在使用个人信用和服务帐户信用到 MS SQLServer 数据库时进行了类似的设置。我使用以下连接到服务帐户...

请注意,您必须下载mssql jdbc jar file

username <= "myusername"
password <- "mypassword"
drv <- RJDBC::JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver",
                   'mssql-jdbc-7.0.0.jre8.jar')
connection_string <- paste0("jdbc:sqlserver://10.10.10.01\\srv1;databaseName=dbname;user=", 
                            username, ";password=", password, ";")
conn <- RJDBC::dbConnect(drv, connection_string)

【讨论】:

  • 感谢您的信息。不幸的是,由于我们的设置,我们不能使用基于 java 的解决方案(常见错误“无法从注册表中确定 JAVA_HOME”)。无论如何对于其他可以的人,对应于“//10.10.10.01\\srv1”?是否应该替换为 SQL 服务器地址?
  • JAVA_HOME 错误可能可以克服,但听起来这不是您想要的方向。至于另一个问题,它是数据库的 URL / IP 地址。
  • 不幸的是,我和一些同事尝试了多次修复这个 JAVA HOME 错误但没有成功,我们最终面临访问/权限/任何问题。感谢您的提议,但我无法对其进行测试,因此暂时批准它。
猜你喜欢
  • 2019-06-28
  • 1970-01-01
  • 2021-04-27
  • 2015-07-22
  • 1970-01-01
  • 2017-12-12
  • 2020-11-10
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多