在脚本中向 HSQLDB SqlTool 提供密码

Posted

技术标签:

【中文标题】在脚本中向 HSQLDB SqlTool 提供密码【英文标题】:Supply password to HSQLDB SqlTool in a script 【发布时间】:2020-05-16 16:42:00 【问题描述】:

我在服务器模式下将 HSQLDB 实例作为 systemd 服务运行。要关闭它,我发出以下命令:

java -cp $CLASSPATH:/usr/share/java/hsqldbutil.jar:/usr/share/java/hsqldb.jar "org.hsqldb.cmdline.SqlTool" --inlineRc=url=jdbc:hsqldb:hsql://localhost/$DB_NAME,user=SA,password=`cat ~/SA.pwd` --sql="SHUTDOWN;"

正如在命令中看到的那样,我以用户 SA 的身份使用从文件中读取的密码(只有特定用户可以读取)进行连接,并在 JDBC URL 中指定两者。

只要 SA 的密码为空并且我只需在命令中提供 password= 即可。

但是,如果 SA 有一个真实密码并且我在此处提供它,则会失败并显示错误消息:

'password' 元素必须为空值。对于非空密码,不提供密码元素,系统将提示您输入值。

有没有办法以非交互方式提供密码?

【问题讨论】:

【参考方案1】:

如果您使用sqltool.rc 文件而不是--inline-rc,它会起作用。将包含以下内容的文件放在将发出停止命令的帐户的主文件夹中:

urlid my-server
url jdbc:hsqldb:hsql://localhost/db_name
username SA
password CorrectHorseBatteryStaple

然后修改命令行如下:

java -cp $CLASSPATH:/usr/share/java/hsqldbutil.jar:/usr/share/java/hsqldb.jar "org.hsqldb.cmdline.SqlTool" --sql="SHUTDOWN;" my-server

地点:

my-server 是您在 sqltool.rc 中定义的任意标识符,并在 SqlTool 的命令行调用中引用 db_name 是启动时分配的数据库名称 CorrectHorseBatteryStaple 是 SA 密码(当前存储在 ~/SA.pwd 中)。

根据您的系统更改这些。由于sqltool.rc 包含凭据,因此请务必锁定其权限,就像对~/SA.pwd 一样。

【讨论】:

以上是关于在脚本中向 HSQLDB SqlTool 提供密码的主要内容,如果未能解决你的问题,请参考以下文章

SQLTool 退出后不提交数据 (HSQLDB)

使用 HSQLDB sqltool 探索 MySQL 文件

HSQL SQLTool无法连接

sqlTool.rc 包含纯文本密码

密码保护现有 HSQLDB 数据库

每次重新启动 HSQLDB 服务器时都必须设置 HSQLDB SA 密码吗?