Lewati ke konten utama
Halaman ini adalah terjemahan mesin dan belum sepenuhnya ditinjau. Teks asli berbahasa Inggris adalah acuan yang berlaku. Pernyataan tentang keamanan, privasi, penanganan data, kepatuhan, dan lisensi tetap dalam bahasa Inggris sampai peninjau teknis menyetujuinya. Baca teks asli berbahasa Inggris

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: deny dan aturan yang menghentikannya, sehingga Anda memiliki catatan bahwa kueri tidak berjalan, bukan hasil yang kebetulan tidak menemukan apa pun.

Langkah berikutnya​