All Products
Search
Document Center

Data Management:Konfigurasikan tinjauan SQL dan saran optimasi

Last Updated:Jun 21, 2026

DMS mengintegrasikan tinjauan SQL dan saran optimasi ke dalam aturan keamanannya. Di konsol SQL atau selama perubahan data, fitur ini meninjau pernyataan SQL yang Anda kirimkan untuk memastikan kepatuhan dan memberikan saran optimasi. Fitur ini membantu Anda mengidentifikasi serta menyelesaikan masalah pada SQL sebelum melakukan commit perubahan, sehingga mencegah potensi masalah dan exception database setelah pernyataan dieksekusi.

Prasyarat

  • Peran sistem Anda adalah DBA atau administrator. Untuk informasi lebih lanjut, lihat Manajemen Pengguna.

  • Anda telah membuat aturan keamanan. Untuk informasi lebih lanjut, lihat Buat aturan keamanan.

  • Tipe database:

    • MySQL: RDS for MySQL, PolarDB for MySQL, MariaDB, PolarDB-X, AnalyticDB for MySQL, atau sumber MySQL lainnya

    • Oracle

    • PolarDB for PostgreSQL (Oracle Compatible)

    • OceanBase

Aksi sistem

DMS menyediakan tiga aksi sistem yang telah ditentukan sebelumnya:

  • must be improved: Jika Anda tidak memperbaiki pernyataan tersebut, sistem secara otomatis akan memblokir proses dan menampilkan notifikasi. Aturan tinjauan SQL awal tidak mencakup aturan apa pun yang diatur ke must be improved.

    Catatan

    Untuk daftar pemeriksaan yang dilakukan oleh aturan tinjauan SQL, lihat Item pemeriksaan.

    Misalnya, jika aturan Tables must have a primary key diatur ke must be improved, sistem akan memblokir eksekusi pernyataan SQL yang membuat tabel tanpa kunci primer dan mengharuskan developer memodifikasi pernyataan tersebut agar lolos validasi sebelum dieksekusi.

  • Potential issue: Menunjukkan adanya masalah pada pernyataan SQL, tetapi tidak memblokir proses.

  • Suggested improvement: Disarankan untuk melakukan perbaikan, tetapi tidak memblokir proses.

Dukungan fitur dalam berbagai mode kontrol

DMS menawarkan tiga mode kontrol berbeda. Untuk informasi lebih lanjut, lihat Mode Kontrol.

Fitur

Secure collaboration

Stable change

Flexible O&M

Aktifkan atau nonaktifkan aturan

Didukung

Didukung

Didukung

Konfigurasikan aksi

Didukung

Tidak dapat dikonfigurasi

Tidak dapat dikonfigurasi

Ubah parameter aturan

Untuk beberapa aturan, Anda dapat menentukan parameter, seperti jumlah maksimum indeks atau kolom dalam suatu tabel.

Didukung

Didukung

Tidak dapat dikonfigurasi

Konfigurasikan keterangan

Konfigurasikan konteks bisnis untuk suatu aturan.

Didukung

Tidak dapat dikonfigurasi

Tidak dapat dikonfigurasi

Prosedur

Secara default, setiap aturan keamanan mencakup serangkaian aturan tinjauan SQL. Contoh ini menunjukkan cara menyesuaikan konfigurasi dengan mengatur aturan A table must have a primary key ke must be improved.

  1. Masuk ke DMS 5.0.

  2. Arahkan pointer ke ikon 2023-01-28_15-57-17.png di pojok kiri atas dan pilih All Features > Security and disaster recovery (DBS) > Security Rules.

    Catatan

    Jika Anda menggunakan konsol DMS dalam mode normal, pilih Security and disaster recovery (DBS) > Security Rules di bilah navigasi atas.

  3. Di kolom Actions untuk aturan keamanan yang dituju, klik Edit.

    Catatan

    Untuk mengonfigurasi pengaturan untuk mode Flexible Management atau Stable Change, klik SQL audit optimization recommendations di sebelah kanan mode kontrol yang sesuai.

  4. Di panel navigasi sebelah kiri halaman Details, klik SQL audit optimization recommendations.

  5. Untuk aturan A table must have a primary key, klik Edit di kolom Actions.

    Catatan

    Anda dapat memfilter aturan dengan cepat dengan mengklik ikon 筛选按钮 di samping Tag (cakupan tempat aturan diterapkan, termasuk pernyataan DDL dan DML), Action, atau Status (diaktifkan atau dinonaktifkan).

  6. Di kotak dialog Configure Rule Content, konfigurasikan parameter berikut.

    Nilai yang tersedia untuk Action juga mencakup potential issue dan suggested improvement.

    Parameter

    Deskripsi

    Action

    Atur Action ke must be improved.

    Catatan

    Secara default, tidak ada aturan awal yang diatur ke must be improved.

    Remarks

    Masukkan keterangan untuk aturan tersebut, misalnya konteks bisnis.

  7. Klik OK.

    Pada tugas-tugas berikutnya seperti pengembangan data, perubahan data, dan tinjauan SQL, DMS memeriksa pernyataan SQL Anda terhadap aturan keamanan yang telah dikonfigurasi.

    Jika suatu pernyataan melanggar aturan A table must have a primary key, sistem secara otomatis akan memblokir proses tersebut.

Item pemeriksaan

  • SQL Specification Check mencakup item-item berikut.

    Definisi skema tabel

    Item pemeriksaan

    SQL yang berlaku

    Nama dan ID aturan

    Atribut database

    CREATE DATABASE

    Restrict the character set for database creation: CREATE_DATABASE_LIMIT_CHARSET

    Atribut tabel

    • CREATE TABLE

    • ALTER TABLE

    • A table must have a primary key: TABLE_MUST_HAVE_PRIMARY_KEY

    • A table must have comments: TABLE_MUST_HAVE_COMMENTS

    • Do not use foreign keys in tables: TABLE_FORBID_USE_FOREIGN_KEY

    • Restrict character case for table names: TABLE_NAME_LIMIT_CHAR_CASE

    • Restrict the storage engine for tables: TABLE_LIMIT_STORE_ENGINE

    • Do not use partitions for tables: TABLE_FORBID_USE_PARTITION

    • A table must contain specific columns: TABLE_MUST_HAVE_SOME_COLUMN

    • A table must use a specific character set: TABLE_MUST_USE_SOME_CHARSET

    • A table must use a specific collation: TABLE_MUST_USE_SOME_COLLATION

    • Table names cannot be keywords: TABLE_NAME_FORBID_KEYWORD

    • Limit the number of indexes in a table: TABLE_LIMIT_INDEX_COUNT

    • Limit the number of columns in a table: TABLE_LIMIT_COLUMN_COUNT

    • Limit the initial auto-increment value for a table: TABLE_LIMIT_INIT_AUTO_INCREMENT

    • The primary key column must be auto-incrementing: LIMIT_PRIMARY_COLUMN_AUTO_INCREMENT

    • Do not use views: TABLE_FORBID_USE_VIEW

    • Do not use triggers: TABLE_FORBID_USE_TRIGGER

    • Do not use events: TABLE_FORBID_USE_EVENT

    • Do not use stored procedures: TABLE_FORBID_USE_STORED_PROCEDURE

    • Do not use custom functions: TABLE_FORBID_USE_CUSTOM_FUNCTION

    • Use the ALTER TABLE CONVERT syntax to modify the table character set: MODIFY_CHARSET_USE_ALTER_TABLE_CONVERT

    Atribut kolom

    • CREATE TABLE

    • ALTER TABLE

    • Column names cannot be keywords: COLUMN_NAME_FORBID_KEYWORD

    • Restrict character case for column names: COLUMN_NAME_LIMIT_CHAR_CASE

    • Do not set a character set for a column: COLUMN_FORBID_SET_CHARSET

    • Do not use certain data types for columns: COLUMN_FORBID_DATA_TYPES

    • Columns must have comments: COLUMN_MUST_HAVE_COMMENTS

    • Limit the length of char type columns: COLUMN_LIMIT_CHAR_LENGTH

    • Limit the length of varchar type columns: COLUMN_LIMIT_VARCHAR_LENGTH

    • All columns must be set to NOT NULL: COLUMN_MUST_SET_NOT_NULL

    • The name of the auto-incrementing column must be ID: COLUMN_AUTO_INCREMENT_NAME_ID

    • Auto-incrementing columns must be unsigned: COLUMN_AUTO_INCREMENT_UNSIGNED

    • Do not use float or double types (use decimal instead): COLUMN_FORBID_FLOAT_DOUBLE_TYPE

    • Every column must have a default value: EACH_COLUMN_NEED_DEFAULT_VALUE

    • Do not set a collation for a column: COLUMN_FORBID_SET_COLLATE

    • Do not rename columns when using ALTER TABLE: ALTER_TABLE_FORBID_RENAME_COLUMN

    • Do not drop columns when using ALTER TABLE: ALTER_TABLE_FORBID_DROP_COLUMN

    • Do not change data types when using ALTER TABLE: ALTER_TABLE_FORBID_MODIFY_DATA_TYPE

    • New columns added with ALTER TABLE must be nullable: ALTER_TABLE_ADD_COLUMN_NULLABLE

    • When adding a non-nullable column with ALTER TABLE, a default value must be specified: ALTER_ADD_NOT_NULL_COLUMN_NEED_DEFAULT

    • When changing a nullable column to non-nullable, a default value must be specified: COLUMN_NULLABLE_TO_NOT_NEED_DEFAULT

    • Do not use the enum type (use tinyint or char instead): COLUMN_FORBID_USE_ENUM_TYPE

    • Do not use the ZEROFILL attribute for columns: COLUMN_DATA_TYPE_FORBID_ZEROFILL

    Atribut indeks

    • CREATE TABLE

    • ALTER TABLE

    • Each index must be explicitly named: INDEX_MUST_HAVE_CLEARLY_NAME

    • Restrict the naming pattern for Unique indexes: UNIQUE_INDEX_NAME_PATTERN

    • Restrict the naming pattern for common indexes: COMMON_INDEX_NAME_PATTERN

    • Limit the number of columns in a single index: INDEX_LIMIT_CONTAINS_COLUMNS

    • Limit the number of columns in a primary key: PRIMARY_LIMIT_CONTAINS_COLUMNS

    • Restrict the data type of primary key columns: PRIMARY_LIMIT_COLUMN_DATA_TYPE

    • Do not drop the primary key when using ALTER TABLE: ALTER_TABLE_FORBID_DROP_PRIMARY

    • Do not drop an index when using ALTER TABLE: ALTER_TABLE_FORBID_DROP_INDEX

    Kueri data

    Check item

    Applicable SQL

    Rule name and ID

    SELECT

    • SELECT

    • INSERT SELECT

    • Subqueries (nested in UPDATE or DELETE statements)

    • Pernyataan SELECT harus menentukan klausa WHERE: SELECT_SUGGEST_ASSIGN_WHERE

    • Jangan gunakan ORDER BY RAND() dalam pernyataan SELECT: SELECT_FORBID_USE_ORDER_BY_RAND

    • Jangan gunakan GROUP BY pada konstanta dalam pernyataan SELECT: SELECT_FORBID_GROUP_BY_CONST

    • Jangan gunakan ORDER BY pada konstanta dalam pernyataan SELECT: SELECT_FORBID_ORDER_BY_CONST

    • Pernyataan SELECT tidak boleh menggunakan GROUP BY atau ORDER BY pada tabel yang berbeda: SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE

    • Dalam pernyataan SELECT, jangan gunakan ORDER BY untuk mengurutkan beberapa kolom dalam arah yang berbeda: SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK

    • Pernyataan SELECT: Jangan GROUP BY atau ORDER BY ekspresi atau fungsi: SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION

    • Jangan gunakan UNION dalam pernyataan SELECT: SELECT_FORBID_USE_UNION

    • Batasi jumlah tabel yang di-join dalam satu pernyataan SELECT: SELECT_LIMIT_TABLE_JOIN_COUNT

    • Batas pernyataan SELECT pada ukuran offset dari klausul LIMIT: SELECT_CONFINE_LIMIT_MAX_OFFSET

    • Jangan gunakan klausa HAVING dalam pernyataan SELECT: SELECT_FORBID_USE_HAVING

    WHERE clause

    Pernyataan yang memuat klausa WHERE, seperti SELECT, UPDATE, DELETE, dan INSERT SELECT.

    • Jangan menerapkan operasi matematika atau fungsi pada kolom yang di-index dalam klausa WHERE: WHERE_FORBID_INDEX_COLUMN_HAS_MATH

    • Jangan gunakan wildcard di awal pencarian dalam klausa WHERE: WHERE_FORBID_BEFORE_WILDCARD_SEARCH

    • Periksa adanya pernyataan LIKE tanpa wildcard dalam klausa WHERE: WHERE_CHECK_LIKE_HAS_NOT_WILDCARD

    • Jangan gunakan kondisi negatif seperti NOT IN atau NOT LIKE dalam klausa WHERE: WHERE_FORBID_USE_REVERSE_SEARCH

    • Batas jumlah elemen dalam klausa IN pada klausa WHERE: WHERE_LIMIT_IN_ITEM_MAX_COUNT

    • Periksa adanya konversi tipe implisit pada kolom dalam klausa WHERE: WHERE_CHECK_COLUMN_IMPLICIT_TYPE_CONVERSION

    • Periksa kondisi filter yang dihubungkan oleh operator OR dalam klausa WHERE: WHERE_CHECK_OR_LINK_CONDITION

    Perubahan data

    Check item

    Applicable SQL

    Rule name and ID

    Masukkan data

    • INSERT SELECT

    • INSERT [IGNORE]

    • REPLACE

    • Pernyataan INSERT harus menentukan daftar kolom: ASSIGN_INSERT_COLUMN_NAME_LIST

    • Jangan gunakan nama kolom duplikat dalam daftar kolom INSERT: INSERT_COLUMN_NAME_FORBID_DUPLICATE

    • Jangan memasukkan nilai NULL ke dalam kolom NOT NULL: NOT_NULL_COLUMN_FORBID_INSERT_NULL

    • Daftar kolom harus sesuai dengan daftar nilai dalam pernyataan INSERT: INSERT_COLUMN_MUST_MATCH_VALUES

    • Batasi jumlah total baris dalam satu pernyataan INSERT VALUES: LIMIT_INSERT_VALUES_TOTAL_ROWS

    • Periksa apakah tabel atau kolom yang ditentukan dalam pernyataan INSERT ada: INSERT_CHECK_TABLE_COLUMN_EXISTS

    • Jangan gunakan fungsi SYSDATE() dalam pernyataan insert: INSERT_FORBID_USE_SYSDATE_FUNCTION

    Perbarui dan hapus data

    • UPDATE

    • DELETE

    • Batasi jumlah tabel yang digabung dalam pernyataan UPDATE atau DELETE: UPDELETE_LIMIT_TABLE_JOIN_COUNT

    • Pernyataan UPDATE atau DELETE harus menentukan klausa WHERE: UPDELETE_ASSIGN_WHERE_CONDITION

    • Periksa apakah klausa WHERE berisi subkueri dalam pernyataan UPDATE atau DELETE: UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY

    • Batasi jumlah baris yang terpengaruh dengan menggunakan LIMIT dalam pernyataan UPDATE atau DELETE: UPDELETE_CHECK_LIMIT_AFFECTED_ROWS

    • Deteksi apakah sintaks penggabungan multi-tabel lengkap untuk pernyataan UPDATE atau DELETE (misalnya, klausa join tidak memiliki klausa on): UPDELETE_CHECK_TABLE_JOIN_LOSS_ON

    • Jangan sertakan klausa ORDER BY dalam pernyataan UPDATE atau DELETE: UPDELETE_FORBID_ORDER_BY

    • Pemeriksaan pernyataan UPDATE: pemisah antar kolom dalam klausa SET (and tidak valid): UPDATE_CHECK_SET_ITEM_DELIMITER

    • UPDATE pada beberapa tabel: Periksa apakah kolom dalam klausa SET ditentukan dengan awalan tabel: UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX

    • Periksa apakah tabel atau kolom dalam pernyataan UPDATE ada: UPDATE_CHECK_TABLE_COLUMN_EXIST

    • Periksa apakah pernyataan UPDATE mengubah primary key: UPDATE_CHECK_PRIMARY_KEY_CHANGE

    • Periksa apakah pernyataan UPDATE mengubah unique key: UPDATE_CHECK_UNIQUE_KEY_CHANGE

    • Pernyataan UPDATE juga harus memperbarui kolom "modified time" tabel: UPDATE_ALSO_TO_UPDATE_MODIFY_TIME_COLUMN

    • Jangan memperbarui kolom "creation time" tabel dalam pernyataan UPDATE: UPDATE_FORBID_MODIFY_CREATE_TIME_COLUMN

  • Saran Optimasi SQL mencakup item pemeriksaan berikut.

    Kategori

    Item pemeriksaan

    None

    • Optimize tables where the primary key is of int type: OPTIMIZE_PRIMARY_IS_INT_TABLE

    • Warn about insufficient remaining space for auto-incrementing primary keys: SNIFFING_AUTO_PRIMARY_REMAIN_SPACE

    • Warn about the risk of NULL values in a unique key (UK): SNIFFING_UNIQUE_EXIST_NULL_RISK

    • Warn about and optimize DDL table locks or change failures: ALTER_LOCK_FAIL_SNIFFING_OPTIMIZE

    • Detect SQL injection risks: CHECK_SQL_INJECTION_RISK

    • Detect risks from using forced indexes (FORCE INDEX): CHECK_SQL_ASSIGN_FORCE_INDEX

    • Check the index in the execution plan: SQL_EXPLAIN_INDEX_CHECK

    • DMS index analysis and suggestions: DMS_INDEX_ANALYZE_AND_SUGGEST