Wallet v6
#!/bin/bash
# Ensure ORACLE_SID and DEFAULT_LOCATION are passed as arguments
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $0 <ORACLE_SID> <DEFAULT_LOCATION>"
exit 1
fi
export ORACLE_SID=$1
export DEFAULT_LOCATION=$2
export LOG_LOCATION="$DEFAULT_LOCATION/encryption/wallet_backup/logs"
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
SQLPLUS="$ORACLE_HOME/bin/sqlplus -s / as sysdba"
# Ensure required directories exist
mkdir -p "$LOG_LOCATION"
# Standard password (static)
STANDARD_PWD="xyxyxyxyxytsts"
# Fetch cloakware password dynamically
NEWPSWD=$(/path/to/pwEcho.exe "$ORACLE_SID" WALLET)
[[ -z "$NEWPSWD" ]] && NEWPSWD="NA"
# Function to fetch DB details
get_db_info() {
$SQLPLUS <<EOF
SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 200
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') || '|' ||
version || '|' || NVL(WALLET_TYPE, 'NA')
FROM v\$database, v\$encryption_wallet;
EXIT;
EOF
}
# Fetch database details
DB_INFO=$(get_db_info)
IFS='|' read -r DBNAME STATUS WALLET_LOCATION TBS_ENCR DB_VERSION WALLET_TYPE <<< "$DB_INFO"
# Check if Wallet is Present
WRL_PRESENT="N"
if [[ "$WALLET_LOCATION" != "NA" && -d "$WALLET_LOCATION" ]]; then
WRL_PRESENT="Y"
fi
# Wallet Backup (Independent of Password Validation)
SHARED_LOCATION="$DEFAULT_LOCATION/$DBNAME"
WRL_BKUP="N"
if [[ "$WRL_PRESENT" == "Y" ]]; then
echo "Wallet found at: $WALLET_LOCATION" | tee -a "$LOG_LOCATION/wallet_validate.log"
# Check if database name exists in wallet path
if [[ "$WALLET_LOCATION" == *"$DBNAME"* ]]; then
mkdir -p "$SHARED_LOCATION"
cp "$WALLET_LOCATION"/* "$SHARED_LOCATION"
echo "Wallet backup completed at $SHARED_LOCATION" | tee -a "$LOG_LOCATION/wallet_validate.log"
WRL_BKUP="Y"
else
echo "Database name not found in wallet path. Skipping backup." | tee -a "$LOG_LOCATION/wallet_validate.log"
fi
else
echo "Wallet location is not found in database." | tee -a "$LOG_LOCATION/wallet_validate.log"
fi
# Wallet Password Validation
PWD_MATCH="N"
CLK_PWD="N"
if [[ "$WRL_PRESENT" == "Y" ]]; then
# Try Cloakware Password First
echo "$NEWPSWD" | mkstore -wrl "$WALLET_LOCATION" -list >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
PWD_MATCH="Y"
CLK_PWD="Y"
echo "Cloakware password is valid." | tee -a "$LOG_LOCATION/wallet_validate.log"
else
# Try Standard Password
echo "$STANDARD_PWD" | mkstore -wrl "$WALLET_LOCATION" -list >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
PWD_MATCH="Y"
CLK_PWD="N"
echo "Standard password is valid." | tee -a "$LOG_LOCATION/wallet_validate.log"
else
PWD_MATCH="N"
CLK_PWD="N"
echo "Wallet password validation failed." | tee -a "$LOG_LOCATION/wallet_validate.log"
fi
fi
fi
# Generate Report
RUN_DATE=$(date '+%Y-%m-%d %H:%M:%S')
REPORT_FILE="$LOG_LOCATION/report-$(date '+%Y%m%d').log"
cat <<EOF > "$REPORT_FILE"
DB Name: $DBNAME
DB Version: $DB_VERSION
Wallet Type: $WALLET_TYPE
TDE: $( [[ "$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