我正在尝试使用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
谢谢。
编辑:有了使用MechanismName
from an issue raised in Git
答案 0 :(得分:1)
像R一样,DBI是基于C的并且讲ODBC。如果它是基于Java的,它将使用JDBC。
我建议您在使用askForPassword
函数之前,使用硬编码的UID和PWD进行测试。
也就是说,我相信您会成功-
DBI::dbConnect(odbc::odbc()
,dsn = "name_name"
,uid = rstudioapi::askForPassword("Username")
,pwd = rstudioapi::askForPassword("Password")
)