我似乎无法让jdbcmysql在ssl上运行。
已下载的宝石:
jdbc-mysql(5.0.4)
jruby-openssl(0.7.1)
使用普通的rails控制台(不是jruby),我让它运行(下面已消毒):
cp = ActiveRecord::Base.establish_connection(
:adapter => 'jdbcmysql',
:host => 'host',
:username => 'user',
:password => 'pw',
:database => 'db',
:sslca => "ca-cert.pem"
)
但是在我调用cp.connection后,同样的命令会抛出这个:
RuntimeError: The driver encountered an unknown error: java.sql.SQLException: Access denied for user 'user'@'host' (using password: YES)
在jruby控制台中。这可能是因为我没有使用ssl,因为我将用户设置为需要ssl。
jdbc-mysql是否不支持ssl?我很确定jdbc适配器能做到。
答案 0 :(得分:0)
这里发生的事情是mysql客户端是版本5.0而服务器是5.1
语法完全相同,没有ssl的访问有效,但ssl无声地失败:(
答案 1 :(得分:0)
我发现使用jruby / odbc和ssl,你必须使用odbc url param来配置你的连接。文档很少,但我相信MRI gem会默认使用ssl(如果可用),但odbc适配器不会。似乎没有一个密钥可以放在yml / establish_connection中以在odbc上启用ssl。
这适用于这种情况: ssl = true
cp = ActiveRecord::Base.establish_connection(
:url => 'jdbc:mysql://host/db?user=user&password=pw&ssl=true&sslca=ca-cert.pem'
)
我不确定sslca密钥是否会直接转换,或者它是如何计算路径的。
heroku / postgresql建议添加:sslfactory = org.postgresql.ssl.NonValidatingFactory
仅使用postgresql进行测试,但我确信mysql和大多数所有odbc适配器都可以这样工作。