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.
CatatanUntuk daftar pemeriksaan yang dilakukan oleh aturan tinjauan SQL, lihat Item pemeriksaan.
Misalnya, jika aturan
Tables must have a primary keydiatur kemust 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.
Masuk ke DMS 5.0.
-
Arahkan pointer ke ikon
di pojok kiri atas dan pilih . CatatanJika Anda menggunakan konsol DMS dalam mode normal, pilih di bilah navigasi atas.
-
Di kolom Actions untuk aturan keamanan yang dituju, klik Edit.
CatatanUntuk mengonfigurasi pengaturan untuk mode Flexible Management atau Stable Change, klik SQL audit optimization recommendations di sebelah kanan mode kontrol yang sesuai.
-
Di panel navigasi sebelah kiri halaman Details, klik SQL audit optimization recommendations.
-
Untuk aturan
A table must have a primary key, klik Edit di kolom Actions.CatatanAnda 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). -
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.
CatatanSecara default, tidak ada aturan awal yang diatur ke must be improved.
Remarks
Masukkan keterangan untuk aturan tersebut, misalnya konteks bisnis.
-
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 DATABASERestrict 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 CONVERTsyntax 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
chartype columns: COLUMN_LIMIT_CHAR_LENGTH -
Limit the length of
varchartype 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
floatordoubletypes (usedecimalinstead): 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
enumtype (usetinyintorcharinstead): COLUMN_FORBID_USE_ENUM_TYPE -
Do not use the
ZEROFILLattribute 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
Uniqueindexes: 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
UPDATEorDELETEstatements)
-
Pernyataan
SELECTharus menentukan klausaWHERE: SELECT_SUGGEST_ASSIGN_WHERE -
Jangan gunakan
ORDER BY RAND()dalam pernyataanSELECT: SELECT_FORBID_USE_ORDER_BY_RAND -
Jangan gunakan
GROUP BYpada konstanta dalam pernyataanSELECT: SELECT_FORBID_GROUP_BY_CONST -
Jangan gunakan
ORDER BYpada konstanta dalam pernyataanSELECT: SELECT_FORBID_ORDER_BY_CONST -
Pernyataan
SELECTtidak boleh menggunakanGROUP BYatauORDER BYpada tabel yang berbeda: SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE -
Dalam pernyataan
SELECT, jangan gunakanORDER BYuntuk mengurutkan beberapa kolom dalam arah yang berbeda: SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK -
Pernyataan
SELECT: JanganGROUP BYatauORDER BYekspresi atau fungsi: SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION -
Jangan gunakan
UNIONdalam pernyataanSELECT: SELECT_FORBID_USE_UNION -
Batasi jumlah tabel yang di-join dalam satu pernyataan
SELECT: SELECT_LIMIT_TABLE_JOIN_COUNT -
Batas pernyataan
SELECTpada ukuranoffsetdari klausulLIMIT: SELECT_CONFINE_LIMIT_MAX_OFFSET -
Jangan gunakan klausa
HAVINGdalam pernyataanSELECT: SELECT_FORBID_USE_HAVING
WHEREclausePernyataan yang memuat klausa
WHERE, sepertiSELECT,UPDATE,DELETE, danINSERT 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
LIKEtanpa wildcard dalam klausaWHERE: WHERE_CHECK_LIKE_HAS_NOT_WILDCARD -
Jangan gunakan kondisi negatif seperti
NOT INatauNOT LIKEdalam klausaWHERE: WHERE_FORBID_USE_REVERSE_SEARCH -
Batas jumlah elemen dalam klausa
INpada klausaWHERE: 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
ORdalam klausaWHERE: WHERE_CHECK_OR_LINK_CONDITION
Perubahan data
Check item
Applicable SQL
Rule name and ID
Masukkan data
-
INSERT SELECT -
INSERT [IGNORE] -
REPLACE
-
Pernyataan
INSERTharus 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
NULLke dalam kolomNOT 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
INSERTada: 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
UPDATEatauDELETE: UPDELETE_LIMIT_TABLE_JOIN_COUNT -
Pernyataan
UPDATEatauDELETEharus menentukan klausaWHERE: UPDELETE_ASSIGN_WHERE_CONDITION -
Periksa apakah klausa
WHEREberisi subkueri dalam pernyataanUPDATEatauDELETE: UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY -
Batasi jumlah baris yang terpengaruh dengan menggunakan
LIMITdalam pernyataanUPDATEatauDELETE: UPDELETE_CHECK_LIMIT_AFFECTED_ROWS -
Deteksi apakah sintaks penggabungan multi-tabel lengkap untuk pernyataan
UPDATEatauDELETE(misalnya, klausajointidak memiliki klausaon): UPDELETE_CHECK_TABLE_JOIN_LOSS_ON -
Jangan sertakan klausa
ORDER BYdalam pernyataanUPDATEatauDELETE: UPDELETE_FORBID_ORDER_BY -
Pemeriksaan pernyataan
UPDATE: pemisah antar kolom dalam klausaSET(andtidak valid): UPDATE_CHECK_SET_ITEM_DELIMITER -
UPDATEpada beberapa tabel: Periksa apakah kolom dalam klausaSETditentukan dengan awalan tabel: UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX -
Periksa apakah tabel atau kolom dalam pernyataan
UPDATEada: UPDATE_CHECK_TABLE_COLUMN_EXIST -
Periksa apakah pernyataan
UPDATEmengubah primary key: UPDATE_CHECK_PRIMARY_KEY_CHANGE -
Periksa apakah pernyataan
UPDATEmengubah unique key: UPDATE_CHECK_UNIQUE_KEY_CHANGE -
Pernyataan
UPDATEjuga 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
inttype: 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
NULLvalues 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
-