2013-10-01 42 views
0

我使用JDK7u25和JConnect_JDBC3.jar(它看起來是Sybase JDBC版本6.0)連接到Sybase ASE。具有無效數據庫名稱的java sybase連接

我的網址如下:

jdbc:sybase:Tds:MYSERVER:5004/myDB 

我可以連接到服務器沒有任何問題。

然而,即使我在下面的URL指定了錯誤的數據庫名稱,我能連接:

jdbc:sybase:Tds:MYSERVER:5004/myDBaa 

OR

jdbc:sybase:Tds:MYSERVER:5004/wrongDB 

OR

JDBC:SYBASE: TDS:MYSERVER:5004/

那麼,爲什麼它允許我連接,如果我指定不正確的或沒有數據庫南e在URL中?

回答

1

您已成功連接到服務器,但我懷疑在連接打開後,如果檢查了連接的數據庫,它會列出master

只要您連接的用戶是master數據庫中的有效用戶(或public等有效組的成員),您的連接就會成功 - 只是沒有正確的數據庫。如果您將用戶的默認數據庫更改爲myDB,那麼嘗試連接到無效的數據庫會將其默認回myDB。

**下可以打破的東西 - 繼續在自己的風險* *

它可以從主降guest用戶,但它不能通過sp_dropuser來完成。

首先,你必須啓用手動更新系統表:

sp_configure 'allow udpates to system tables', 1 

接下來,您將手動刪除master..sysusers

delete from master..sysusers where name = "guest" 

guest用戶最後關閉手動更新系統表防止意外損壞:

sp_configure 'allow updates to system tables', 0 

這應該可以防止用戶轉如果它們沒有指定正確的數據庫,則會連接到您的系統。它還會阻止用戶將未授權的用戶連接到默認數據庫。

如果您需要撤消這一變化,只是添加了guest用戶返回到主DB:

sp_adduser guest 
+0

感謝。你是對的。我檢查了連接的當前數據庫,它是「主」。所以看起來這是Sybase的默認行爲(在Oracle/MSSQL中這不會發生)。無論如何,我怎麼能重寫這種默認行爲?如果數據庫名稱不正確,我想拋出一個錯誤。我不想執行查詢來檢查....是否有任何設置? – ParagJ

+0

有一種方法,但它需要手動更新系統表......並且可能導致無法識別的結果。除非絕對必要,否則我會避免它。 - 我已將它添加到我的答案中。 –

+0

好的。非常感謝您的詳細信息。 – ParagJ

相關問題