Penyiapan untuk administrator basis data (DBA)
Titik penerapan: SDK atau Gateway Mode yang didukung: Hosted Hybrid Local Paket: Free Solo Teams
Untuk siapa ini
Anda memiliki basis data tersebut. Ketika agen AI mendapatkan alat basis data, tugas Anda adalah
memastikan agen dapat membaca apa yang dibutuhkan dan tidak lebih -- tanpa UPDATE diam-diam, tanpa
DROP, tanpa perubahan izin.
Apa yang biasanya ingin Anda kendalikan
- Baca, ya.
SELECT,EXPLAIN,SHOW,DESCRIBE, CTE. - Tulis, tidak (atau hanya dengan persetujuan).
INSERT/UPDATE/DELETE/MERGE. - Skema dan grant, tidak pernah.
DROP,ALTER,GRANT,TRUNCATE.
Control Zero mengklasifikasikan kueri ke dalam kelas semantik kanonis -- database:read,
database:write, atau database:admin -- apa pun dialek SQL-nya, sehingga satu aturan
mencakup semua variasi penulisan. Piggyback multi-pernyataan seperti SELECT 1; DROP TABLE x
diselesaikan menjadi database:admin, sehingga aturan penolakan admin menangkapnya di setiap
versi yang dirilis. Bentuk hanya-izin (tanpa aturan tolak eksplisit) memerlukan
controlzero 1.13.13+; pada versi sebelumnya, method yang diberikan pemanggil dapat
memenuhi aturan izin sebelum kelas yang diturunkan dari argumen dipertimbangkan.
Titik penerapan mana yang dipasang
Jika agen adalah kode yang Anda kendalikan, gunakan SDK dan panggil guard() sebelum setiap
kueri. Jika agen berbicara ke basis data melalui API yang tidak dapat Anda ubah, letakkan
Gateway di depannya.
pip install controlzero
Kebijakan awal
Akses basis data hanya-baca. Baca diizinkan; yang lainnya ditolak. Letakkan ini di
controlzero.yaml:
version: '1'
settings:
default_action: deny
default_on_missing: deny
default_on_tamper: quarantine
rules:
- id: allow-db-read
allow: 'database:read'
reason: 'SELECT / EXPLAIN / SHOW / DESCRIBE / CTE are permitted via the canonical read class.'
- id: deny-db-write
deny: 'database:write'
reason: 'No data modification: INSERT / UPDATE / DELETE / MERGE blocked.'
- id: deny-db-admin
deny: 'database:admin'
reason: 'No schema or permission changes: DROP / ALTER / GRANT / TRUNCATE blocked.'
SDK menurunkan kelas dari SQL yang Anda berikan, sehingga Anda menulis aturan cukup sekali:
from controlzero import Client
cz = Client(policy_file="./controlzero.yaml")
read = cz.guard("database", method="SELECT", args={"sql": "SELECT id FROM orders"})
print(read.decision) # "allow"
drop = cz.guard("database", method="DROP", args={"sql": "DROP TABLE orders"})
print(drop.decision) # "deny"
cz.close()
Jika Anda lebih memilih mengizinkan penulisan hanya setelah manusia menyetujuinya, lihat Alur persetujuan pertama. Persetujuan berstatus BETA dan nonaktif secara default. Jalur permintaan berfungsi di setiap deployment, termasuk paket hosted (SaaS), tetapi kotak masuk untuk pemberi persetujuan belum dapat diakses -- permintaan tulis yang belum diselesaikan berjalan hingga tenggatnya dan tetap ditolak, sehingga penulisan tidak terjadi.
Apa yang akan Anda lihat
- Keputusan setiap kueri di Audit Log, diklasifikasikan sebagai
database:read/write/admin, beserta aturan yang cocok, alasan, dan cakupan per-event. - Penulisan atau drop yang ditolak menampilkan
decision: denydan aturan yang menghentikannya, sehingga Anda memiliki catatan bahwa kueri tidak berjalan, bukan hasil yang kebetulan tidak menemukan apa pun.
Langkah berikutnya
- Basis data hanya-baca -- resep kanonis, lengkap dengan tabel blokir/izinkan.
- Nama alat kanonis -- bagaimana SQL dipetakan ke kelas semantik.
- Alur persetujuan pertama BETA -- wajibkan persetujuan untuk penulisan.
- Penyiapan hanya-pantau -- lihat setiap kueri sebelum Anda memblokir apa pun.