若GBase JDBC 连接数据库异常,通过 GBase JDBC 试图连接一个数据库时,得到如下的异常:
SQLException: Server configuration denies access to data source
SQLState: 08001
VendorError: 0
什么原因?通过 GBase 命令行管理工具连接正常。
回答:
GBase JDBC 必须使用 TCP/IP 套接字来连接 GBase,由于 Java 不支持 UnixDomain 套接字。因此,当 GBase JDBC 连接 GBase 时,GBase 中的安全管理器会使用它的授权表来决定连接是否被允许。
用户必须增加授权来允许这种情况。下面的例子会告诉用户如何来做(不是最安全的)。
从 sqlcli 命令行客户端,作为一个可以授权的用户登录,利用如下的命令:
GRANT ALL PRIVILEGES ON [dbname].* to '[user]'@'[hostname]'
identified by '[password]'
以用户的数据库的名字代替[dbname],以用户的用户名代替[user] ,用要连接 GBase JDBC 的主机名称代替[hostname],并用用户密码代替[password]。注意,对于从本地主机进行连接的主机名部分,RedHat Linux 将失败。在这种情况下,对于[hostname]值用户需要使用 localhost.localdomain。在这之后使用 FLUSH PRIVILEGES 命令。
注意:
除非添加了“—host”标志,并为主机使用了不同于 localhost 的其他设置,否则将无法使用 GBase 命令行客户端测试连通性。如果用户使用特定的主机名 localhost,那么 sqlcli 命令行客户端会使用 Unix Domain 套接字。如果用户测试与 localhost 的连通性,那么使用“127.0.0.1”来作为主机名。
警告:
如果用户不明白 GRANT 是做什么的,或它如何工作,用户应该在试图改变权限之前阅读并理解 GBase 手册中的“GBase 访问权限系统”以及“常规安全问题”两节。
在 GBase 中不恰当地改变权限和许可,可能会使服务器不再具有最佳的安全性能。
No Suitable Driver 问题,我的应用程序抛出一个 SQL 异常“No Suitable Driver”,这是为什么?
回答:
有可能发生了两种情况之一,或者驱动不在用户的 CLASSPATH 中。或者用户的 URL 格式不正确。
关于--skip-networking 问题,我想在一个小程序或应用程序中使用 GBase JDBC,但是得到一个类似如下的异常:
SQLException: Cannot connect to GBase server on host:5258.
Is there a GBase server running on the machine/port you
are trying to connect to?
(java.security.AccessControlException)
SQLState: 08S01
VendorError: 0
回答:
或许是因为用户正在运行 Applet,用户的 GBase server 安装时设置了“--skip-networking”选项,或者是由于 GBase server 运行在防火墙之后。Applet 仅能使网络连接返回运行 Web 服务器的机器,该 Web 服务器提供了用于 Applet 的.class 文件。这意味着,要想使其工作,GBase 必须运行在相同的机器上(或必须使某类端口重定向)。这也意味着,你无法通过你的本地文件
系统来测试 Java 程序,你必须将它们放在 Web 服务器上。
由于 Java 不支持 Unix Domain 套接字,GBase JDBC 只能使用 TCP/IP 与GBase 通信。如果 GBase 启动时带有“--skip-networking”标志,或有防火墙,与 GBase 的 TCP/IP 通信可能会受到影响。
如果 GBase 启动时设置了“--skip-networking”选项,用户可以在文件/etc/gs.cnf 中把它注释掉。如果用户的 GBase server 在防火墙后,那么用户需要修改防火墙配置使得允许运行用户的 Java 代码的主机在 GBase 侦听的端口(缺省为 5258)上给 GBase server 进行连接。
GBase 自动关闭连接问题,我有一个小服务程序/应用程序正常地工作了一白天,然后晚上就停止工作了:
回答:
GBase 在无活动 8 小时后就自动关闭连接。你或许需要使用能处理失效连接的连接池。
此外,用户应该在应用程序中捕获 SQL 异常并处理它们,而不是一直传播
它们直到用户的程序退出,这只是一个好的编程习惯。当在处理查询过程中遇到网络连通性问题时,GBase JDBC 会把 SQLState (参见用户的 APIDOCS 中的 java.sql.SQLException.getSQLState()) 置为 “08S01” 。这时用户的程序应该重新连接 GBase。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




