Fitur review SQL dari Data Management DMS meninjau beberapa pernyataan SQL sekaligus dan memberikan saran optimasi. Anda dapat menggunakan fitur ini untuk mencegah eksekusi pernyataan SQL yang tidak menggunakan indeks atau tidak sesuai dengan standar pengembangan database, sehingga meningkatkan kinerja database dan mengurangi risiko injeksi SQL. Topik ini menjelaskan cara mengonfigurasi aturan review SQL serta cara mengirimkan pernyataan SQL untuk direview. Contoh dalam topik ini melibatkan peninjauan beberapa pernyataan SQL dalam file XML.
Informasi latar belakang
Sebelum sebuah proyek dipublikasikan, semua pernyataan SQL yang digunakan biasanya perlu ditinjau untuk memastikan bahwa pernyataan tersebut sesuai dengan standar pengembangan database. Proses manual ini bisa memakan waktu lama.
DMS menyediakan fitur SQL review yang secara otomatis meninjau pernyataan SQL berdasarkan aturan review SQL dan memberikan saran optimasi. Anda dapat menyesuaikan aturan review SQL di konsol. Berikut adalah aturan review SQL yang digunakan dalam topik ini:
Klausa WHERE disarankan dalam pernyataan UPDATE dan DELETE.
Pendeteksian risiko injeksi SQL.
Pemeriksaan indeks dalam rencana eksekusi.
Pembaruan pada kolom waktu modifikasi disarankan dalam pernyataan UPDATE.
Pendeteksian risiko pemaksaan indeks.
Persiapan
Buat tabel bernama test_sql_review_table di instance database tujuan dan sisipkan data ke dalam tabel tersebut menggunakan fitur konstruksi data uji. Pernyataan berikut digunakan untuk membuat tabel:
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;Siapkan file yang akan direview. Dalam contoh ini, digunakan file XML berbasis framework MyBatis yang berisi kode sampel berikut.
Anda dapat mengunduh kode sampel dengan mengklik Kode Sampel MyBatis.
<?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>
Langkah 1: Konfigurasikan aturan review SQL
Dalam contoh ini, aturan keamanan Klausa WHERE disarankan dalam pernyataan UPDATE dan DELETE perlu disesuaikan. Gunakan pengaturan default untuk aturan keamanan lainnya. Contoh berikut menunjukkan cara mengonfigurasi aturan keamanan dalam mode kolaborasi keamanan. Untuk informasi lebih lanjut, lihat Optimasi review SQL.
Masuk ke Konsol DMS V5.0 sebagai administrator DMS.
Arahkan penunjuk ke ikon
di sudut kiri atas dan pilih .CatatanJika Anda menggunakan konsol DMS dalam mode normal, pilih di bilah navigasi atas.
Di panel navigasi di sebelah kiri, klik SQL audit optimization recommendations.
Temukan set aturan keamanan yang ingin Anda modifikasi dan klik Edit di kolom Actions.
Temukan aturan keamanan update/delete statements recommend specifying a where condition dan klik Edit di kolom Tindakan.
Dalam kotak dialog Rule content configuration yang muncul, atur Behavioral action ke Must Improve, lalu klik OK.
Langkah 2: Kirim pernyataan SQL untuk direview
Dalam contoh ini, pernyataan SQL dalam file XML yang sesuai dengan framework MyBatis ditinjau dan dimodifikasi berdasarkan hasil pemeriksaan. Untuk informasi lebih lanjut, lihat Review SQL.
- Masuk ke Konsol DMS V5.0.
Arahkan penunjuk ke ikon
di sudut kiri atas konsol DMS dan pilih .CatatanJika Anda menggunakan konsol DMS dalam mode normal, pilih di bilah navigasi atas.
Di halaman Apply for SQL Review Ticket, klik Review SQL dan konfigurasikan parameter di bagian Aplikasi. Klik Submit.
CatatanPilih instance database yang terkait dengan set aturan keamanan yang telah dikonfigurasi.
Dalam contoh ini, unggah kode sampel yang diperoleh dari bagian Persiapan topik ini.
Lihat hasil review SQL dan modifikasi pernyataan.
Hasil Check Result berikut dikembalikan:

SQL
Hasil review SQL
Saran optimasi SQL
<delete id="deleteXxxx"> DELETE FROM test_sql_review_table </delete>Must Improve: Klausa WHERE disarankan dalam pernyataan DELETE.
CatatanSecara default, parameter Tindakan Perilaku aturan keamanan ini diatur ke Suggest Improve. Dalam contoh ini, parameter Tindakan Perilaku diatur ke Must Improve di bagian "Langkah 1: Konfigurasikan aturan review SQL untuk database".
Tambahkan klausa WHERE sesuai kebutuhan. Jika Anda perlu menghapus seluruh tabel, gunakan klausa WHERE berikut: WHERE 1 = 1.
Contoh:
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: Tanda dolar ($) digunakan untuk menggabungkan pernyataan SQL, yang menyebabkan risiko injeksi SQL.
Ganti ${pk} dengan #{pk} dalam pernyataan SQL untuk mencegah risiko injeksi SQL.
Contoh:
<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: Pembaruan pada kolom waktu modifikasi disarankan dalam pernyataan UPDATE: gmt_modified
Potential Issue: Rencana eksekusi SQL tidak menggunakan indeks.
Index Recommendation: DMS merekomendasikan Anda menambahkan 1 indeks.
Tambahkan
gmt_modified = NOW()ke klausa SET dari pernyataan UPDATE.Peroleh pernyataan SQL yang menggunakan indeks pada tab Index recommendations dari panel Details. Kemudian, ajukan tiket untuk perubahan tanpa kunci berbasis DDL. Untuk informasi lebih lanjut, lihat Lakukan operasi DDL tanpa kunci
Contoh:
UPDATE test_sql_review_table SET db_id=#{dbId}, gmt_modified = NOW() WHERE detail_id=#{detailId} and is_delete='N'CatatanJika file XML berisi pernyataan SQL dinamis, DMS mencoba mengganti variabel dan memeriksa Execution plan dari pernyataan SQL. Untuk melihat lebih banyak informasi tentang Execution plan, klik Details di kolom Operasi.
Karena alasan historis, pernyataan SQL Anda mungkin mengandung masalah yang saat ini tidak dapat atau tidak perlu diselesaikan. Dalam situasi ini, Anda dapat meninjau pernyataan SQL secara manual dan menandainya sebagai disetujui atau tidak disetujui. Di kolom Operasi, pilih atau Review Manual > Disapprove.
Setelah dimodifikasi, segarkan halaman di konsol DMS dan periksa kembali hasil review SQL.
Di langkah Persetujuan, klik Submit for Approval. Administrator DMS atau DBA akan memeriksa kembali pernyataan SQL.
Setelah tiket disetujui, tiket ditutup.
CatatanJika pernyataan SQL yang dimodifikasi masih gagal dalam pemeriksaan atau tidak dapat diuraikan oleh DMS, pesan kesalahan akan dikembalikan setelah Anda mengklik Submit for Approval di langkah Persetujuan.