刚刚发现SQLPLUS会将sql脚本的第一行解析为连接字符串,如果我在终端中调用sqlplus时不包含凭据,详细信息如下: 我有一个名为runme.sql的SQL脚本:
scott/tiger@//localhost:1522/orcl
select * from dual;
exit;
如果我将sqlplus调用为sqlplus @runme.sql
,sqlplus可以解析第一行并连接到数据库并运行sql。如果有的话,有人能指出我的文件吗?还有什么支持这种语法的优点?
答案 0 :(得分:1)
The documentation通常是一个很好的起点。如果您在命令行上提供用户名/密码,请注意warning;在提示时至少提供密码更安全,特别是在Unix类型环境中意味着凭证不会出现在ps
命令的输出中。
在脚本中输入密码或用户名和密码都可以自动执行,但当然您必须确保任何不知道凭据的人都无法查看该脚本。
正如LalitKumarB在评论中指出的那样,在任何地方硬编码密码都存在安全风险。如果您以交互方式运行脚本,那么每次都会提示稍微不一致。 (与被滥用的凭证可能造成的损害以及随后恢复和/或找到新工作的不便相比,这并不是非常不方便)。如果脚本没有以交互方式运行,那么使用调度程序而不是cron。您还可以使用Oracle Wallets以获得更高的安全性,而不会造成太大的不便。
特别是关于解析第一行的查询,the documentation说:
如果未指定登录但指定start,则SQL * Plus假定脚本的第一行包含有效登录。
在此上下文中,“start”与在命令行上使用@
提供脚本名称相同。