QueryProxy
Doküman menüsü

SQL korumaları

AST denetleyicisinin her gönderimde uyguladığı kurallar — WHERE zorunluluğu, LIMIT enjeksiyonu, transaction'lar ve yasaklı komutlar.

Güncelleme:

Her gönderim, onay kuyruğuna girmeden önce parse edilip denetlenir. Kural ihlal eden talep, açık bir mesajla gönderim anında reddedilir — DBA’e bile ulaşmaz, veritabanına hiç ulaşmaz.

Kurallar

UPDATE / DELETE için WHERE zorunlu

DELETE FROM users;                    -- ✗ reddedilir
DELETE FROM users WHERE id = 42;      -- ✓ kabul (yine de onay gerekir)

Bu kural transaction içinde de geçerlidir. İstisnası yoktur — tüm tabloyu etkileyen bir yazma, açıkça ifade edilmelidir (ör. WHERE 1 = 1); kazayla asla gerçekleşemez.

SELECT’e LIMIT eklenir

  • LIMIT yok mu? Varsayılan (1000) otomatik eklenir.
  • LIMIT üst sınırın (10000) üzerinde mi? Aşağı çekilir.
  • LIMIT ALL (PostgreSQL) sınırsız sayılır ve sınırlanır.
  • Offset korunur: LIMIT 10, 20000LIMIT 10, 10000, LIMIT 99999 OFFSET 4LIMIT 10000 OFFSET 4.
  • Alt sorgu LIMIT’lerine dokunulmaz; yalnızca dış sorgu denetlenir. Kilitleme ifadeleri gözetilir — eklenen LIMIT, FOR UPDATE’ten önce yerleşir.

İki sayı da yapılandırılabilir — bkz. Yapılandırma. Hazırlanan SQL (eklenen LIMIT ile) gönderimden önce geliştiriciye, incelemede DBA’e gösterilir; onayladığınız şey birebir çalışan şeydir.

Çoklu ifadeler açık transaction ister

UPDATE a SET x = 1 WHERE id = 1;
UPDATE b SET y = 2 WHERE id = 2;      -- ✗ reddedilir: iki çıplak ifade
BEGIN;
UPDATE a SET x = 1 WHERE id = 1;
UPDATE b SET y = 2 WHERE id = 2;
COMMIT;                               -- ✓ kabul, atomik çalışır

İşçi ifadeleri gerçek bir transaction içinde çalıştırır: herhangi biri başarısız olursa tamamı geri alınır. Gönderimde ROLLBACK reddedilir — başarısızlıkta geri alma otomatiktir, elle yazılacak bir şey değildir. İç içe transaction desteklenmez.

Her zaman yasak

Bazı komutlar rolden bağımsız olarak doğrudan reddedilir:

  • DROP DATABASE / DROP SCHEMA
  • GRANT, REVOKE
  • CREATE USER / ALTER USER / DROP USER (ve ROLE / LOGIN türevleri)
  • SET GLOBAL
  • SHUTDOWN

Veritabanı yönetimi altyapı araçlarınızın işidir, bir sorgu portalının değil.

Lehçeler ve temkinli geri düşüş

Parser önce MySQL lehçesini bilir. Tam parse edemediği ifadeler (PostgreSQL ::jsonb cast’leri, sürücüye özgü operatörler) yine anahtar kelime bazında korunur: parse edilemeyen WHERE’siz bir UPDATE yine reddedilir, parse edilemeyen bir SELECT’e yine LIMIT eklenir — sınıflandırılamayan her şey ise yazma sayılır, yani tam onay incelemesinden geçer. QueryProxy tereddütte her zaman katı taraftadır.

Gezinmek için ok tuşları, açmak için Enter.