2013-10-01 44 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

相关问题