连接Java和Teradata:UserId,密码或帐户无效

Bor*_*iev 5 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";
        Connection conn = DriverManager.getConnection(connectionString, user, password);
Run Code Online (Sandbox Code Playgroud)

得到以下

  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)
Run Code Online (Sandbox Code Playgroud)

我知道主机是正确指定的,因为我没有得到UnknownHost Exception. 另外我已经仔细检查了我的用户名和密码是否正确.


我运行@ beni23建议的查询(谢谢)

select * 
from dbc.logonoff 
where logdate >= date '2013-10-31'
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果

在此输入图像描述

什么是Bad Password?我使用SQL Assistant使用这个密码,效果很好.为什么我不能用Java连接?

Rob*_*ler 6

LDAP身份验证失败不会DBC.LogOnOff作为Bad Password事件捕获,因为身份验证不会发生在数据库上.

通常,您收到的错误消息The UserId, Password or Account is invalid.表示用户帐户被锁定在数据库中.

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';
Run Code Online (Sandbox Code Playgroud)

如果LockedCount不是0自上次成功登录数据库以来发生的登录尝试失败.

如果LockedDate不是,NULL则表示帐户上次锁定的日期.

MaxLogonAttempts_ 将告诉您在锁定帐户之前可以尝试使用数据库身份验证(TD2)登录的次数.

我建议的几件事:

  1. 删除参数之间的空格 connectString
  2. 将用户和密码参数放在 connectString
  3. 使用上面的原始代码修改connectStringto add:,ACCOUNT=$AMRWRW&DrT&r它应该匹配上面我的响应中查询返回的内容(我已添加DefaultAccount).

编辑:11/12/13 5月我建议您下载Teradata Studio Express并尝试使用JDBC建立与相同Teradata系统的连接,就像您在代码中一样.这可能有助于阐明您需要在连接字符串中指定的参数,以使连接成功.您应该可以在Teradata Studio Express中设置与代码中的连接参数相同的连接参数,看看它是否有效.

使用LDAP作为未被授予使用NULL密码登录的明确权限的用户的登录机制导致错误消息"UserId,密码或帐户无效.".我前几天使用特权帐户收到此消息,而不将我的登录机制从LDAP更改为TD2.

以下SQL返回什么?

SELECT *
  FROM DBC.LogonRulesV
 WHERE UserName = 'Rocket512';
Run Code Online (Sandbox Code Playgroud)

它可能不会返回任何东西,这没关系.这只是意味着您无法从系统上的任何主机登录该用户标识,但尚未明确授予或撤消.

编辑:05/22/18 当提供的密码与目录服务器上存储的内容不匹配时,外部认证用户的"Bad Password"事件可能会出现在事件日志中.在某些情况下,您可以通过使用ldapsearchPDN直接向LDAP目录提交查询来验证这一点.您可以在"安全管理"手册中找到有关使用此命令的更多详细信息.我发现这试图分析一个无法对目录进行身份验证的用户帐户子集的问题.我觉得用更多细节来更新这个答案是合适的,因为我在顶部的声明中的主角不是100%准确.


ben*_*y23 4

以下内容可能不会为您提供解决方案,但可能会为您指明正确的方向。我认为您需要dbc.logonoff通过控制台检查 teradata 中的表,以确保您的用户没有被锁定,或者了解您的驱动程序是否正在访问 teradata。

select * 
  from dbc.logonoff 
 where logdate >= date '2013-10-31'
Run Code Online (Sandbox Code Playgroud)