我正在考虑使用操作系统的环境变量作为 Oracle 在 SQL 查询中提取密码的来源的想法。
ACCEPT TeamPassword PROMPT 'Enter your team password: ';
我想用能够定义TeamPassword = {环境变量菜单中的窗口用户变量查找变量}的东西替换此代码。编写的这段代码需要一个提示,我正在尝试摆脱它,并且可以通过&TeamPassword轻松使用。我希望能够以类似的方式使用此代码的新版本。
有人对如何使这项工作有任何聪明的想法吗?
这是"仅仅因为你可以并不意味着你应该"的一个很好的例子。从安全角度来看,使用环境变量来保存密码是一个非常糟糕的主意。可以使用系统监控工具审核、记录和查看环境变量,公开密码供任何人查看。出于同样的原因,您不希望密码出现在 sqlplus 或您正在运行的任何应用程序的命令行中。这很可能就是为什么您的代码现在有一个提示 - 以便可以输入密码而不会被任何其他人/任何东西记录。
您最好使用Oracle钱包(又名安全密码存储(来保存您的凭据。我在这里写了一篇关于这样做的博客文章:https://pmdba.wordpress.com/2014/10/16/database-account-password-storage/,还有很多其他资源可以通过快速的谷歌搜索获得。
使用钱包时,您可以在没有用户名和密码(它们都存储在钱包中(且没有提示的情况下登录。将钱包放在个人用户配置文件中,并在sqlnet.ora文件中使用环境变量指向钱包,如下所示:
WALLET_LOCATION=
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY="%USERPROFILE%oraclewallet")
)
)
您可以尝试将包装器脚本作为以下任一脚本;
set TeamPassword = %1
echo %TeamPassword%
REM and then continue your script for connecting to database using the above variable
或
set TeamPassword = %env.variable%
echo %TeamPassword%
REM and then continue your script for connecting to database using the above variable