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
-
Hedef veritabanı örneğinizde
test_sql_review_tableadlı 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; -
İ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.
Bir yönetici hesabıyla DMS console konsoluna giriş yapın.
-
Sol üst köşedeki
simgesinin üzerine gelin ve seçeneklerini seçin.NotDMS konsolunu normal modda kullanıyorsanız üst gezinme çubuğundan seçeneklerini seçin.
Sol gezinme bölmesinde SQL review optimization suggestions seçeneğine tıklayın.
Hedef güvenlik kuralının Actions sütununda Edit seçeneğine tıklayın.
WHERE clauses are recommended in UPDATE and DELETE statements güvenlik kuralını bulun ve sağ taraftaki Edit seçeneğine tıklayın.
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.
DMS 5.0 oturum açın.
-
Üst gezinme çubuğundan seçeneklerini seçin.
NotDMS konsolunu basit modda kullanıyorsanız konsolun sol üst köşesindeki
simgesinin üzerine gelin ve seçeneklerini seçin. -
Apply for SQL Review Ticket sayfasında gerekli parametreleri yapılandırın ve Submit seçeneğine tıklayın.
NotHedef güvenlik kuralı setiyle ilişkili veritabanı örneğini seçin.
Ön koşullar bölümündeki örnek kodu yükleyin.
-
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.
NotBu 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 = 1kullanı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'NotXML 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. veya Manual Review seçeneklerini seçin.
Ayarlama yaptıktan sonra sayfayı yenileyin ve SQL inceleme sonuçlarını tekrar kontrol edin.
-
-
Approve seçeneğine tıklayın. Yönetici veya DBA SQL deyimlerini tekrar inceler.
Onay verildikten sonra bilet işlemi sona erer.
NotDisapprove veya Submit for Approval durumunda SQL deyimleri varsa Check Failed seçeneğine tıkladıktan sonra sistem bir hata bildirir.