很多系统在夜间都有数据批量处理需求,出于安全的角度考虑,可能会在shell程序中再次OS和数据库用户名密码的需求,这里使用Oracle数据库。
需要使用两个文件,一个是oracle中可以执行的sql脚本desctable.sql,另一个是校验脚本checkdbuser.sh
此shell程序在IBM AIX5 上测试通过,注意执行用户的环境变量中需添加ORACLE需要的环境变量
desctable.sql
desc user_table;
--
可执行的sql语句,为了不影响速度,使用一个简单的列出table结构,user_table为要检查的用户中的表
quit;
quit;
checkdbuser.sh
#
!/
bin
/
ksh
#校验OS用户密码
check_os_user()
... {
su - $LOGNAME -c 2>/dev/null
if [ $? == 0 ]
then
echo "密码正确,程序继续进行"
else
echo "密码错误,不能进行批处理操作"
exit 0
fi
}
#校验DB用户密码
check_db_user()
... {
b=`sqlplus $...{DBUSER}/$...{DBPASS} < desctable.sql | grep ERROR`
if [ $? == 0 ]
then
return 1 #数据库用户密码错误
else
return 0
fi
}
# 此shell程序从这里开始
if [ $# != 2 ]
then
echo " 参数个数错误,请指定数据库用户名密码,请按照下列格式输入 "
echo " 如:$0 db_user db_passwd "
exit 1
fi
#数据库用户名密码变量赋值
DBUSER = $ 1
DBPASS = $ 2
#检查用户密码是否正确,防止系统未退出时恶意操作
echo " 请输入操作用户密码: "
check_os_user
#检查数据库用户密码是否正确
check_db_user
if [ $ ? == 0 ]
then
echo " 数据库用户密码正确 "
else
echo " 数据库用户密码错误,按回车退出 "
fi
echo " 测试结束 "
read any
exit 0
#校验OS用户密码
check_os_user()
... {
su - $LOGNAME -c 2>/dev/null
if [ $? == 0 ]
then
echo "密码正确,程序继续进行"
else
echo "密码错误,不能进行批处理操作"
exit 0
fi
}
#校验DB用户密码
check_db_user()
... {
b=`sqlplus $...{DBUSER}/$...{DBPASS} < desctable.sql | grep ERROR`
if [ $? == 0 ]
then
return 1 #数据库用户密码错误
else
return 0
fi
}
# 此shell程序从这里开始
if [ $# != 2 ]
then
echo " 参数个数错误,请指定数据库用户名密码,请按照下列格式输入 "
echo " 如:$0 db_user db_passwd "
exit 1
fi
#数据库用户名密码变量赋值
DBUSER = $ 1
DBPASS = $ 2
#检查用户密码是否正确,防止系统未退出时恶意操作
echo " 请输入操作用户密码: "
check_os_user
#检查数据库用户密码是否正确
check_db_user
if [ $ ? == 0 ]
then
echo " 数据库用户密码正确 "
else
echo " 数据库用户密码错误,按回车退出 "
fi
echo " 测试结束 "
read any
exit 0