MCP DB Wizard

ทางการ

เซิร์ฟเวอร์ MCP สำหรับ Oracle ที่จะไม่ทำให้คุณถูกไล่ออก เซิร์ฟเวอร์ MCP นี้ไม่เปิดเผยพรอมต์ SQL และไม่สามารถบอกวิธีเข้าสู่ระบบ Oracle ได้ เฉพาะออบเจ็กต์และคำสั่ง SQL ที่เลือกไว้เท่านั้นที่ใช้งานได้

คุณทำอะไรได้บ้างด้วย DB Wizard MCP?

  • เรียกใช้รูทีน PL/SQL ที่ผ่านการคัดสรร — ขอให้ผู้ช่วยเรียกใช้โพรซีเดอร์จากแพ็กเกจที่ผ่านการตรวจสอบ เช่น synuser_js_admin_getadmintoolinfo ซึ่งจะส่งคืนเรคคอร์ด คอลเลกชัน และพารามิเตอร์ OUT ทั้งหมด
  • ดึงข้อมูลแถวเดียวจากตาราง — ขอแถวตามคีย์หลักผ่าน synuser_activity_log_get_by_pk และรับผลลัพธ์กลับมาเป็นออบเจกต์ JSON
  • เพิ่ม อัปเดต หรือลบข้อมูลในตาราง — สั่งให้ผู้ช่วยแก้ไขแถวผ่านเครื่องมือ synuser_activity_log_insert ที่สร้างขึ้น (รวมถึงตัวแปร _update และ _delete)
  • รับค่าลำดับถัดไป — ขอหมายเลขถัดไปจาก synuser_job_id_nextval โดยไม่เปิดเผยการดำเนินการเกี่ยวกับซีเควนซ์อื่นๆ
  • รันคำสั่ง SQL ที่ได้รับอนุมัติล่วงหน้า — ให้ผู้ช่วยดำเนินการไฟล์ SQL ที่มีชื่อและผ่านการทดสอบแล้วพร้อมพารามิเตอร์ผูกแบบระบุชนิด โดยไม่ต้องเขียนข้อความคำสั่งเฉพาะกิจขึ้นมาใหม่

เอกสาร

MCP server สำหรับ Oracle ที่จะไม่ทำให้คุณถูกไล่ออก

การกำหนดค่านี้คือโมเดลความปลอดภัยทั้งหมด

สิ่งที่เอเจนต์เข้าถึงได้

  • ตาราง synuser_activity_log_get_by_pk — หนึ่งแถวโดยคีย์หลัก เป็นออบเจกต์ JSON
  • ตาราง synuser_activity_log_insert — พร้อม _update และ _delete จากการเลือกเดียวกัน
  • รูทีน PL/SQL synuser_js_admin_getadmintoolinfo — เรคคอร์ด คอลเลกชัน และพารามิเตอร์ OUT ทุกตัว
  • ลำดับ synuser_job_id_nextval — ค่าถัดไป และไม่มีอย่างอื่น

ไม่สามารถเข้าถึงได้ โดยการออกแบบ

  • ข้อความ SQL จากผู้เรียก — อาร์กิวเมนต์เป็นค่า bind
  • DDL — create, alter, drop
  • ออบเจกต์ใดก็ตามที่คุณไม่ได้เลือก
  • สคีมาใดก็ตามที่การกำหนดค่าไม่ได้ระบุชื่อ
  • รหัสผ่าน Oracle — อยู่ใน environment

เอเจนต์ที่เขียน SQL ได้สามารถเขียน DROP TABLE ได้ เอเจนต์ที่ถือเครื่องมือชื่อ check_flight_availability สามารถตรวจสอบความพร้อมของเที่ยวบินได้ เพราะนั่นคือทั้งหมดที่โค้ดที่อยู่ตรงหน้ามันทำ

การคัดกรองเกิดขึ้นก่อนที่โค้ดจะถูกสร้าง

สิทธิ์น้อยที่สุดนั้นง่ายที่จะอ้างแต่ยากที่จะตรวจสอบ ที่นี่การกำหนดค่าตัดสินใจว่าสิ่งใดจะถูก สร้างออกมา: ออบเจกต์ที่ไม่มีใครเลือกจะไม่มี tool ไม่มี method และไม่มี class มันหายไปจากไบนารีแทนที่จะถูกป้องกันโดยกระบวนการที่รันอยู่ ดังนั้นไม่มีพรอมป์ใดเข้าถึงมันได้

กฎธุรกิจของคุณอยู่ใน PL/SQL อยู่แล้ว

ทศวรรษของการตรวจสอบ ตรรกะอ้างอิง และพฤติกรรมการตรวจสอบอาศัยอยู่ในแพ็กเกจ MCPDBWizard เรียกใช้รูทีนเหล่านั้นตามที่เป็นอยู่ — เรคคอร์ด คอลเลกชัน ref cursor และพารามิเตอร์ OUT ทุกตัวที่ส่งคืน — แทนที่จะขอให้โมเดลภาษาสร้างกฎเหล่านั้นขึ้นมาใหม่ใน SELECT

ทุกการเรียกคือ tool ที่มีชื่อ ไม่ใช่คิวรี

คำขอมาถึงเป็น synuser_activity_log_get_by_pk(entry_id) ตามสคีมาที่เข้มงวด — อาร์กิวเมนต์ที่สะกดผิดจะถูกปฏิเสธก่อนที่จะแตะฐานข้อมูล ง่ายกว่ามากในการบันทึก จำกัดอัตรา ตรวจสอบภายหลัง และอธิบายให้ผู้ตรวจสอบฟัง

ผู้ชมสองกลุ่ม บันทึกสองชุด

พร็อกซีเขียนว่าใครเรียก tool ใดและได้รับอนุญาตหรือไม่ เซิร์ฟเวอร์แต่ละตัวเขียนว่า tool ทำอะไรและจบลงอย่างไร ชื่ออาร์กิวเมนต์ เสมอ; ค่าเฉพาะเมื่อคุณเปิดใช้งานเท่านั้น เพราะโมเดลเป็นผู้เลือกค่าเหล่านั้น

Oracle 12c ถึง 26ai

รวมถึงประเภทที่เพิ่มเข้ามาตั้งแต่นั้น: JSON, BOOLEAN และ VECTOR แบบเนทีฟ และ CRUD เอกสารผ่าน duality views แบบ JSON-relational สิ่งใดก็ตามที่ไม่สามารถข้าม JSON ได้อย่างตรงไปตรงมา — SDO_GEOMETRY, BFILE — จะถูกข้ามทั้งหมด และบันทึกจะระบุว่าอะไรและเพราะเหตุใด

บัญชี โทเค็น และเมทริกซ์การให้สิทธิ์

หลายบัญชี หลายการกำหนดค่า หนึ่งติ๊กต่อสิทธิ์ ทีมสองทีมที่ต้องการเครื่องมือต่างกันบนสคีมาเดียวกันคือการกำหนดค่าสองชุด ไม่ใช่การกำหนดค่าหนึ่งชุดกับกฎ — ซึ่งรักษาการรับประกันในแผงแรกให้คงอยู่

  1. 01

    เลือกออบเจกต์

    เชื่อมต่อหน้า Design กับ Oracle และติ๊กแพ็กเกจ PL/SQL ที่คุณยินดีจะเปิดเผย รวมถึงคำสั่ง SQL ที่คุณเขียนและทดสอบด้วยตัวเอง รวมถึงตารางและลำดับที่คุณต้องการให้เข้าถึงได้โดยตรง การเลือกนั้นถูกบันทึกเป็นไฟล์การกำหนดค่า — properties หรือ JSON ควบคุมเวอร์ชันได้ และไม่มีรหัสผ่าน The Design Procedures tab listing PL/SQL packages and procedures with tick boxes PL/SQL ก่อน เพราะมันคือประเด็น: ติ๊กแพ็กเกจและโพรซีเยอร์ที่คุณยินดีจะเปิดเผย และแต่ละอันจะกลายเป็นหนึ่ง tool ที่มีพารามิเตอร์ระบุประเภท The Design SQL Statements tab, editing a named .sql file with typed bind parameters จากนั้น SQL ของคุณเอง — คำสั่งที่คุณเขียนและทดสอบ โดยมีพารามิเตอร์ bind ระบุประเภทแบบอินไลน์ เอเจนต์รันคำสั่งเหล่านี้ มันไม่ได้เขียนคำสั่งของตัวเอง The Design Tables tab, with each table ticked and separate MCP read, create, update and delete boxes สุดท้ายตาราง คัดกรองต่อการดำเนินการแทนที่จะต่อตาราง — ตารางที่เลือกใหม่จะอ่านอย่างเดียว และ create, update และ delete เป็นของคุณที่จะติ๊ก
  2. 02

    สร้าง คอมไพล์ รัน

    หน้า Runtime สร้าง Java สำหรับออบเจกต์เหล่านั้นอย่างแม่นยำ คอมไพล์ และเปิดใช้เป็นเซิร์ฟเวอร์ของตัวเองบน loopback สิ่งใดก็ตามที่คุณไม่ได้เลือกจะไม่มี tool ไม่มี method และไม่มี class — มันหายไปจากไบนารีแทนที่จะถูกปฏิเสธเท่านั้น
    docker run -d --name mcpdbwizard \
      -p 8080:8080 \
      -e MCPDBWIZARD_ORACLE_HOST=db.example.com \
      -e MCPDBWIZARD_ORACLE_PORT=1521 \
      -e MCPDBWIZARD_ORACLE_SID=/PDB1 \
      -e MCPDBWIZARD_ORACLE_USER=appuser \
      -e DB_PASS_FILE=/run/secrets/oracle \
      -v mcpdbwizard-demo:/data \
      ghcr.io/srmadscience/mcpdbwizard:2.0.4
    
  3. 03

    ชี้ MCP client ของคุณไปที่พร็อกซี

    เอเจนต์เชื่อมต่อบนพอร์ต 8080 ผ่าน Streamable HTTP ด้วยโทเค็นที่ออกให้กับบัญชีของพวกเขา พร็อกซีเป็นเพียงคอมโพเนนต์เดียวที่รู้ว่าใครกำลังเรียก — มันตรวจสอบบัญชี สิทธิ์ และอัตราจำกัด แล้วส่งต่อ
    {
      "mcpServers": {
        "payroll": {
          "url": "http://localhost:8080/mcp/alice/payroll",
          "headers": {
            "Authorization": "Bearer <id>.<secret>"
          }
        }
      }
    }
    

คำแนะนำเริ่มต้นอย่างรวดเร็ว มีเส้นทางทั้งหมด รวมถึงการออกโทเค็นและการให้สิทธิ์การกำหนดค่า