【问题标题】:java sybase connection with invalid database name具有无效数据库名称的 java sybase 连接
【发布时间】:2013-10-01 07:27:37
【问题描述】:

我正在使用 JDK7u25 和 JConnect_JDBC3.jar(它似乎是 Sybase JDBC 6.0 版)连接到 Sybase ASE。

我的网址如下:

jdbc:sybase:Tds:MYSERVER:5004/myDB

我可以毫无问题地连接到服务器。

但是,即使我在下面的 URL 中指定了错误的数据库名称,我也可以连接:

jdbc:sybase:Tds:MYSERVER:5004/myDBaa

jdbc:sybase:Tds:MYSERVER:5004/wrongDB

jdbc:sybase:Tds:MYSERVER:5004/

那么,如果我在 URL 中指定不正确或没有数据库名称,为什么它允许连接我?

【问题讨论】:

    标签: java sap-ase


    【解决方案1】:

    您已成功连接到服务器,但我怀疑在您的连接打开后,如果您检查您连接的数据库,它会列出master

    只要您连接的用户是master 数据库中的有效用户(或像public 这样的有效组的成员),您的连接就会成功 - 只是没有连接到正确的数据库。如果您将用户的默认 db 更改为 myDB,则尝试连接到无效的 DB 时会将其默认为 myDB。

    **以下内容可能会破坏 - 风险自负**

    可以从master中删除guest用户,但不能通过sp_dropuser完成。

    首先您必须启用对系统表的手动更新:

    sp_configure 'allow udpates to system tables', 1
    

    接下来,您将从 master..sysusers 中手动删除来宾用户

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

    最后关闭对系统表的手动更新以防止意外损坏:

    sp_configure 'allow updates to system tables', 0
    

    如果用户没有指定正确的数据库,这应该会阻止用户连接到您的系统。它还将阻止未获得默认数据库权限的用户连接。

    如果您需要撤消此更改,只需将访客用户添加回主数据库即可:

    sp_adduser guest
    

    【讨论】:

    • 谢谢。是的你是对的。我检查了连接的当前数据库,它是“主”。所以这似乎是 Sybase 的默认行为(在 Oracle/MSSQL 中这不会发生)。无论如何,我怎么能覆盖这个默认行为呢?如果数据库名称不正确,我想抛出错误。而且我不想执行查询来检查....有什么设置吗?
    • 有一种方法,但它需要手动更新系统表......并且可能会产生意想不到的后果。除非绝对必要,否则我会避免它。 - 我已将其添加到我的答案中。
    猜你喜欢
    • 2019-02-19
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2015-09-03
    相关资源
    最近更新 更多