环境:
我们在多台机器上托管了大约 100 个数据库。所有数据库都有共同的用户名,但每个数据库的密码都不同。
问题:
如何从外部文件中一一读取密码和 TNS(服务名称)并连接到每个数据库并运行 sql 查询并将输出传递到日志文件。
到目前为止做了什么:
- 创建
pass
的文件包含密码和 Service_Name 以及分隔符“:”
cat pass
Loufr#123:PROD
Brinj#6523:TEST
- 在步骤 1 中
dblist
使用所有(与服务名称匹配)创建另一个文件dbnames
cat dblist
PROD
TEST
DEV
QA
Quality
目标:
从中读取数据库的名称并从该数据库的文件中dblist
查找密码。pass
使用dbname
andpassword
连接到以下字符串中的数据库
sqlplus -s dbsnmp@${TNS}/${Password}
spool output.log
@query.sql
exit
这个脚本应该可以解决问题:
如果您只是要求一个脚本来解析包含凭据的文件。您还可以看到:在 shell 脚本中连接到 sqlplus 并运行 SQL 脚本
有很多方法可以获得你想要的东西,但是存储明文密码或在命令行上显示它们的“解决方案”是错误的。自许多版本以来,都有一种存储密码的解决方案,称为 oracle wallet。https://docs.oracle.com/database/121/DBIMI/walet.htm#DBIMI10236 使用它可以使脚本编写变得更加容易,因为您可以将登录代码限制为:“sqlplus /@tns”这将挖掘钱包中的凭据使用 tns 作为密钥并与之建立连接,甚至不显示用户名。
世界上有许多安全问题。为什么不使用这些工具让应用程序更安全一些呢?