我使用过 Postgres,并且喜欢它处理数据库连接的方式。我现在必须使用 Matlab 和 Physionet 的平面数据库系统来检索数据。但是,在某些情况下,我不理解逻辑,例如ptbdb。
如何检查 Matlab 中是否存在与数据库的连接?
连接数据库时如何监控系统在做什么? 能够 ping 系统或类似的东西以了解问题所在将是非常好的。我现在没有得到任何信息是什么问题。
我的连接不断断开,因为它不安全。主题是关于 Matlab 和 PostgreSQL 之间的安全连接,它没有被广泛记录,例如,这里讨论了关于Matlab 和 PostgreSQL 之间的安全 SSL 连接。
进行适当的更改
dbtest.m
服务器证书
$openssl req -out diseserver.csr -new -newkey rsa:2048 -nodes -keyout diseserver.key
postgresql.conf
ssl = on
ssl_cert_file = 'diseserver.crt' # (change requires restart)
ssl_key_file = 'diseserver.key' # (change requires restart)
ssl_ca_file = 'root.crt' # (change requires restart)
pg_hba.conf
hostnossl all all 0.0.0.0/0 reject
hostssl mytable all 0.0.0.0/0 cert map=ssl clientcert=1
生成客户端证书
$mkdir ~/.postgresql
$cd ~/.postgresql
$openssl req -out postgresql.csr -new -newkey rsa:2048 -nodes -keyout postgresql.key
将密钥转换为pkcs8格式
$openssl pkcs8 -topk8 -inform PEM -outform DER -in postgresql.key -out postgresql.pk8 -nocrypt
检查客户端证书
jdbc:postgresql://diseserver.mydomain.org/mytable?ssl=true&sslfactory=org.postgresql.ssl.jdbc4.LibPQFactory&sslmode=verify-full&
dbtest.m
matlab函数
function dbtest
driver = 'org.postgresql.Driver';
[~,username] = system('whoami');
url = 'jdbc:postgresql://diseserver.mydomain.org/mytable?ssl=true&sslfactory=org.postgresql.ssl.jdbc4.LibPQFactory&sslmode=verify-full&';
myconn = database('mytable', username, '', driver, url);
if ~isempty(myconn.Message)
fprintf(2,'%s\n', myconn.Message);
else
fprintf(1, 'Connected!\n');
end
end