Files
timebank-cc-public/check-alter-permission.sh
Ronald Huynen 2547717edb Initial commit
2026-03-23 21:37:59 +01:00

96 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
#
# Diagnostic script to check ALTER permission status
#
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${BLUE}===========================================================${NC}"
echo -e "${BLUE} Checking ALTER Permission Status${NC}"
echo -e "${BLUE}===========================================================${NC}"
echo ""
# Get database configuration from Laravel
echo -e "${BLUE}1. Reading Laravel database configuration...${NC}"
DB_USER=$(php artisan tinker --execute="echo config('database.connections.mysql.username');" 2>/dev/null | grep -v ">>>" | grep -v "Psy" | tr -d '\n' | xargs)
DB_NAME=$(php artisan tinker --execute="echo config('database.connections.mysql.database');" 2>/dev/null | grep -v ">>>" | grep -v "Psy" | tr -d '\n' | xargs)
DB_HOST=$(php artisan tinker --execute="echo config('database.connections.mysql.host');" 2>/dev/null | grep -v ">>>" | grep -v "Psy" | tr -d '\n' | xargs)
echo -e " Database: ${GREEN}$DB_NAME${NC}"
echo -e " User: ${GREEN}$DB_USER${NC}"
echo -e " Host: ${GREEN}$DB_HOST${NC}"
echo ""
# Prompt for MySQL credentials with GRANT privileges
echo -e "${BLUE}2. MySQL user with GRANT privileges needed to check grants${NC}"
echo -e " ${YELLOW}This can be root or a dedicated deployment user${NC}"
read -p " MySQL username [root]: " MYSQL_DEPLOY_USER
MYSQL_DEPLOY_USER="${MYSQL_DEPLOY_USER:-root}"
read -sp " MySQL password: " MYSQL_DEPLOY_PASS
echo ""
echo ""
# Check grants for localhost
echo -e "${BLUE}3. Checking grants for '$DB_USER'@'localhost'...${NC}"
GRANTS_LOCALHOST=$(mysql -u "$MYSQL_DEPLOY_USER" -p"$MYSQL_DEPLOY_PASS" -e "SHOW GRANTS FOR '$DB_USER'@'localhost';" 2>/dev/null)
if [ $? -eq 0 ]; then
echo "$GRANTS_LOCALHOST"
if echo "$GRANTS_LOCALHOST" | grep -qi "ALTER"; then
echo -e " ${GREEN}✓ Has ALTER permission${NC}"
else
echo -e " ${RED}✗ Does NOT have ALTER permission${NC}"
fi
else
echo -e " ${RED}✗ User '$DB_USER'@'localhost' does not exist${NC}"
fi
echo ""
# Check grants for 127.0.0.1
echo -e "${BLUE}4. Checking grants for '$DB_USER'@'127.0.0.1'...${NC}"
GRANTS_127=$(mysql -u "$MYSQL_DEPLOY_USER" -p"$MYSQL_DEPLOY_PASS" -e "SHOW GRANTS FOR '$DB_USER'@'127.0.0.1';" 2>/dev/null)
if [ $? -eq 0 ]; then
echo "$GRANTS_127"
if echo "$GRANTS_127" | grep -qi "ALTER"; then
echo -e " ${GREEN}✓ Has ALTER permission${NC}"
else
echo -e " ${RED}✗ Does NOT have ALTER permission${NC}"
fi
else
echo -e " ${YELLOW}⚠ User '$DB_USER'@'127.0.0.1' does not exist${NC}"
fi
echo ""
# Check all users matching the username
echo -e "${BLUE}5. Searching for all MySQL users with username '$DB_USER'...${NC}"
ALL_USERS=$(mysql -u "$MYSQL_DEPLOY_USER" -p"$MYSQL_DEPLOY_PASS" -e "SELECT User, Host FROM mysql.user WHERE User='$DB_USER';" 2>/dev/null)
echo "$ALL_USERS"
echo ""
# Test ALTER from Laravel
echo -e "${BLUE}6. Testing ALTER command from Laravel...${NC}"
php artisan tinker --execute="
try {
DB::statement('ALTER TABLE sessions ADD COLUMN test_check_column VARCHAR(10)');
echo 'SUCCESS: ALTER command worked' . PHP_EOL;
DB::statement('ALTER TABLE sessions DROP COLUMN test_check_column');
echo 'Test column cleaned up' . PHP_EOL;
} catch (\Exception \$e) {
if (strpos(\$e->getMessage(), 'ALTER command denied') !== false) {
echo 'DENIED: ALTER command was denied' . PHP_EOL;
} else {
echo 'ERROR: ' . \$e->getMessage() . PHP_EOL;
}
}
exit;
" 2>/dev/null | grep -E "SUCCESS|DENIED|ERROR"
echo ""
echo -e "${BLUE}===========================================================${NC}"
echo -e "${BLUE} Diagnostic Complete${NC}"
echo -e "${BLUE}===========================================================${NC}"