Wallet v0
#!/bin/bash
# Ensure ORACLE_SID is passed as an argument
if [[ -z "$1" ]]; then
echo "Usage: $0 <ORACLE_SID>"
exit 1
fi
export ORACLE_SID=$1
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
SQLPLUS="$ORACLE_HOME/bin/sqlplus -s / as sysdba"
# Standard password (static)
STANDARD_PWD="xyxyxyxyxytsts"
# Fetch cloakware password dynamically
NEWPSWD=$(/path/to/pwEcho.exe $ORACLE_SID WALLET)
# Function to execute SQL and return multiple values in a single block
get_db_info() {
$SQLPLUS <<EOF
SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 100
SELECT
name || '|' ||
status || '|' ||
NVL((SELECT WRL_PARAMETER FROM gv\$encryption_wallet
WHERE inst_id = (SELECT INSTANCE_NUMBER FROM v\$instance)), 'NA') || '|' ||
(SELECT CASE WHEN COUNT(*) > 0 THEN 'YES' ELSE 'NO' END
FROM dba_tablespaces WHERE ENCRYPTED='YES')
FROM v\$database, v\$encryption_wallet;
EXIT;
EOF
}
# Fetch database details in a single SQL call
DB_INFO=$(get_db_info)
IFS='|' read -r DBNAME WALLET_STATUS WALLET_LOCATION TBS_ENCR <<< "$DB_INFO"
# Check if Wallet is Present
WRL_PRESENT="N"
if [[ "$WALLET_LOCATION" != "NA" && -d "$WALLET_LOCATION" ]]; then
WRL_PRESENT="Y"
fi
# Validate Wallet Presence
if [[ "$WRL_PRESENT" == "Y" ]]; then
echo "Wallet found at: $WALLET_LOCATION"
# Check if wallet files exist
if [[ -f "$WALLET_LOCATION/ewallet.p12" && -f "$WALLET_LOCATION/cwallet.sso" ]]; then
echo "Wallet files are physically available."
# Validate Wallet Password
WALLET_PWD_MATCH_STD=$($ORACLE_HOME/bin/mkstore -wrl $WALLET_LOCATION -list -password $STANDARD_PWD 2>/dev/null)
WALLET_PWD_MATCH_CLOAK=$($ORACLE_HOME/bin/mkstore -wrl $WALLET_LOCATION -list -password $NEWPSWD 2>/dev/null)
# Determine Password Match
if [[ -n "$WALLET_PWD_MATCH_CLOAK" ]]; then
echo "Cloakware password is valid."
PWD_MATCH="Y"
CLK_PWD="Y"
elif [[ -n "$WALLET_PWD_MATCH_STD" ]]; then
echo "Wallet password matches standard password."
PWD_MATCH="Y"
CLK_PWD="N"
else
echo "Wallet password does not match either standard or cloakware password."
PWD_MATCH="N"
CLK_PWD="N"
fi
# Backup Wallet if Password is Valid
SHARED_LOCATION="/tmp/shared"
WRL_BKUP="N"
if [[ "$PWD_MATCH" == "Y" ]]; then
mkdir -p $SHARED_LOCATION
cp $WALLET_LOCATION/* $SHARED_LOCATION
echo "Wallet backup completed."
WRL_BKUP="Y"
fi
else
echo "Wallet files are missing."
fi
else
echo "Wallet location is not found in database."
fi
# Autologon Check
AUTOLOGON=$(grep -q "AUTOLOGIN" <<< "$WALLET_STATUS" && echo "Y" || echo "N")
# Generate Report
RUN_DATE=$(date '+%Y-%m-%d %H:%M:%S')
REPORT_FILE="/tmp/report-$(date '+%Y%m%d').log"
cat <<EOF > $REPORT_FILE
DB Name: $DBNAME
TDE: $( [[ "$WALLET_STATUS" == "OPEN" ]] && echo "Y" || echo "N" )
WRL: $WRL_PRESENT
Autologon (valid for 19c.11/12c-NA): $AUTOLOGON
TBS ENCR: $TBS_ENCR
WRL BKUP: $WRL_BKUP
KEY BKUP: Y/N
CLK: $CLK_PWD
PWD Match: $PWD_MATCH
Run Date: $RUN_DATE
EOF
echo "Report saved at $REPORT_FILE"
Comments
Post a Comment