Wallet V4
#!/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 and Cloakware passwords
STANDARD_PWD="xyxyxyxyxytsts"
NEWPSWD=$(/path/to/pwEcho.exe "$ORACLE_SID" WALLET) # Fetch cloakware password dynamically
# If Cloakware password is missing, set it to empty
if [[ "$NEWPSWD" == "NA" ]]; then
echo "Cloakware password not found."
NEWPSWD=""
fi
# Function to fetch database and wallet information
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
DB_INFO=$(get_db_info)
IFS='|' read -r DBNAME WALLET_STATUS WALLET_LOCATION TBS_ENCR <<< "$DB_INFO"
# Check if Wallet Directory Exists
WRL_PRESENT="N"
if [[ "$WALLET_LOCATION" != "NA" && -d "$WALLET_LOCATION" ]]; then
WRL_PRESENT="Y"
fi
# Wallet Password Validation
PWD_MATCH="N"
CLK_PWD="N"
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 present."
# Try Cloakware Password First (if available)
if [[ -n "$NEWPSWD" ]] && echo "$NEWPSWD" | $ORACLE_HOME/bin/mkstore -wrl "$WALLET_LOCATION" -list 2>/dev/null; then
echo "Cloakware password is valid."
PWD_MATCH="Y"
CLK_PWD="Y"
else
# Try Standard Password
if echo "$STANDARD_PWD" | $ORACLE_HOME/bin/mkstore -wrl "$WALLET_LOCATION" -list 2>/dev/null; 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
fi
else
echo "Wallet files are missing."
fi
else
echo "Wallet location not found in the database."
fi
# Backup Wallet if Password is Valid
WRL_BKUP="N"
if [[ "$PWD_MATCH" == "Y" ]]; then
SHARED_LOCATION="/tmp/shared"
mkdir -p "$SHARED_LOCATION"
cp "$WALLET_LOCATION"/* "$SHARED_LOCATION"
echo "Wallet backup completed."
WRL_BKUP="Y"
fi
# 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
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