【发布时间】:2021-07-27 13:19:04
【问题描述】:
我在公司环境中。使用包 DBI 和 odbc 我可以轻松地在 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 中模仿这种行为?
【问题讨论】:
-
我可以使用我的 Windows 凭据连接到服务器,如上所述,我可以读/写 SQL 表,但不能对服务器本身进行任何修改(无权限)。
-
啊,我不确定你是否在这两个部分中指的是同一台服务器。如果这是在其他地方运行的服务器(而不是在您的本地计算机上),那么您和您的 IT 部门之间存在沟通不畅。使用服务帐户运行 SQL Server 实例确实很有意义,但它应该是 Windows 用户或 MSA,而不是 SQL 身份验证用户。如果他们确实创建了一个经过 SQL 身份验证的登录,那么他们的建议就没有意义。
标签: r sql-server odbc dbi