Tüm Ürünler
Search
Belge Merkezi

Data Management:Güvenlik kuralları için DSL sözdizimi

Son Güncelleme:Oct 04, 2026

Data Management (DMS), veritabanı geliştirme iş akışları için güvenlik kurallarını tanımlamanıza olanak tanıyan bir alana özgü dil (DSL) sunar. DSL kurallarını kullanarak hangi SQL deyimlerinin gönderilebileceğini, onayların nasıl yönlendirileceğini ve işlemlerin ne zaman engelleneceğini veya riskli olarak işaretleneceğini kontrol edebilirsiniz.

Nasıl çalışır?

Bir güvenlik kuralı, IF-THEN (EĞER-İSE) veya IF-THEN-ELSE (EĞER-İSE-YOKSA) yapısında bir ifadedir. Bir koşul karşılandığında DMS ilgili eylemi yürütür.

Temel yapı:

if <condition>
then <action>
end

Birden çok dallanma içeren genişletilmiş yapı:

if <condition 1>
then <action 1>
elseif <condition 2>
then <action 2>
[else <action 3>]
end

Her kural tam olarak bir if koşulu içermelidir. Sıfır veya daha fazla elseif dalı ve sıfır veya bir else yan tümcesi bulunabilir. Hiçbir dal eşleşmezse ve bir else yan tümcesi yoksa DMS herhangi bir eylem gerçekleştirmez.

DSL bileşenleri

Bir güvenlik kuralı üç temel yapı taşından oluşur: koşullu ifadeler, eylem ifadeleri ve önceden tanımlanmış işlevler.

Koşullu ifadeler

Koşullu ifade, true veya false değerini döndürür. Aşağıdakilerden biri veya birkaçından oluşturulur:

  • Faktörler — değerlendirme anındaki bağlamı temsil eden önceden tanımlanmış sistem değişkenleri (örneğin, SQL deyimi türü, etkilenen satır sayısı)

  • Operatörler — değerleri karşılaştıran veya test eden semboller

  • Bağlayıcılar — birden çok ifadeyi birleştiren AND ve OR

AND operatörünün önceliği OR operatöründen daha yüksektir. Her ikisinin önceliği de diğer operatörlerden daha düşüktür. Varsayılan değerlendirme sırasını geçersiz kılmak için parantez kullanın.

Örnek: 1 <= 0 or 1 == 1 ifadesinde DMS önce 1 <= 0 ve 1 == 1 ifadelerini ayrı ayrı değerlendirir, ardından OR uygulamasını gerçekleştirir. Önceliği açık hale getirmek için: (1 <= 0) == true.

Operatörler

Operatörler, koşullu ifadelerde faktörleri ve sabitleri birbirine bağlar. Aşağıdaki operatörler desteklenir:

Operatör Açıklama Örnek
== Eşittir 1 == 1
!= Eşit değildir 1 != 2
> Büyüktür @fac.insert_rows > 1000
>= Büyük veya eşittir @fac.insert_rows >= 1000
< Küçüktür @fac.insert_rows < 100
<= Küçük veya eşittir @fac.insert_rows <= 100
in Bir diziye aittir 'a' in ['a', 'b', 'c']
not in Bir diziye ait değildir 'a' not in ['a', 'b', 'c']
matchs Düzenli ifadeyle eşleşir 'idx_aa' matchs 'idx_\\w+'
not matchs Düzenli ifadeyle eşleşmez 'idx_aa' not matchs 'idx_\\w+'
isBlank Değer boştur '' isBlank
isNotBlank Değer boş değildir '' isNotBlank

Düzenli ifadelerde ters eğik çizgi kaçış karakteri: Regex deseninde gerçek bir ters eğik çizgi (\) kullanmak için bunu başka bir ters eğik çizgi ile kaçış karakteri olarak belirtin. Örneğin, idx_\w+ ile eşleşmek için idx_\\w+ yazın.

Faktörler

Faktörler, güvenlik kuralı değerlendirme zamanında bağlam sağlayan önceden tanımlanmış değişkenlerdir; örneğin SQL deyimi türü, etkilenen satır sayısı veya hedefin mantıksal bir veritabanı olup olmadığı. Gerçek işlem meta verilerine dayalı kurallar yazmak için bunları koşullu ifadelerde kullanın.

Bir faktör adı @fac.<display-name> biçimini kullanır. DMS, her modüldeki farklı kontrol noktaları için farklı faktörler sağlar.

Faktör Açıklama
@fac.env_type Ortam türü. Örnek değerler: DEV, PRODUCT. Bkz. Change the environment type for an instance.
@fac.sql_type SQL deyimi türü. Örnek değerler: UPDATE, INSERT.
@fac.detail_type Veri değiştirme bileti türü. Geçerli değerler aşağıda verilmiştir.
@fac.is_logic Hedef veritabanının mantıksal bir veritabanı olup olmadığı.
@fac.extra_info Diğer bilet bilgileri. Şu anda kullanılmamaktadır.
@fac.is_ignore_affect_rows Satır sayısı doğrulamasının atlanıp atlanmayacağı.
@fac.insert_rows Eklenecek satır sayısı.
@fac.update_delete_rows Güncellenecek veya silinecek satır sayısı.
@fac.max_alter_table_size Değiştirilecek tabloyu içeren en büyük tablo alanının boyutu.
@fac.is_has_security_column SQL deyiminin hassas alanları içerip içermediği.
@fac.security_column_list SQL deyimine dahil edilen hassas alanlar.
@fac.risk_level İşlemin risk düzeyi.
@fac.risk_reason Atanan risk düzeyinin nedeni.
@fac.ref_schema_names Bilette seçilen veritabanı adlarının listesi.

@fac.detail_type için geçerli değerler:

Değer Bilet türü
COMMON Normal Veri Değiştirme
CHUNK_DML Kilitsiz Değişiklik
PROCEDURE Programlanabilir Nesne
CRON_CLEAR_DATA Geçmiş Veri Temizleme
BIG_FILE Büyük Veri İçe Aktarma

Örnek: Bir SQL deyiminin DML deyimi olup olmadığını kontrol etme:

@fac.sql_type == 'DML'

Eylem ifadeleri

Bir eylem, bir koşul karşılandığında DMS'nin ne yapacağını tanımlar. Eylem adları @act.<display-name> biçimini kullanır. DMS, her modüldeki farklı kontrol noktaları için farklı eylemler sağlar.

Eylem Açıklama
@act.allow_submit SQL deyimlerinin bir bilette yürütülmek üzere gönderilmesini gerektirir.
@act.allow_execute_direct SQL deyimlerinin SQL Console'da yürütülmesine izin verir.
@act.forbid_execute SQL deyimlerinin yürütülmesini engeller.
@act.mark_risk İşlemi bir risk düzeyi ve özel bir mesajla işaretler. Örnek: @act.mark_risk 'middle' 'Medium risk: online environment'
@act.do_not_approve Bir onay şablonunun ID'sini belirtir. Bkz. Configure approval processes.
@act.choose_approve_template
@act.choose_approve_template_with_reason

Önceden tanımlanmış işlevler

Önceden tanımlanmış işlevler hem koşullu ifadelerde hem de eylem ifadelerinde kullanılabilir. İşlev adları @fun.<display-name> biçimini kullanır.

İşlev Giriş Çıkış Açıklama
@fun.concat Birden çok dize Dize Dizeleri tek bir dizede birleştirir.
@fun.char_length Bir dize Tamsayı Bir dizinin uzunluğunu döndürür.
@fun.is_char_lower Bir dize Boolean Tüm harfler küçük harf ise true döndürür.
@fun.is_char_upper Bir dize Boolean Tüm harfler büyük harf ise true döndürür.
@fun.array_size Bir dizi Tamsayı Bir dizideki öğe sayısını döndürür.
@fun.add Birden çok sayısal değer Sayısal Birden çok değeri toplar.
@fun.sub İki sayısal değer Sayısal İlk değerden ikinci değeri çıkarır.
@fun.between Üç değer: hedef, alt sınır, üst sınır Boolean Hedef [alt, üst] kapalı aralığına düşüyorsa true döndürür. NUMERIC, DATE ve TIME türlerini destekler.
@fun.current_datetime Yok Dize Geçerli tarih ve saati yyyy-MM-dd HH:mm:ss biçiminde döndürür.
@fun.current_date Yok Dize Geçerli tarihi yyyy-MM-dd biçiminde döndürür.
@fun.current_time Yok Dize Geçerli saati HH:mm:ss biçiminde döndürür.
@fun.is_contain_str İki dize Boolean İlk dize ikinciyi içeriyorsa true döndürür.
@fun.listEqualIgnoreOrder İki dize listesi Boolean Her iki liste de sıra veya büyük/küçük harf fark etmeksizin aynı dizeleri içeriyorsa true döndürür.

Seçilmiş örnekler:

Dize birleştirme:

@fun.concat('d', 'm', 's')
// Output: 'dms'
@fun.concat('[Development standards] Enter a comment for the [', @fac.column_name, '] field.')
// Output: a reminder message with the field name inserted

Sayısal bir değerin bir aralıkta olup olmadığını kontrol etme:

@fun.between(@fac.export_rows, 2001, 100000)
// Returns true if the number of exported rows is between 2,001 and 100,000
@fun.between(@fun.current_datetime(), '2019-10-31 00:00:00', '2019-11-04 00:00:00')
// Returns true if the current date and time fall within the specified window

Liste eşitliğini kontrol etme:

@fun.listEqualIgnoreOrder(@fac.perm_type, ['QUERY'])
// Returns true if only the query permission is requested
@fun.listEqualIgnoreOrder(@fac.perm_type, ['CORRECT', 'EXPORT'])
// Returns true if both the change and export permissions are requested

Örnekler

Bilet başına SQL deyimi sayısını sınırlama

Bir bilet 1.000'den fazla SQL deyimi içeriyorsa gönderimi engelleyin:

if
    @fac.sql_count > 1000
then
    @act.reject_execute 'The number of SQL statements in a ticket cannot exceed 1,000.'
end

Sayı 1.000'i aşarsa DMS bileti reddeder ve mesajı görüntüler.

Yalnızca DML deyimlerine izin verme

Yalnızca tüm SQL deyimleri DML işlemleri olduğunda gönderime izin verin:

if
    @fac.sql_type in ['UPDATE', 'DELETE', 'INSERT', 'INSERT_SELECT']
then
    @act.allow_submit
end