Initial commit
This commit is contained in:
95
check-alter-permission.sh
Executable file
95
check-alter-permission.sh
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/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}"
|
||||
Reference in New Issue
Block a user