Selekta BETA EN Unduh untuk Mac
DOC 12

Keamanan Production

Diperbarui 23 Oktober 2026

Tandai koneksi sebagai Production, dan Selekta memberi labelnya di setiap layar, meminta Anda mengetik namanya sebelum statement destruktif dijalankan, dan membuka tab SQL dan tab data baru dalam manual commit. Koneksi read-only melangkah lebih jauh: penulisan ditolak sebelum dikirim.

Tag environment

Setiap koneksi punya kolom Environment di dialog koneksi. Kolom ini menentukan label koneksi dan seberapa hati-hati Selekta memperlakukannya:

Environment Label Statement destruktif
Production Sel PRODUCTION merah penuh, tag Prod Ketik nama koneksi untuk konfirmasi
Staging Sel STAGING bergaris tepi, tag Stg Konfirmasi, dengan pemeriksaan tambahan
Local Sel LOCAL, tag Local Konfirmasi hanya untuk statement yang selalu dijaga
None Tanpa sel Konfirmasi hanya untuk statement yang selalu dijaga

Tag tampil di samping koneksi di navigator, di riwayat, dan di setiap dialog konfirmasi dan review. Warna merah penuh hanya dipakai untuk Production.

Title block

Status bar setiap tab editor adalah title block: deretan sel berlabel yang memberi tahu di mana tab itu berada dan apa statusnya.

  • Conn: nama koneksi. Arahkan kursor ke sini untuk melihat zona waktu session.
  • Engine, DB, Schema: versi server, database, dan schema saat ini.
  • Env: kata environment, merah penuh untuk Production.
  • Mode: READ-ONLY dengan ikon gembok, hanya di koneksi read-only.
  • Role: user yang dipakai koneksi untuk masuk.
  • TX: auto, manual, aborted, rolled back, atau none saat tidak tersambung.
  • Rev: jumlah revisi yang pending, tampil sebagai Δ3 berwarna amber kalau ada.

Di jendela yang sempit, sel Engine, Role, dan DB disembunyikan; arahkan kursor ke Conn untuk membacanya. Sel Env tidak pernah disembunyikan.

Konfirmasi ketik nama

Sebelum statement dikirim, Selekta memeriksanya. Kalau perlu konfirmasi, tidak ada yang dijalankan, dan sebuah dialog menampilkan statement lengkap, koneksinya, alasan dihentikan, perkiraan jumlah baris (dari planner, kalau engine menyediakannya), dan mode commit, termasuk apakah masih bisa di-rollback.

Dialog konfirmasi untuk statement destruktif di Production

Di Production, tombol konfirmasi tetap nonaktif sampai Anda mengetik nama koneksi dengan tepat. Di environment lain, Anda cukup menekan tombolnya. Fokus awal ada di Cancel, Esc membatalkan, dan Return tidak pernah mengonfirmasi. Explain first menampilkan plan statement tanpa menjalankannya.

Statement yang memicunya

Di semua koneksi, apa pun environment-nya:

  • DELETE atau UPDATE tanpa klausa WHERE, termasuk yang ada di dalam klausa WITH
  • TRUNCATE
  • DROP objek apa pun

Di Production dan Staging, juga:

  • ALTER ... DROP, misalnya menghapus kolom atau constraint
  • DELETE atau UPDATE dengan klausa WHERE yang diperkirakan planner akan menyentuh lebih dari 1.000 baris
  • Statement yang efeknya tidak bisa diperkirakan planner: blok DO PostgreSQL, CALL, serta EXEC dan blok BEGIN ... END, IF, atau WHILE di SQL Server
  • MERGE dengan cabang DELETE atau UPDATE
  • Klausa WITH yang memuat INSERT, UPDATE, atau DELETE sendiri

SQLite tidak memberi perkiraan baris, jadi aturan 1.000 baris tidak pernah berlaku di sana. EXPLAIN biasa tidak diperiksa karena tidak menjalankan statement; EXPLAIN ANALYZE diperiksa, karena menjalankannya.

Di dalam script

Saat Anda menjalankan script, Selekta memeriksa semua statement lebih dulu. Tidak ada yang dijalankan sebelum statement pertama yang dijaga dikonfirmasi. Setelah Anda konfirmasi, script berjalan mulai dari statement itu dan berhenti lagi sebelum statement berikutnya yang dijaga. Di SQL Server, satu batch GO diperiksa dan dikonfirmasi sebagai satu kesatuan.

Pemeriksaan dilakukan pada statement setelah parameter diisi, jadi dialog menampilkan apa yang benar-benar akan dikirim.

Konfirmasi lain di Production

  • Meng-apply perubahan struktur yang menghapus atau membangun ulang sesuatu meminta nama koneksi. Lihat Editor struktur.
  • Menghapus koneksi Production meminta Anda mengetik namanya. Mematikan read-only di koneksi Production meminta konfirmasi.
  • Edit di tab Data sebuah tabel selalu melewati Review SQL, di semua environment. Setiap perubahan menargetkan satu baris lewat key-nya.

Manual commit di Production

Settings › Editor › Start Production tabs in manual commit menyala secara default. Tab SQL baru dan tab Data tabel di koneksi Production lalu terbuka dalam manual commit, jadi setiap perubahan menunggu di transaksi terbuka sampai Anda menekan Commit (⌥⌘↵), dan Rollback (⌥⌘⌫) membatalkannya. Tab tidak pernah menampilkan Auto selagi session-nya masih dibuka.

Anda bisa mengubah tab ke Auto di action bar-nya. Kalau ada statement pending, Selekta meminta Anda commit atau rollback dulu. Setiap tab punya sakelar Auto dan Manual sendiri, jadi mengubah satu tab tidak mengubah tab lain. Lihat Manual commit untuk apa yang terjadi saat tab ditutup, koneksi terputus, dan commit gagal.

Koneksi read-only

Centang Read-only di dialog koneksi, atau gunakan Set read-only di menu konteks koneksi di navigator. Title block menampilkan READ-ONLY, dan action bar editor SQL menampilkan Read-only.

Di koneksi read-only, hanya statement baca yang dijalankan: SELECT, VALUES, TABLE, SHOW, EXPLAIN, DESCRIBE, WITH tanpa penulisan, SET, USE, PRAGMA, dan kontrol transaksi. Selain itu diblokir sebelum sampai ke server, termasuk INSERT, UPDATE, DELETE, MERGE, DDL, SELECT ... INTO, EXPLAIN ANALYZE atas penulisan, dan statement yang akan mematikan pengaturan read-only. Script yang diblokir tidak menjalankan satu pun statement-nya. Banner bertuliskan "Not sent", dan statement itu disimpan di riwayat sebagai VOID dengan catatan blocked.

Selekta juga meminta server ikut menegakkannya bila engine memungkinkan:

  • PostgreSQL: session dibuka read-only (default_transaction_read_only, lalu SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY). Di balik connection pooler, hanya pemeriksaan Selekta sendiri yang berlaku.
  • MySQL: SET SESSION TRANSACTION READ ONLY.
  • SQLite: file dibuka read-only dan PRAGMA query_only diatur.
  • SQL Server: login memakai ApplicationIntent=ReadOnly, yang hanya berupa petunjuk, jadi pemeriksaan Selekta-lah yang memblokir penulisan.

Tab Data menampilkan baris tanpa bisa diedit, Edit structure dan New table… nonaktif, dan import serta restore diblokir. Untuk mematikannya, gunakan Turn off read-only di navigator; di Production ini meminta konfirmasi.