2013-11-04 102 views
4

我一直在試圖連接到Teradata的連接Java和Teradata的:用戶ID,密碼或帳號是無效

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. 另外我已經仔細檢查了我的用戶名和密碼是否正確。


我跑的查詢通過@ beni23建議(謝謝)

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

這裏是我

enter image description here

什麼是Bad Password結果呢?我用這個密碼的SQL助手,它很好。爲什麼我無法連接到Java?

+1

重試你確定用戶名不區分大小寫? – Ingo

+0

是的,他們是。此外,我已經嘗試了兩種方式 –

回答

2

以下可能不會給你一個解決方案,但可能會指出你在正確的方向。我想你會想通過控制檯檢查teradata中的dbc.logonoff表,以確保你的用戶沒有被鎖定,或者知道你的驅動程序是否正在打teradata。

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

您的輸出顯示用戶爲ROCKET512,您確定您正確設置了用戶名和密碼嗎?嘗試交換它們。 – beny23

+0

對不起,這是一個錯字。一切都是正確的。 'username =「Rocket512」','password =「aui8mn5」'。我的意思是我沒有搞砸用戶名和密碼 –

1

也許你可能有更多的運氣:

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驅動程序。

+0

+1這是最新的http://downloads.teradata.com/download/connectivity/jdbc-driver仍然是一樣的錯誤8017 –

2

讀這篇文章Troubleshooting Security: The UserId, Password or Account is invalid.我們可以看到這個錯誤的典型原因。

原因: LOGMECH = LDAP被指定,用戶名/密碼證書 在兩者LOGDATA和作爲單獨 連接參數被冗餘設置。

解決方案:經由LOGDATA識別LDAP用戶,或通過單獨的用戶名/密碼參數 ,但兩者不能同時 。

所以,你應該檢查這種情況。可能是你可以得到,而無需用戶/密碼

+0

+1謝謝。我試過這個,這是我的:'[Error 1032] [SQLState HY000]單點登錄不支持機制TD2。' –

+1

@BoratSagddiev我以前見過這個問題。請閱讀本主題http://forums.teradata.com/forum/connectivity/error-8017-the-userid-password-or-account-is-invalid – Ilya

+0

正是我需要的,謝謝! –

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

如果LockedCount0比自上次成功登錄到數據庫發生了失敗的登錄嘗試。

如果LockedDate不是NULL它表示該帳戶上次鎖定的日期。

MaxLogonAttempts_會告訴您在鎖定帳戶之前可以嘗試使用數據庫身份驗證(TD2)登錄多少次。

一對夫婦的事情,我會建議:

  1. connectString
  2. 參數之間刪除空格把用戶和密碼參數在connectString
  3. 使用上面的原始代碼修改connectString補充: ,ACCOUNT=$AMRWRW&DrT&r它應該與我在上面的回覆中查詢返回的內容相匹配(我已添加DefaultAccount)。

編輯:11/12/13 我可以建議你下載的Teradata Studio Express的,並試圖對使用JDBC相同的Teradata系統的連接,就像你在這裏在你的代碼。這可能有助於闡明您需要在連接字符串中指定的參數,以使連接成功。您應該能夠在Teradata Studio Express中設置您的連接參數,就像您在代碼中所看到的一樣,然後查看它是否有效。

使用LDAP作爲未被授予用NULL密碼登錄的明確權限的用戶的登錄機制會導致錯誤消息「UserId,密碼或帳戶無效。」。我前些天使用特權帳戶收到此消息,而無需將我的登錄機制從LDAP更改爲TD2。

以下SQL返回值是什麼?

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

它可能不會返回任何東西,這沒關係。這僅僅意味着您從系統中的任何主機使用該用戶標識登錄的能力尚未被明確授予或撤銷。

+0

+ 1謝謝你。我已經證實我沒有被鎖定。我可以通過sql助手輕鬆訪問。此外,我試圖刪除空格,並將連接字符串中的所有內容都放入連接字符串中,但出現同樣的錯誤 –

+1

@BoratSagddiev - 我已經添加了第三個建議,指出缺少指定帳戶會導致問題。 –

+0

謝謝,我已經嘗試了所有這些,包括修改字符串。 'MaxLogonAttempts = 15'。 '鎖定的計數= 3'。仍然是相同的錯誤 –

-1

我有類似的錯誤,並遵循這裏給出的所有建議。我的帳戶沒有被鎖定,我可以通過SQL協助編輯器使用相同的用戶名和密碼連接到數據庫。

解決方案爲我工作是在連接字符串中添加以下行:LOGMECH = LDAP。

您需要知道Teradata的登錄機制,或者您可以像我一樣瞭解您的DBA團隊。因此,您的連接字符串將如下所示:

String connurl =「jdbc:teradata:// xx/database = xx,USER = xx,PASSWORD = xx,tmode = ANSI,charset = UTF8,LOGMECH = LDAP」 ;

相關問題