我正在尝试使用 DBI 库连接到 R 中的 Teradata 数据库(如果重要的话我在 Windows 上)。我可以使用 RODBC 库成功连接,因此我知道我的凭据等是正确的。
我怀疑问题是:
背景:
首先,如果我通过 ODBC 数据库源管理员查看它,这是我的 ODBC 信息:
使用 R 3.5.1 (2018-07-02)、RStudio、Windows 10。
什么有效:
library(RODBC)
con = odbcConnect(dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
我尝试过 DBI 但失败了:
library(DBI)
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password"))
错误:
Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password")
,MechanismName = "ldap")
错误:
Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
当未正确指定机制时,我在类似情况下看到过此错误(
ldap
),所以也许MechanismName
是错误的?
我知道我可以在连接字符串中说出我喜欢的任何内容,并且不会引发错误,因此如果
MechanismName
不是指定身份验证机制的正确方法,我将不会返回错误。例如:
con <- DBI::dbConnect(odbc::odbc()
,driver = "Teradata"
,DBCName = "name_name"
,host = "address.here.ok"
,uid = rstudioapi::askForPassword("Database user")
,pwd = rstudioapi::askForPassword("Database password")
,MechanismName = "ldap")
,made_up_input = "I like cats"
给出错误:
Error: nanodbc/nanodbc.cpp:950: 28000: [Teradata][ODBC Teradata Driver][Teradata Database] The UserID, Password or Account is Invalid
提前致谢。
编辑:从 Git 中提出的问题中得到了使用
MechanismName
的想法
与 R 一样,DBI 也是基于 C 语言并使用 ODBC。如果它是基于 Java 的,那么它就会使用 JDBC。
我建议您在使用
askForPassword
函数之前先使用硬编码的 UID 和 PWD 进行测试。
也就是说,我相信你会成功--
DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)
对于那些这么晚才发现的人来说,只有提供了 ODBC 管理器中显示的驱动程序的确切名称,原始 DBI 调用才会起作用。打开 ODBC 数据源管理器应用程序并单击“驱动程序”选项卡。输入与“名称”列中显示的驱动程序名称完全相同的名称,它应该可以工作。例如,“Teradata Database ODBC 驱动程序 16.10”而不是如上所示的“Teradata”。
ODBC 驱动程序版本 16.20 DSN 设置和连接功能的实际参数。如果您需要勤奋地进行凭据连接,请在理论中验证 LDAP,如果您需要在 ODBC.INI 存档中进行配置,请注意以下事项。 Alguien sabe qué puede estar causando el inconveniente? Alguien podría explicarme por Advantage la forma Correcta de configurar la autenticación en Teradata para que la conexion odbc no solicite credenciales en R?