Tüm Ürünler
Search
Belge Merkezi

Data Management:SQL incelemesi için en iyi uygulamalar

Son Güncelleme:Oct 04, 2026

Data Management DMS'nin SQL inceleme özelliği, SQL deyimlerini toplu olarak incelemenize olanak tanır ve optimizasyon önerileri sunar. Bu sayede standart dışı SQL deyimlerinden veya dizin eksikliği içeren sorgulardan kaçınabilir ve SQL enjeksiyonu riskini azaltabilirsiniz. Bu konuda güvenlik kurallarının nasıl yapılandırılacağı ve bir XML dosyasındaki SQL deyimlerinin nasıl inceleneceği gösterilmektedir.

Arka plan bilgileri

Bir projeyi üretim ortamına dağıtmadan önce uyumsuz kodların canlı hizmetlerinizi etkilemesini önlemek amacıyla ilgili tüm SQL deyimlerini gözden geçirmeniz gerekir. Ancak her bir SQL deyiminin manuel olarak incelenmesi geliştirme sürecini önemli ölçüde yavaşlatabilir.

Bu zorluğun üstesinden gelmek için DMS SQL review özelliğini sunar. Bu özellik SQL deyimlerini bir dizi güvenlik kuralına göre denetler ve optimizasyon tavsiyeleri sağlar. Ayrıca bu güvenlik kurallarını özelleştirebilirsiniz. Bu konuda aşağıdaki güvenlik kuralları kullanılmaktadır:

  • UPDATE ve DELETE deyimlerinde WHERE yan tümceleri kullanılması önerilir.

  • SQL enjeksiyonu riski tespiti.

  • Çalıştırma planında dizin kontrolü.

  • UPDATE deyimlerinde modification time sütununun güncellenmesi önerisi.

  • force index riski tespiti.

Ön koşullar

  1. Hedef veritabanı örneğinizde test_sql_review_table adlı bir tablo oluşturun. Ardından test data construction özelliğini kullanarak tabloyu verilerle doldurun. Tabloyu oluşturmak için aşağıdaki deyimi kullanın:

    CREATE TABLE `test_sql_review_table` (
      `id` BIGINT(20) UNSIGNED  NOT NULL AUTO_INCREMENT,
      `gmt_create` DATETIME NOT NULL,
      `gmt_modified` DATETIME NOT NULL,
      `detail_id` BIGINT(20) UNSIGNED DEFAULT NULL,
      `name` VARCHAR(256) DEFAULT NULL,
      `db_id` BIGINT(20) DEFAULT NULL,
      `is_delete` VARCHAR(1) DEFAULT NULL,
      `file_content_id` BIGINT(20) UNSIGNED DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2. İncelemek istediğiniz SQL deyimlerini içeren dosyayı hazırlayın. Bu örnekte MyBatis çerçevesine dayalı bir XML dosyası kullanılmaktadır.

    Dosyayı indirmek için MyBatis Sample code bağlantısını tıklayın. Dosya aşağıdaki kodu içerir:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.xxx.namespace">
        <sql id="SELECT_ALL_FROM">
            SELECT
            id,
            gmt_create,
            gmt_modified,
            detail_id,
            name,
            db_id,
            is_delete,
            file_content_id
            FROM test_sql_review_table sf
        </sql>
        <select id="getByPK" resultType="com.xxx.TestSQLReviewTableDO">
            <include refid="SELECT_ALL_FROM"/>
            WHERE id=${pk}
        </select>
        <select id="getXxxList" resultType="com.xxx.TestSQLReviewTableDO">
            <include refid="SELECT_ALL_FROM"/>
            WHERE
            <foreach collection="pks" open="sf.id in (" item="item" separator="," close=")">
                #{item}
            </foreach>
            <if test="searchKey != null and searchKey!=''">
                AND sd.name like concat('%',#{searchKey}, '%')
            </if>
            AND sf.is_delete='N'
        </select>
        <update id="updateAaaa">
            UPDATE test_sql_review_table
            SET
            db_id=#{dbId}
            WHERE detail_id=#{detailId}
            AND is_delete='N'
        </update>
        <delete id="deleteXxxx">
            DELETE FROM test_sql_review_table
        </delete>
    </mapper>

1. Adım: SQL inceleme kurallarını yapılandırın

Bu örnekte WHERE clauses are recommended in UPDATE and DELETE statements güvenlik kuralını özelleştirmeniz gerekir. Diğer güvenlik kuralları varsayılan yapılandırmalarını korur. Aşağıdaki örnek bu güvenlik kuralının güvenlik iş birliği modunda nasıl yapılandırılacağını göstermektedir. Daha fazla bilgi için bkz. SQL inceleme optimizasyon önerilerini yapılandırma.

  1. Bir yönetici hesabıyla DMS console konsoluna giriş yapın.

  2. Sol üst köşedeki 2023-01-28_15-57-17.png simgesinin üzerine gelin ve All Features > Security and disaster recovery (DBS) > Security Rules seçeneklerini seçin.

    Not

    DMS konsolunu normal modda kullanıyorsanız üst gezinme çubuğundan Security and disaster recovery (DBS) > Security Rules seçeneklerini seçin.

  3. Sol gezinme bölmesinde SQL review optimization suggestions seçeneğine tıklayın.

  4. Hedef güvenlik kuralının Actions sütununda Edit seçeneğine tıklayın.

  5. WHERE clauses are recommended in UPDATE and DELETE statements güvenlik kuralını bulun ve sağ taraftaki Edit seçeneğine tıklayın.

  6. Rule content configuration iletişim kutusunda Behavioral action değerini Must Improve olarak ayarlayın ve OK seçeneğine tıklayın.

2. Adım: İnceleme için SQL gönderin

Bu örnek MyBatis tabanlı XML dosyasındaki SQL deyimlerinin nasıl inceleneceğini ve sonuçlara göre nasıl değiştirileceğini göstermektedir. Daha fazla bilgi için bkz. SQL incelemesi.

  1. DMS 5.0 oturum açın.

  2. Üst gezinme çubuğundan Database Development > SQL Review > SQL Audit Ticket seçeneklerini seçin.

    Not

    DMS konsolunu basit modda kullanıyorsanız konsolun sol üst köşesindeki 2023-01-28_15-57-17.png simgesinin üzerine gelin ve All Features > Database Development > SQL Review > SQL Audit Ticket seçeneklerini seçin.

  3. Apply for SQL Review Ticket sayfasında gerekli parametreleri yapılandırın ve Submit seçeneğine tıklayın.

    Not
    • Hedef güvenlik kuralı setiyle ilişkili veritabanı örneğini seçin.

    • Ön koşullar bölümündeki örnek kodu yükleyin.

  4. SQL inceleme sonuçlarını görüntüleyin ve gerekli ayarlamaları yapın.

    Sistem aşağıdaki Check Result değerini döndürür:

    SQL

    İnceleme sonucu

    Öneri

     <delete id="deleteXxxx">
         DELETE FROM test_sql_review_table
     </delete>

    Must Improve: DELETE deyimleri için WHERE yan tümcesi kullanılması önerilir.

    Not

    Bu kural varsayılan olarak Suggest Improve olarak ayarlanmıştır. 1. Adımda bu ayar Must Improve olarak değiştirilmiştir.

    İş gereksinimlerinize göre bir WHERE yan tümcesi ekleyin. Tablodaki tüm verileri silmeyi amaçlıyorsanız WHERE 1 = 1 kullanın.

    Örnek:

    DELETE FROM test_sql_review_table WHERE id = #{pk}
     <select id="getByPK" resultType="com.xxx.TestSQLReviewTableDO">
         <include refid="SELECT_ALL_FROM"/>
         WHERE id=${pk}
     </select>

    Potential Issue: ${pk} gibi ifadelerde SQL birleştirmek için dolar işareti ($) kullanımı SQL enjeksiyonu riski taşır.

    SQL enjeksiyonunu önlemek için ${pk} ifadesini #{pk} ile değiştirin.

    Örnek:

         <include refid="SELECT_ALL_FROM"/>
         WHERE id=#{pk}
     <update id="updateAaaa">
         UPDATE test_sql_review_table
         SET
         db_id=#{dbId}
         WHERE detail_id=#{detailId}
         AND is_delete='N'
     </update>
    • Suggest Improve: UPDATE deyimleri ayrıca değiştirilme zamanı sütununu da güncellemelidir: gmt_modified.

    • Potential Issue: Çalıştırma planı bir dizin kullanmıyor.

    • Index Recommendation: DMS bir dizin eklenmesini öneriyor.

    • UPDATE deyiminin SET yan tümcesine gmt_modified = NOW() ekleyin.

    • Details panelinde Index recommendations sekmesine giderek dizin ekleme SQL deyimini alın. Ardından bunu yürütmek için DDL tabanlı kilitsiz bir değişiklik gönderin. Daha fazla bilgi için bkz. Perform lock-free schema changes using a lockless change ticket.

    Örnek:

            UPDATE test_sql_review_table
            SET
            db_id=#{dbId},
            gmt_modified = NOW()
            WHERE detail_id=#{detailId}
            and is_delete='N'
    Not
    • XML dosyasındaki dinamik SQL için DMS SQL'in Details bilgisini almak amacıyla değişkenleri değiştirmeye çalışır. Başarılı olursa Index recommendations ayrıntılarını Execution plan panelinde görüntüleyebilirsiniz.

    • Düzeltilemeyen veya düzeltilmesi gerekmeyen sorunlar için otomatik SQL inceleme sonuçlarını manuel olarak geçersiz kılabilirsiniz. Execution plan > Details veya Manual Review seçeneklerini seçin.

    Ayarlama yaptıktan sonra sayfayı yenileyin ve SQL inceleme sonuçlarını tekrar kontrol edin.

  5. Approve seçeneğine tıklayın. Yönetici veya DBA SQL deyimlerini tekrar inceler.

    Onay verildikten sonra bilet işlemi sona erer.

    Not

    Disapprove veya Submit for Approval durumunda SQL deyimleri varsa Check Failed seçeneğine tıkladıktan sonra sistem bir hata bildirir.