更新日期:2024年09月11日
GBase JDBC 连接数据库异常
通过GBase JDBC 试图连接一个数据库时,得到如下的异常:
SQLException: Server configuration denies access to data source
SQLState: 08001
VendorError: 0
什么原因?通过GBase 命令行管理工具连接正常。
回答:
GBase JDBC 必须使用TCP/IP 套接字来连接GBase,由于Java 不支持Unix
Domain 套接字。因此,当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 命令。
GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司
- 181 -
注意:
除非添加了“—host”标志,并为主机使用了不同于localhost 的其他设
置,否则将无法使用GBase 命令行客户端测试连通性。如果用户使用特定的主
机名localhost,那么sqlcli 命令行客户端会使用Unix
Domain 套接字。如果
用户测试与localhost 的连通性,那么使用“127.0.0.1”来作为主机名。
警告:
如果用户不明白GRANT 是做什么的,或它如何工作,用户应该在试图改变
权限之前阅读并理解GBase 手册中的“GBase 访问权限系统”以及“常规安全
问题”两节。
在GBase 中不恰当地改变权限和许可,可能会使服务器不再具有最佳的安
全性能。