连接Java和Teradata:用户ID、密码或帐户无效
我一直在尝试连接到Teradata连接Java和Teradata:用户ID、密码或帐户无效,java,teradata,Java,Teradata,我一直在尝试连接到Teradata Class.forName("com.teradata.jdbc.TeraDriver"); String connectionString = "jdbc:teradata://xxx.xxxxxx.com/database=xxxxxx, tmode=ANSI, charset=UTF8"; String user = "Rocket512"; String password = "aui8mn5";
Class.forName("com.teradata.jdbc.TeraDriver");
String connectionString = "jdbc:teradata://xxx.xxxxxx.com/database=xxxxxx, tmode=ANSI, charset=UTF8";
String user = "Rocket512";
String password = "aui8mn5";
Connection conn = DriverManager.getConnection(connectionString, user, password);
得到以下信息
Exception in thread "main" com.teradata.jdbc.jdbc_4.util.JDBCException: [Teradata Database]
[TeraJDBC 14.10.00.17] [Error 8017] [SQLState 28000] The UserId, Password or Account is invalid.
at com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDatabaseSQLException(ErrorFactory.java:300)
at com.teradata.jdbc.jdbc.GenericLogonController.run(GenericLogonController.java:666)
at com.teradata.jdbc.jdbc_4.TDSession.<init>(TDSession.java:216)
这是我得到的结果
什么是坏密码?我用这个密码使用了SQL Assistant,效果非常好。为什么我不能用Java连接?以下内容可能无法为您提供解决方案,但可能会为您指明正确的方向。我认为您需要通过控制台检查teradata中的
dbc.logonoff
表,以确保您的用户未被锁定,或者了解您的驱动程序是否正在访问teradata
select *
from dbc.logonoff
where logdate >= date '2013-10-31'
也许你在以下方面会更幸运:
String driver = "com.teradata.jdbc.TeraDriver";
String conUrl="jdbc:teradata://xxx.xxxxxx.com/database=xxxxxx,USER=Rocket512,PASSWORD=aui8mn5,tmode=ANSI,charset=UTF8";
Class.forName(driver);
Connection dbConn = DriverManager.getConnection(conUrl);
如果这不起作用,请确保使用最新的jdbc驱动程序。阅读本文,我们可以看到此错误的典型原因
原因:LOGMECH=LDAP已指定,并且用户名/密码凭据
在日志数据中冗余提供,并单独提供
连接参数
解决方案:通过日志数据识别LDAP用户,或
通过单独的用户名/密码参数,但不能同时通过这两个参数
同时
所以,你应该检查一下这个案子。可能您可以在没有用户/密码的情况下获得连接LDAP身份验证失败将不会在
DBC中捕获。注销
将作为错误密码
事件,因为身份验证不会在数据库上进行
通常,您收到的错误消息,用户ID、密码或帐户无效。
,表示用户帐户被锁定在数据库上
SELECT U.UserName
, U.ProfileName
, U.DefaultAccount
, COALESCE(P.MAXLOGONATTEMPTS, S.MAXLOGONATTEMPTS) AS MaxLogonAttempts_
, U.LockedCount
, U.LockedDate
FROM dbc.UsersV U
LEFT JOIN
dbc.ProfileInfoV P
ON P.ProfileName = U.ProfileName
CROSS JOIN
dbc.SecurityDefaults S
WHERE UserName = 'Rocket512';
如果LockedCount
不是0
,则自上次成功登录数据库以来,登录尝试失败
SELECT U.UserName
, U.ProfileName
, U.DefaultAccount
, COALESCE(P.MAXLOGONATTEMPTS, S.MAXLOGONATTEMPTS) AS MaxLogonAttempts_
, U.LockedCount
, U.LockedDate
FROM dbc.UsersV U
LEFT JOIN
dbc.ProfileInfoV P
ON P.ProfileName = U.ProfileName
CROSS JOIN
dbc.SecurityDefaults S
WHERE UserName = 'Rocket512';
如果LockedDate
不是NULL
,则表示上次锁定帐户的日期
maxlogonattests\u
将告诉您在锁定帐户之前,您可以尝试使用数据库身份验证(TD2)登录多少次
我有几点建议:
connectString
connectString
connectString
以添加:,ACCOUNT=$AMRWRW&DrT&r
,它应该与上面我的响应中查询返回的内容匹配(我添加了DefaultAccount
)SELECT *
FROM DBC.LogonRulesV
WHERE UserName = 'Rocket512';
它可能不会返回任何东西,这没关系。这仅仅意味着您从系统上的任何主机使用该用户ID登录的能力尚未被明确授予或撤销
编辑:2018年5月22日
当提供的密码与目录服务器上存储的密码不匹配时,外部身份验证用户的“错误密码”事件可能会出现在事件日志中。在某些情况下,您可以通过使用PDN中的
ldapsearch
直接向LDAP目录提交查询来验证这一点。您可以在安全管理手册中找到有关使用此命令的更多详细信息。我发现这是因为我试图对无法通过目录身份验证的用户帐户子集进行分类。我觉得用更多的细节更新这个答案是合适的,因为我在顶部的引导陈述不是100%准确。我也有类似的错误,并遵循了这里给出的所有建议。我的帐户没有被锁定,我可以通过SQL辅助编辑器以相同的用户名和密码连接到数据库
我的解决方案是在连接字符串中添加以下行:LOGMECH=LDAP
您需要知道Teradata的登录机制,或者可以像我一样联系DBA团队。因此,您的连接字符串将如下所示:
String connurl=“jdbc:teradata://xx/database=xx,USER=xx,PASSWORD=xx,tmode=ANSI,charset=UTF8,LOGMECH=LDAP” 您的输出将用户显示为ROCKET512,您确定正确设置了用户名和密码吗?试着换一下。很抱歉这是个打字错误。一切都是正确的
username=“Rocket512”
,password=“aui8mn5”
。我的意思是我没有搞乱用户名和密码你确定用户名不区分大小写吗?是的。此外,我还尝试了这两种方法(不区分大小写的UID/PWD):java.sql.Connection conn=DriverManager.getConnection(“jdbc:teradata:///database=","","");@BoratSagddiev你解决问题了吗?+1这是最新的问题,仍然是相同的错误8017+1谢谢。我尝试了这个,这就是我所拥有的:[Error 1032][SQLState HY000]机制TD2不支持单点登录。
@boratsagdiev我以前见过这个问题。请阅读此主题@Ilya链接已过时+1谢谢。我已确认我没有被锁定。我可以通过sql助手轻松访问。此外,我还尝试删除空格并将所有内容放入连接字符串中,但都是一样的error@BoratSagddiev-我已经添加了第三个建议,因为缺少指定的帐户可能会导致问题。谢谢,我已经尝试了所有这些,包括修改字符串<代码>最大值