Tous les produits
Search
Centre de documentation

Data Management:Configurer la révision SQL et les suggestions d'optimisation

Dernière mise à jour :Aug 10, 2026

DMS intègre la révision SQL et les suggestions d'optimisation à ses règles de sécurité. Dans la console SQL ou lors des modifications de données, cette fonctionnalité examine vos instructions SQL soumises pour vérifier leur conformité et fournit des recommandations d'optimisation. Elle vous aide à identifier et résoudre les problèmes liés au code SQL avant de valider les modifications, évitant ainsi des incidents potentiels et des anomalies de base de données après l'exécution des instructions.

Prérequis

  • Votre rôle système est DBA ou administrator. Pour plus d'informations, consultez la section Gestion des utilisateurs.

  • Vous avez créé une règle de sécurité. Pour en savoir plus, reportez-vous à la rubrique Créer une règle de sécurité.

  • Type de base de données :

    • MySQL : RDS for MySQL, PolarDB for MySQL, MariaDB, PolarDB-X, AnalyticDB for MySQL ou autres sources MySQL

    • Oracle

    • PolarDB for PostgreSQL (compatible Oracle)

    • OceanBase

Actions du système

DMS propose trois actions système prédéfinies :

  • must be improved : Si vous n'améliorez pas l'instruction, le système bloque automatiquement le processus et affiche une notification. Les règles initiales de révision SQL ne comportent aucune règle définie sur must be improved.

    Remarque

    Pour obtenir la liste des vérifications effectuées par les règles de révision SQL, consultez la section Éléments de vérification.

    Par exemple, si la règle Tables must have a primary key est définie sur must be improved, le système bloquera l'exécution d'une instruction SQL créant une table sans clé primaire et exigera que le développeur modifie l'instruction afin qu'elle passe la validation avant exécution.

  • Potential issue : Cette action signale un problème dans l'instruction SQL, mais elle ne bloque pas le processus.

  • Suggested improvement : Une amélioration est suggérée, mais elle ne bloque pas le processus.

Prise en charge de la fonctionnalité selon les différents modes de contrôle

DMS propose trois modes de contrôle différents. Pour plus de détails, voir Modes de contrôle.

Fonctionnalité

Secure collaboration

Stable change

Flexible O&M

Activer ou désactiver des règles

Pris en charge

Pris en charge

Pris en charge

Configurer les actions

Pris en charge

Non configurable

Non configurable

Modifier les paramètres des règles

Pour certaines règles, vous pouvez spécifier des paramètres, tels que le nombre maximal d'index ou de colonnes dans une table.

Pris en charge

Pris en charge

Non configurable

Configurer les remarques

Définir le contexte métier associé à une règle.

Pris en charge

Non configurable

Non configurable

Procédure

Par défaut, chaque règle de sécurité inclut un ensemble de règles de révision SQL. Cet exemple illustre la personnalisation de la configuration en définissant la règle A table must have a primary key sur must be improved.

  1. Connectez-vous à DMS 5.0.

  2. Placez le pointeur sur l'icône 2023-01-28_15-57-17.png située dans le coin supérieur gauche, puis choisissez All Features > Security and disaster recovery (DBS) > Security Rules.

    Remarque

    Si vous utilisez la console DMS en mode normal, sélectionnez Security and disaster recovery (DBS) > Security Rules dans la barre de navigation supérieure.

  3. Dans la colonne Actions correspondant à la règle de sécurité cible, cliquez sur Edit.

    Remarque

    Pour configurer les paramètres du mode Flexible Management ou Stable Change, cliquez sur SQL audit optimization recommendations à droite du mode de contrôle correspondant.

  4. Dans le volet de navigation de gauche de la page Details, cliquez sur SQL audit optimization recommendations.

  5. Pour la règle A table must have a primary key, cliquez sur Edit dans la colonne Actions.

    Remarque

    Vous pouvez filtrer rapidement les règles en cliquant sur l'icône 筛选按钮 située à côté de Tag (champ d'application de la règle, incluant les instructions DDL et DML), de Action ou de Status (activé ou désactivé).

  6. Dans la boîte de dialogue Configure Rule Content, configurez les paramètres suivants.

    Les valeurs disponibles pour Action incluent également potential issue et suggested improvement.

    Paramètre

    Description

    Action

    Définissez Action sur must be improved.

    Remarque

    Par défaut, aucune règle initiale n'est définie sur must be improved.

    Remarks

    Saisissez des remarques pour la règle, telles que le contexte métier.

  7. Cliquez sur OK.

    Lors des tâches ultérieures, telles que le développement de données, la modification de données et la révision SQL, DMS vérifie vos instructions SQL par rapport aux règles de sécurité configurées.

    Si une instruction enfreint la règle A table must have a primary key, le système bloque automatiquement le processus.

Éléments de vérification

  • SQL Specification Check comprend les éléments suivants.

    Définition du schéma de table

    Élément de vérification

    Instruction SQL applicable

    Nom et ID de la règle

    Attributs de la base de données

    CREATE DATABASE

    Restreindre le jeu de caractères lors de la création d'une base de données : CREATE_DATABASE_LIMIT_CHARSET

    Attributs de la table

    • CREATE TABLE

    • ALTER TABLE

    • Une table doit posséder une clé primaire : TABLE_MUST_HAVE_PRIMARY_KEY

    • Une table doit contenir des commentaires : TABLE_MUST_HAVE_COMMENTS

    • Ne pas utiliser de clés étrangères dans les tables : TABLE_FORBID_USE_FOREIGN_KEY

    • Restreindre la casse des caractères pour les noms de table : TABLE_NAME_LIMIT_CHAR_CASE

    • Restreindre le moteur de stockage des tables : TABLE_LIMIT_STORE_ENGINE

    • Ne pas utiliser de partitions pour les tables : TABLE_FORBID_USE_PARTITION

    • Une table doit contenir des colonnes spécifiques : TABLE_MUST_HAVE_SOME_COLUMN

    • Une table doit utiliser un jeu de caractères spécifique : TABLE_MUST_USE_SOME_CHARSET

    • Une table doit utiliser un classement spécifique : TABLE_MUST_USE_SOME_COLLATION

    • Les noms de table ne doivent pas être des mots-clés : TABLE_NAME_FORBID_KEYWORD

    • Limiter le nombre d'index dans une table : TABLE_LIMIT_INDEX_COUNT

    • Limiter le nombre de colonnes dans une table : TABLE_LIMIT_COLUMN_COUNT

    • Limiter la valeur d'incrémentation automatique initiale d'une table : TABLE_LIMIT_INIT_AUTO_INCREMENT

    • La colonne de clé primaire doit être en incrémentation automatique : LIMIT_PRIMARY_COLUMN_AUTO_INCREMENT

    • Ne pas utiliser de vues : TABLE_FORBID_USE_VIEW

    • Ne pas utiliser de déclencheurs : TABLE_FORBID_USE_TRIGGER

    • Ne pas utiliser d'événements : TABLE_FORBID_USE_EVENT

    • Ne pas utiliser de procédures stockées : TABLE_FORBID_USE_STORED_PROCEDURE

    • Ne pas utiliser de fonctions personnalisées : TABLE_FORBID_USE_CUSTOM_FUNCTION

    • Utiliser la syntaxe ALTER TABLE CONVERT pour modifier le jeu de caractères de la table : MODIFY_CHARSET_USE_ALTER_TABLE_CONVERT

    Attributs de la colonne

    • CREATE TABLE

    • ALTER TABLE

    • Les noms de colonne ne doivent pas être des mots-clés : COLUMN_NAME_FORBID_KEYWORD

    • Restreindre la casse des caractères pour les noms de colonne : COLUMN_NAME_LIMIT_CHAR_CASE

    • Ne pas définir de jeu de caractères pour une colonne : COLUMN_FORBID_SET_CHARSET

    • Ne pas utiliser certains types de données pour les colonnes : COLUMN_FORBID_DATA_TYPES

    • Les colonnes doivent comporter des commentaires : COLUMN_MUST_HAVE_COMMENTS

    • Limiter la longueur des colonnes de type char : COLUMN_LIMIT_CHAR_LENGTH

    • Limiter la longueur des colonnes de type varchar : COLUMN_LIMIT_VARCHAR_LENGTH

    • Toutes les colonnes doivent être définies sur NOT NULL : COLUMN_MUST_SET_NOT_NULL

    • Le nom de la colonne en incrémentation automatique doit être ID : COLUMN_AUTO_INCREMENT_NAME_ID

    • Les colonnes en incrémentation automatique doivent être non signées : COLUMN_AUTO_INCREMENT_UNSIGNED

    • Ne pas utiliser les types float ni double (utilisez decimal à la place) : COLUMN_FORBID_FLOAT_DOUBLE_TYPE

    • Chaque colonne doit avoir une valeur par défaut : EACH_COLUMN_NEED_DEFAULT_VALUE

    • Ne pas définir de classement pour une colonne : COLUMN_FORBID_SET_COLLATE

    • Ne pas renommer les colonnes lors de l'utilisation d'ALTER TABLE : ALTER_TABLE_FORBID_RENAME_COLUMN

    • Ne pas supprimer les colonnes lors de l'utilisation d'ALTER TABLE : ALTER_TABLE_FORBID_DROP_COLUMN

    • Ne pas modifier les types de données lors de l'utilisation d'ALTER TABLE : ALTER_TABLE_FORBID_MODIFY_DATA_TYPE

    • Les nouvelles colonnes ajoutées avec ALTER TABLE doivent autoriser les valeurs NULL : ALTER_TABLE_ADD_COLUMN_NULLABLE

    • Lors de l'ajout d'une colonne non nullable avec ALTER TABLE, une valeur par défaut doit être spécifiée : ALTER_ADD_NOT_NULL_COLUMN_NEED_DEFAULT

    • Lors du changement d'une colonne nullable vers non nullable, une valeur par défaut doit être spécifiée : COLUMN_NULLABLE_TO_NOT_NEED_DEFAULT

    • Ne pas utiliser le type enum (utilisez tinyint ou char à la place) : COLUMN_FORBID_USE_ENUM_TYPE

    • Ne pas utiliser l'attribut ZEROFILL pour les colonnes : COLUMN_DATA_TYPE_FORBID_ZEROFILL

    Attributs de l'index

    • CREATE TABLE

    • ALTER TABLE

    • Chaque index doit être nommé explicitement : INDEX_MUST_HAVE_CLEARLY_NAME

    • Restreindre le modèle de nommage pour les index Unique : UNIQUE_INDEX_NAME_PATTERN

    • Restreindre le modèle de nommage pour les index courants : COMMON_INDEX_NAME_PATTERN

    • Limiter le nombre de colonnes dans un seul index : INDEX_LIMIT_CONTAINS_COLUMNS

    • Limiter le nombre de colonnes dans une clé primaire : PRIMARY_LIMIT_CONTAINS_COLUMNS

    • Restreindre le type de données des colonnes de clé primaire : PRIMARY_LIMIT_COLUMN_DATA_TYPE

    • Ne pas supprimer la clé primaire lors de l'utilisation d'ALTER TABLE : ALTER_TABLE_FORBID_DROP_PRIMARY

    • Ne pas supprimer un index lors de l'utilisation d'ALTER TABLE : ALTER_TABLE_FORBID_DROP_INDEX

    Requête de données

    Élément de vérification

    Instruction SQL applicable

    Nom et ID de la règle

    SELECT

    • SELECT

    • INSERT SELECT

    • Sous-requêtes (imbriquées dans les instructions UPDATE ou DELETE)

    • Les instructions SELECT doivent spécifier une clause WHERE : SELECT_SUGGEST_ASSIGN_WHERE

    • Ne pas utiliser ORDER BY RAND() dans les instructions SELECT : SELECT_FORBID_USE_ORDER_BY_RAND

    • Ne pas utiliser GROUP BY sur une constante dans les instructions SELECT : SELECT_FORBID_GROUP_BY_CONST

    • Ne pas utiliser ORDER BY sur une constante dans les instructions SELECT : SELECT_FORBID_ORDER_BY_CONST

    • Une instruction SELECT ne doit pas utiliser GROUP BY ou ORDER BY sur des tables différentes : SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE

    • Dans les instructions SELECT, ne pas utiliser ORDER BY pour trier plusieurs colonnes dans des directions différentes : SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK

    • Instruction SELECT : Ne pas appliquer GROUP BY ou ORDER BY à une expression ou une fonction : SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION

    • Ne pas utiliser UNION dans les instructions SELECT : SELECT_FORBID_USE_UNION

    • Limiter le nombre de tables jointes dans une instruction SELECT : SELECT_LIMIT_TABLE_JOIN_COUNT

    • Limitation de la taille du décalage (offset) de la clause LIMIT dans l'instruction SELECT : SELECT_CONFINE_LIMIT_MAX_OFFSET

    • Ne pas utiliser de clause HAVING dans les instructions SELECT : SELECT_FORBID_USE_HAVING

    Clause WHERE

    Instructions contenant une clause WHERE, telles que SELECT, UPDATE, DELETE et INSERT SELECT.

    • Ne pas appliquer d'opérations mathématiques ou de fonctions aux colonnes indexées dans une clause WHERE : WHERE_FORBID_INDEX_COLUMN_HAS_MATH

    • Ne pas utiliser de caractère générique en tête dans les recherches au sein d'une clause WHERE : WHERE_FORBID_BEFORE_WILDCARD_SEARCH

    • Vérifier la présence d'instructions LIKE sans caractère générique dans la clause WHERE : WHERE_CHECK_LIKE_HAS_NOT_WILDCARD

    • Ne pas utiliser de conditions négatives telles que NOT IN ou NOT LIKE dans une clause WHERE : WHERE_FORBID_USE_REVERSE_SEARCH

    • Limitation du nombre d'éléments dans une clause IN au sein d'une clause WHERE : WHERE_LIMIT_IN_ITEM_MAX_COUNT

    • Vérifier les conversions de type implicites sur les colonnes dans une clause WHERE : WHERE_CHECK_COLUMN_IMPLICIT_TYPE_CONVERSION

    • Vérifier les conditions de filtre liées par l'opérateur OR dans une clause WHERE : WHERE_CHECK_OR_LINK_CONDITION

    Modification de données

    Élément de vérification

    Instruction SQL applicable

    Nom et ID de la règle

    Insérer des données

    • INSERT SELECT

    • INSERT [IGNORE]

    • REPLACE

    • Une instruction INSERT doit spécifier une liste de colonnes : ASSIGN_INSERT_COLUMN_NAME_LIST

    • Ne pas utiliser de noms de colonne en double dans la liste des colonnes de l'instruction INSERT : INSERT_COLUMN_NAME_FORBID_DUPLICATE

    • Ne pas insérer de valeur NULL dans une colonne NOT NULL : NOT_NULL_COLUMN_FORBID_INSERT_NULL

    • La liste des colonnes doit correspondre à la liste des valeurs dans une instruction INSERT : INSERT_COLUMN_MUST_MATCH_VALUES

    • Limiter le nombre total de lignes dans une seule instruction INSERT VALUES : LIMIT_INSERT_VALUES_TOTAL_ROWS

    • Vérifier l'existence de la table ou de la colonne spécifiée dans une instruction INSERT : INSERT_CHECK_TABLE_COLUMN_EXISTS

    • Ne pas utiliser la fonction SYSDATE() dans les instructions d'insertion : INSERT_FORBID_USE_SYSDATE_FUNCTION

    Mettre à jour et supprimer des données

    • UPDATE

    • DELETE

    • Limiter le nombre de tables jointes dans les instructions UPDATE ou DELETE : UPDELETE_LIMIT_TABLE_JOIN_COUNT

    • Les instructions UPDATE ou DELETE doivent spécifier une clause WHERE : UPDELETE_ASSIGN_WHERE_CONDITION

    • Vérifier la présence d'une sous-requête dans la clause WHERE des instructions UPDATE ou DELETE : UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY

    • Limiter le nombre de lignes affectées en utilisant LIMIT dans les instructions UPDATE ou DELETE : UPDELETE_CHECK_LIMIT_AFFECTED_ROWS

    • Détecte si la syntaxe de jointure multi-table est complète pour les instructions UPDATE ou DELETE (par exemple, une clause join manque une clause on) : UPDELETE_CHECK_TABLE_JOIN_LOSS_ON

    • Ne pas inclure de clause ORDER BY dans les instructions UPDATE ou DELETE : UPDELETE_FORBID_ORDER_BY

    • Vérification de l'instruction UPDATE : délimiteur SET entre plusieurs colonnes (and est invalide) : UPDATE_CHECK_SET_ITEM_DELIMITER

    • UPDATE sur plusieurs tables : Vérifie si les colonnes de la clause SET sont spécifiées avec un préfixe de table : UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX

    • Vérifier l'existence des tables ou des colonnes dans une instruction UPDATE : UPDATE_CHECK_TABLE_COLUMN_EXIST

    • Vérifier si une instruction UPDATE modifie la clé primaire : UPDATE_CHECK_PRIMARY_KEY_CHANGE

    • Vérifier si une instruction UPDATE modifie une clé unique : UPDATE_CHECK_UNIQUE_KEY_CHANGE

    • Une instruction UPDATE doit également mettre à jour la colonne « heure de modification » de la table : UPDATE_ALSO_TO_UPDATE_MODIFY_TIME_COLUMN

    • Ne pas mettre à jour la colonne « heure de création » de la table dans une instruction UPDATE : UPDATE_FORBID_MODIFY_CREATE_TIME_COLUMN

  • Les suggestions d'optimisation SQL incluent les éléments de vérification suivants.

    Catégorie

    Élément de vérification

    Aucune

    • Optimiser les tables dont la clé primaire est de type int : OPTIMIZE_PRIMARY_IS_INT_TABLE

    • Avertir en cas d'espace restant insuffisant pour les clés primaires en incrémentation automatique : SNIFFING_AUTO_PRIMARY_REMAIN_SPACE

    • Avertir du risque de valeurs NULL dans une clé unique (UK) : SNIFFING_UNIQUE_EXIST_NULL_RISK

    • Avertir et optimiser les verrous de table DDL ou les échecs de modification : ALTER_LOCK_FAIL_SNIFFING_OPTIMIZE

    • Détecter les risques d'injection SQL : CHECK_SQL_INJECTION_RISK

    • Détecter les risques liés à l'utilisation d'index forcés (FORCE INDEX) : CHECK_SQL_ASSIGN_FORCE_INDEX

    • Vérifier l'index dans le plan d'exécution : SQL_EXPLAIN_INDEX_CHECK

    • Analyse et suggestions d'index DMS : DMS_INDEX_ANALYZE_AND_SUGGEST