java - 连接Java和Teradata : The UserId, 密码或账号无效

标签 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);

得到以下内容

  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)

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


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

select * 
from dbc.logonoff 
where logdate >= date '2013-10-31'

这是我得到的结果

enter image description here

什么是错误密码?我用这个密码使用 SQL Assistant,效果很好。为什么我无法连接到 Java?

最佳答案

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';

如果 LockedCount 不是 0,则表示自上次成功登录数据库以来发生了失败的登录尝试。

如果 LockedDate 不是 NULL,它表示帐户上次被锁定的日期。

MaxLogonAttempts_ 会告诉您在帐户被锁定之前您可以使用数据库身份验证 (TD2) 尝试登录多少次。

我建议的几件事:

  1. 去除connectString参数之间的空格
  2. 将 User 和 Password 参数放入 connectString
  3. 使用上面的原始代码修改 connectString 以添加:,ACCOUNT=$AMRWRW&DrT&r 这应该与我上面的响应中的查询返回的内容匹配(我添加了 DefaultAccount).

编辑:2013 年 11 月 12 日 我可以建议您下载 Teradata Studio Express 并尝试使用 JDBC 连接到同一个 Teradata 系统,就像您在此处的代码中一样。这可能有助于阐明您需要在连接字符串中指定的参数,以便使连接成功。您应该能够在 Teradata Studio Express 中设置您的连接参数,就像您在代码中设置的一样,并查看它是否有效。

将 LDAP 用作未被授予使用 NULL 密码登录的明确权限的用户的登录机制会导致错误消息“用户 ID、密码或帐户无效。”。前几天,我使用特权帐户收到了此消息,但没有将我的登录机制从 LDAP 更改为 TD2。

以下 SQL 返回什么?

SELECT *
  FROM DBC.LogonRulesV
 WHERE UserName = 'Rocket512';

它可能不会返回任何东西,这没关系。这仅仅意味着您使用该用户标识从系统上的任何主机登录的能力尚未被明确授予或撤销。

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

关于java - 连接Java和Teradata : The UserId, 密码或账号无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19776230/

相关文章:

java - 用Java将pdf文档添加到Solr

java - 查询用户时 JPA 潜在的性能问题

java - Teradata 多个连接 INSERT 死锁

sql - 根据 10 天间隔创建组

teradata - Teradata 查询中的领先和滞后 - 对于类别

java - 无法从 Hibernate 项目将行插入 H2 数据库

java - SoundPool 文件队列

java - A 除以 N 阶乘的最高幂是多少?

java - 在 TERADATA 中为查询设置默认数据库名称

sql - 为SQLEXCEPTION添加SQL EXIT HANDLER会导致语法错误和意外的文本