מנהל מסד הנתונים

פאנל db_manager באדמין של WIZZO CMS: עיון בטבלאות, עריכת שורות, הרצת SQL, ייצוא, שינוי מבנה ועוזרי AI. מה הוא מאפשר, איך הוא מוגן, ומדוע הוא כלי מסוכן, ומה ההבדל מפאנל safe_sql.

⏱ 3 דק' קריאה 595 מילים ערוך דף זה ב-GitHub

הפאנל db_manager הוא ממשק מלא למסד הנתונים בתוך האדמין: אפשר לדפדף בטבלאות, לערוך שורות, להריץ שאילתות, לייצא ולשנות מבנה. הוא כלי עוצמתי למפתחים, והדף מסביר מה בדיוק הוא עושה, מי יכול להשתמש בו, ומה הסיכונים.

בעמוד הזה system/ הוא תיקיית הליבה הפרוסה (= api/core בריפו) ו-{admin} הוא CONFIG::$admin_url של האתר.

הפאנל מריץ כל SQL
execute_query מזהה רק שאילתות קריאה (SELECT, SHOW, DESCRIBE, DESC, EXPLAIN) ומוסיף להן עימוד. כל משפט אחר (DROP, TRUNCATE, UPDATE, DELETE) מורץ כפי שהוא, דרך DB::sql. מי שמגיע לפאנל יכול למחוק או להרוס כל טבלה. הגבילו אותו למפתחים בלבד, וגבו לפני שימוש. המסמך DB_MANAGER_README.md בשורש הריפו מתאר אותו כבונה שאילתות לקריאה בלבד, והקוד אינו כך.

גישה והרשאות#

הפאנל הוא קובץ api/core/admin/db_manager.php (מחלקה ADMINMODULE_db_manager). הוא מופיע בתפריט רק אם קיימת לו שורה ב-CRM_adminPanel_panels, והרשאה אליו נקבעת כמו לכל פאנל (הרשאות אדמין). אם בשורה perm_developer = 1, רק מפתח Wizzo (ADMIN::is_developer()) יראה אותו. רישום שורה ידנית: ראו SQL להקמה.

התקנה אוטומטית לא עובדת

הקובץ install_db_manager.php אמור לרשום את הפאנל, אבל הוא קורא ל-DB::insert, שלא קיימת, ולכן הוא קוד מת.

מה אפשר לעשות#

הפאנל מספק endpoint אחד, {admin}/db_manager/api?action=... (GET, או POST עם גוף JSON). הפעולות:

קבוצהפעולות
עיוןtables, table_info, table_details, table_data, row, collations, change_collation
שורותinsert_row, update_row, update_cell, duplicate_row, delete_row, bulk_delete, bulk_insert
שאילתותexecute_query, export_query_results
ייצואexport_excel (CSV), export_json, export_sql
מבנהcreate_table, add_column, modify_column, drop_column, drop_table, truncate_table, rename_table, duplicate_table, add_index, drop_index
AIai_generate_query, ai_analyze_table, ai_explain_query, ai_fix_query, ai_generate_seed

העמוד הראשי (index) מציג לוח מחוונים: מספר טבלאות, גודל ב-MB, סך שורות וגרסת MySQL.

פעולות AI#

פעולות ה-ai_* שולחות לשירות ה-LLM (wizzo_ai) את סכמת הטבלה, ובחלקן גם דגימה קטנה של נתונים, כדי לייצר או להסביר שאילתה או נתוני בדיקה. ודאו שאין בטבלה מידע שאסור להעביר לשירות חיצוני לפני שמשתמשים בהן.

איך הפאנל מתגונן#

מנגנוןפירוט
שמות טבלה ועמודהעוברים ident(), שמתיר רק [A-Za-z0-9_]
חיפוש בטבלהDB::escape(addcslashes($search, "%_"))
מיוןנבדק מול העמודות האמיתיות של הטבלה
גודל עמודמוגבל ל-500 שורות
שגיאותHTTP 400 עם JSON {"success": false, "error": "..."}

ההגנות האלה מונעות הזרקה דרך שמות טבלאות, חיפוש ומיון. הן לא מגבילות את מה שהמשתמש עצמו כותב בעורך ה-SQL.

CSRF
ADMIN::verify_csrf_token() נקראת בליבה רק בטופס הכניסה ובמנהל הקבצים. ב-db_manager.php היא לא נקראת, ולכן פעולות הכתיבה של הפאנל נשענות על ההרשאות ועל ה-cookie של האדמין בלבד, למרות ש-DB_MANAGER_README.md מזכיר הגנת CSRF. אל תניחו הגנה שאינה קיימת. ראו CSRF, XSS ו-SQLi.

הפאנל safe_sql: חלופה מצומצמת#

{admin}/safe_sql מיועד לשינויי מבנה בלבד, וכך הוא מצמצם נזק:

  • מתיר רק CREATE TABLE, CREATE INDEX, CREATE UNIQUE INDEX ו-ALTER TABLE ... ADD.
  • חוסם לפי ביטוי רגולרי: DROP, DELETE, TRUNCATE, UPDATE, RENAME, MODIFY, CHANGE, REMOVE, וגם כמה משפטים באותה הרצה (; ואחריו טקסט).
  • מעביר את המשפט לבדיקת AI (type: sql_validation).
  • רושם כל ניסיון ב-CRM_safe_sql_log. הפעולות בפאנל: index, execute, create_log_table, clear_history.
בדיקת ה-AI נכשלת פתוח

אם שירות ה-AI מחזיר שגיאה, המשפט מותר. ההגנה העיקרית היא הבדיקה הרגולרית, לא ה-AI.

מתי להשתמש במה#

צורךכלי
להסתכל על נתוניםdb_manager (קריאה)
להוסיף טבלה, עמודה או אינדקסsafe_sql, או db_manager
תיקון שורה בודדתdb_manager אחרי גיבוי
פעולה מתוכנתת מהקודשכבת ה-DB, לא הפאנל
לראות מה רץדיבוג SQL

ראו גם#

מצאתם טעות או חוסר? תקנו את הדף או פתחו Issue בריפו. התיעוד נכתב מתוך הקוד של ליבה 5.0.115.