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 — จะถูกข้ามทั้งหมด และบันทึกจะระบุว่าอะไรและเพราะเหตุใด
บัญชี โทเค็น และเมทริกซ์การให้สิทธิ์
หลายบัญชี หลายการกำหนดค่า หนึ่งติ๊กต่อสิทธิ์ ทีมสองทีมที่ต้องการเครื่องมือต่างกันบนสคีมาเดียวกันคือการกำหนดค่าสองชุด ไม่ใช่การกำหนดค่าหนึ่งชุดกับกฎ — ซึ่งรักษาการรับประกันในแผงแรกให้คงอยู่
- 01
เลือกออบเจกต์
เชื่อมต่อหน้า Design กับ Oracle และติ๊กแพ็กเกจ PL/SQL ที่คุณยินดีจะเปิดเผย รวมถึงคำสั่ง SQL ที่คุณเขียนและทดสอบด้วยตัวเอง รวมถึงตารางและลำดับที่คุณต้องการให้เข้าถึงได้โดยตรง การเลือกนั้นถูกบันทึกเป็นไฟล์การกำหนดค่า — properties หรือ JSON ควบคุมเวอร์ชันได้ และไม่มีรหัสผ่าน
PL/SQL ก่อน เพราะมันคือประเด็น: ติ๊กแพ็กเกจและโพรซีเยอร์ที่คุณยินดีจะเปิดเผย และแต่ละอันจะกลายเป็นหนึ่ง tool ที่มีพารามิเตอร์ระบุประเภท
จากนั้น SQL ของคุณเอง — คำสั่งที่คุณเขียนและทดสอบ โดยมีพารามิเตอร์ bind ระบุประเภทแบบอินไลน์ เอเจนต์รันคำสั่งเหล่านี้ มันไม่ได้เขียนคำสั่งของตัวเอง
สุดท้ายตาราง คัดกรองต่อการดำเนินการแทนที่จะต่อตาราง — ตารางที่เลือกใหม่จะอ่านอย่างเดียว และ create, update และ delete เป็นของคุณที่จะติ๊ก - 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 - 03
ชี้ MCP client ของคุณไปที่พร็อกซี
เอเจนต์เชื่อมต่อบนพอร์ต 8080 ผ่าน Streamable HTTP ด้วยโทเค็นที่ออกให้กับบัญชีของพวกเขา พร็อกซีเป็นเพียงคอมโพเนนต์เดียวที่รู้ว่าใครกำลังเรียก — มันตรวจสอบบัญชี สิทธิ์ และอัตราจำกัด แล้วส่งต่อ{ "mcpServers": { "payroll": { "url": "http://localhost:8080/mcp/alice/payroll", "headers": { "Authorization": "Bearer <id>.<secret>" } } } }
คำแนะนำเริ่มต้นอย่างรวดเร็ว มีเส้นทางทั้งหมด รวมถึงการออกโทเค็นและการให้สิทธิ์การกำหนดค่า