DMS, SQL inceleme ve optimizasyon önerilerini güvenlik ilkelerine entegre eder. SQL konsolunda veya veri değişiklikleri sırasında bu özellik, gönderdiğiniz SQL deyimlerini uyumluluk açısından inceler ve optimizasyon önerileri sunar. Değişiklikleri onaylamadan önce sorunlu SQL deyimlerini tespit edip çözmenize yardımcı olarak, deyimler çalıştırıldıktan sonra oluşabilecek potansiyel sorunları ve veritabanı hatalarını önler.
Ön koşullar
Sistem rolünüz DBA veya administrator olmalıdır. Daha fazla bilgi için bkz. Kullanıcı Yönetimi.
Bir güvenlik ilkesi oluşturmuş olmanız gerekir. Daha fazla bilgi için bkz. Güvenlik ilkesi oluşturma.
-
Veritabanı türü:
MySQL: RDS for MySQL, PolarDB for MySQL, MariaDB, PolarDB-X, AnalyticDB for MySQL veya diğer MySQL kaynakları
Oracle
PolarDB for PostgreSQL (Oracle Compatible)
OceanBase
Sistem eylemleri
DMS üç önceden tanımlanmış sistem eylemi sağlar:
-
must be improved: İfadeyi iyileştirmezseniz sistem işlemi otomatik olarak engeller ve bir bildirim görüntüler. Başlangıçtaki SQL inceleme kuralları arasında must be improved olarak ayarlanmış herhangi bir kural bulunmaz.
NotSQL inceleme kuralları tarafından gerçekleştirilen kontrollerin listesi için bkz. Kontrol öğeleri.
Örneğin,
Tables must have a primary keykuralımust be improvedolarak ayarlanırsa sistem, birincil anahtarı olmayan bir tablo oluşturan bir SQL deyiminin yürütülmesini engeller ve geliştiriciden deyimde doğrulamayı geçmesi için değişiklik yapmasını ister. Potansiyel sorun: Bu durum, SQL deyimiyle ilgili bir sorunu gösterir ancak işlemi engellemez.
Önerilen iyileştirme: Bir iyileştirme önerilir ancak işlem engellenmez.
Farklı kontrol modlarında özellik desteği
DMS üç farklı kontrol modu sunar. Daha fazla bilgi için bkz. Kontrol Modları.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kural parametrelerini değiştirme Bazı kurallar için bir tablodaki maksimum dizin veya sütun sayısı gibi parametreler belirtebilirsiniz. |
|
|
|
|
Açıklamaları yapılandırma Bir kural için iş bağlamını yapılandırın. |
|
|
|
Yordam
Varsayılan olarak her güvenlik ilkesi bir dizi SQL inceleme kuralı içerir. Bu örnekte, A table must have a primary key kuralını must be improved olarak ayarlayarak yapılandırmayı nasıl özelleştireceğiniz gösterilmektedir.
DMS 5.0 konsolunda oturum açın.
-
Sol üst köşedeki
simgesinin üzerine gelin ve seçeneğini belirleyin.NotDMS konsolunu normal modda kullanıyorsanız üst gezinme çubuğundan seçeneğini belirleyin.
-
Hedef güvenlik ilkesinin Actions sütununda Edit seçeneğine tıklayın.
NotFlexible Management veya Stable Change modu için ayarları yapılandırmak üzere ilgili kontrol modunun sağındaki SQL audit optimization recommendations seçeneğine tıklayın.
Details sayfasının sol gezinme bölmesinde SQL audit optimization recommendations seçeneğine tıklayın.
-
A table must have a primary keykuralı için Actions sütunundaki Edit seçeneğine tıklayın.NotTag (kuralın uygulandığı kapsam; DDL ve DML deyimlerini içerir), Action veya Status (etkin veya devre dışı) yanındaki
simgesine tıklayarak kuralları hızlıca filtreleyebilirsiniz. -
Configure Rule Content iletişim kutusunda aşağıdaki parametreleri yapılandırın.
Action için kullanılabilir değerler arasında potential issue ve suggested improvement de bulunur.
Parametre
Açıklama
Action
Action değerini must be improved olarak ayarlayın.
NotVarsayılan olarak başlangıçta hiçbir kural must be improved olarak ayarlanmaz.
Remarks
İş bağlamı gibi kural için açıklamalar girin.
-
OK seçeneğine tıklayın.
Veri geliştirme, veri değişikliği ve SQL inceleme gibi sonraki görevlerde DMS, SQL deyimlerinizi yapılandırılan güvenlik ilkelerine göre kontrol eder.
Bir deyim
A table must have a primary keykuralını ihlal ederse sistem işlemi otomatik olarak engeller.
Kontrol öğeleri
-
SQL Specification Check aşağıdaki öğeleri içerir.
Table schema definition
Kontrol öğesi
Uygulanabilir SQL
Kural adı ve ID
Veritabanı nitelikleri
CREATE DATABASEVeritabanı oluşturma için karakter kümesini kısıtla: CREATE_DATABASE_LIMIT_CHARSET
Tablo nitelikleri
-
CREATE TABLE -
ALTER TABLE
-
Bir tablonun birincil anahtarı olmalıdır: TABLE_MUST_HAVE_PRIMARY_KEY
-
Bir tablonun açıklamaları olmalıdır: TABLE_MUST_HAVE_COMMENTS
-
Tablolarda foreign key kullanmayın: TABLE_FORBID_USE_FOREIGN_KEY
-
Tablo adları için büyük/küçük harf kullanımını kısıtla: TABLE_NAME_LIMIT_CHAR_CASE
-
Tablolar için depolama motorunu kısıtla: TABLE_LIMIT_STORE_ENGINE
-
Tablolar için partition kullanmayın: TABLE_FORBID_USE_PARTITION
-
Bir tablo belirli sütunlar içermelidir: TABLE_MUST_HAVE_SOME_COLUMN
-
Bir tablo belirli bir karakter kümesi kullanmalıdır: TABLE_MUST_USE_SOME_CHARSET
-
Bir tablo belirli bir collation kullanmalıdır: TABLE_MUST_USE_SOME_COLLATION
-
Tablo adları anahtar kelime olamaz: TABLE_NAME_FORBID_KEYWORD
-
Bir tablodaki dizin sayısını sınırla: TABLE_LIMIT_INDEX_COUNT
-
Bir tablodaki sütun sayısını sınırla: TABLE_LIMIT_COLUMN_COUNT
-
Bir tablo için başlangıç auto-increment değerini sınırla: TABLE_LIMIT_INIT_AUTO_INCREMENT
-
Birincil anahtar sütunu auto-increment olmalıdır: LIMIT_PRIMARY_COLUMN_AUTO_INCREMENT
-
View kullanmayın: TABLE_FORBID_USE_VIEW
-
Trigger kullanmayın: TABLE_FORBID_USE_TRIGGER
-
Event kullanmayın: TABLE_FORBID_USE_EVENT
-
Stored procedure kullanmayın: TABLE_FORBID_USE_STORED_PROCEDURE
-
Custom function kullanmayın: TABLE_FORBID_USE_CUSTOM_FUNCTION
-
Tablo karakter kümesini değiştirmek için
ALTER TABLE CONVERTsözdizimini kullanın: MODIFY_CHARSET_USE_ALTER_TABLE_CONVERT
Sütun nitelikleri
-
CREATE TABLE -
ALTER TABLE
-
Sütun adları anahtar kelime olamaz: COLUMN_NAME_FORBID_KEYWORD
-
Sütun adları için büyük/küçük harf kullanımını kısıtla: COLUMN_NAME_LIMIT_CHAR_CASE
-
Bir sütun için karakter kümesi ayarlamayın: COLUMN_FORBID_SET_CHARSET
-
Sütunlar için belirli veri türlerini kullanmayın: COLUMN_FORBID_DATA_TYPES
-
Sütunların açıklamaları olmalıdır: COLUMN_MUST_HAVE_COMMENTS
-
chartürü sütunların uzunluğunu sınırla: COLUMN_LIMIT_CHAR_LENGTH -
varchartürü sütunların uzunluğunu sınırla: COLUMN_LIMIT_VARCHAR_LENGTH -
Tüm sütunlar
NOT NULLolarak ayarlanmalıdır: COLUMN_MUST_SET_NOT_NULL -
Auto-increment sütununun adı
IDolmalıdır: COLUMN_AUTO_INCREMENT_NAME_ID -
Auto-increment sütunları unsigned olmalıdır: COLUMN_AUTO_INCREMENT_UNSIGNED
-
floatveyadoubletürlerini kullanmayın (bunun yerinedecimalkullanın): COLUMN_FORBID_FLOAT_DOUBLE_TYPE -
Her sütunun bir varsayılan değeri olmalıdır: EACH_COLUMN_NEED_DEFAULT_VALUE
-
Bir sütun için collation ayarlamayın: COLUMN_FORBID_SET_COLLATE
-
ALTER TABLE kullanırken sütunları yeniden adlandırmayın: ALTER_TABLE_FORBID_RENAME_COLUMN
-
ALTER TABLE kullanırken sütunları silmeyin: ALTER_TABLE_FORBID_DROP_COLUMN
-
ALTER TABLE kullanırken veri türlerini değiştirmeyin: ALTER_TABLE_FORBID_MODIFY_DATA_TYPE
-
ALTER TABLE ile eklenen yeni sütunlar nullable olmalıdır: ALTER_TABLE_ADD_COLUMN_NULLABLE
-
ALTER TABLE ile non-nullable bir sütun eklerken bir varsayılan değer belirtilmelidir: ALTER_ADD_NOT_NULL_COLUMN_NEED_DEFAULT
-
Nullable bir sütunu non-nullable olarak değiştirirken bir varsayılan değer belirtilmelidir: COLUMN_NULLABLE_TO_NOT_NEED_DEFAULT
-
enumtürünü kullanmayın (bunun yerinetinyintveyacharkullanın): COLUMN_FORBID_USE_ENUM_TYPE -
Sütunlar için
ZEROFILLniteliğini kullanmayın: COLUMN_DATA_TYPE_FORBID_ZEROFILL
Dizin nitelikleri
-
CREATE TABLE -
ALTER TABLE
-
Her dizin açıkça adlandırılmalıdır: INDEX_MUST_HAVE_CLEARLY_NAME
-
Uniquedizinler için adlandırma desenini kısıtla: UNIQUE_INDEX_NAME_PATTERN -
Ortak dizinler için adlandırma desenini kısıtla: COMMON_INDEX_NAME_PATTERN
-
Tek bir dizindeki sütun sayısını sınırla: INDEX_LIMIT_CONTAINS_COLUMNS
-
Birincil anahtardaki sütun sayısını sınırla: PRIMARY_LIMIT_CONTAINS_COLUMNS
-
Birincil anahtar sütunlarının veri türünü kısıtla: PRIMARY_LIMIT_COLUMN_DATA_TYPE
-
ALTER TABLE kullanırken birincil anahtarı silmeyin: ALTER_TABLE_FORBID_DROP_PRIMARY
-
ALTER TABLE kullanırken bir dizini silmeyin: ALTER_TABLE_FORBID_DROP_INDEX
Data query
Kontrol öğesi
Uygulanabilir SQL
Kural adı ve ID
SELECT-
SELECT -
INSERT SELECT -
Alt sorgular (
UPDATEveyaDELETEdeyimlerinde iç içe geçmiş)
-
SELECTdeyimleri birWHEREyan tümcesi belirtmelidir: SELECT_SUGGEST_ASSIGN_WHERE -
SELECTdeyimlerindeORDER BY RAND()kullanmayın: SELECT_FORBID_USE_ORDER_BY_RAND -
SELECTdeyimlerinde bir sabit üzerindeGROUP BYkullanmayın: SELECT_FORBID_GROUP_BY_CONST -
SELECTdeyimlerinde bir sabit üzerindeORDER BYkullanmayın: SELECT_FORBID_ORDER_BY_CONST -
SELECTdeyimi farklı tablolar üzerindeGROUP BYveyaORDER BYkullanmamalıdır: SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE -
SELECTdeyimlerinde birden çok sütunu farklı yönlerde sıralamak içinORDER BYkullanmayın: SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK -
SELECTdeyimi: Bir ifade veya işlev üzerindeGROUP BYveyaORDER BYkullanmayın: SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION -
SELECTdeyimlerindeUNIONkullanmayın: SELECT_FORBID_USE_UNION -
Bir
SELECTdeyimine katılan tablo sayısını sınırla: SELECT_LIMIT_TABLE_JOIN_COUNT -
SELECTdeyimiLIMITyan tümcesindekioffsetboyutu sınırlaması: SELECT_CONFINE_LIMIT_MAX_OFFSET -
SELECTdeyimlerindeHAVINGyan tümcesi kullanmayın: SELECT_FORBID_USE_HAVING
WHEREyan tümcesiWHEREyan tümcesi içeren deyimler; örneğinSELECT,UPDATE,DELETEveINSERT SELECT.-
Bir
WHEREyan tümcesinde dizinli sütunlara matematiksel veya işlevsel işlemler uygulamayın: WHERE_FORBID_INDEX_COLUMN_HAS_MATH -
Bir
WHEREyan tümcesindeki aramalarda başında joker karakter kullanmayın: WHERE_FORBID_BEFORE_WILDCARD_SEARCH -
WHEREyan tümcesinde joker karakter içermeyenLIKEdeyimlerini kontrol edin: WHERE_CHECK_LIKE_HAS_NOT_WILDCARD -
Bir
WHEREyan tümcesindeNOT INveyaNOT LIKEgibi negatif koşullar kullanmayın: WHERE_FORBID_USE_REVERSE_SEARCH -
Bir
WHEREyan tümcesinde birINyan tümcesindeki öğe sayısı sınırlaması: WHERE_LIMIT_IN_ITEM_MAX_COUNT -
Bir
WHEREyan tümcesinde sütunlarda örtük tür dönüşümlerini kontrol edin: WHERE_CHECK_COLUMN_IMPLICIT_TYPE_CONVERSION -
Bir
WHEREyan tümcesindeORişleciyle bağlanan filtre koşullarını kontrol edin: WHERE_CHECK_OR_LINK_CONDITION
Data change
Kontrol öğesi
Uygulanabilir SQL
Kural adı ve ID
Veri ekleme
-
INSERT SELECT -
INSERT [IGNORE] -
REPLACE
-
Bir
INSERTdeyimi bir sütun listesi belirtmelidir: ASSIGN_INSERT_COLUMN_NAME_LIST -
INSERTsütun listesinde yinelenen sütun adları kullanmayın: INSERT_COLUMN_NAME_FORBID_DUPLICATE -
Bir
NOT NULLsütunaNULLdeğeri eklemeyin: NOT_NULL_COLUMN_FORBID_INSERT_NULL -
Bir
INSERTdeyimindeki sütun listesi değerler listesiyle eşleşmelidir: INSERT_COLUMN_MUST_MATCH_VALUES -
Tek bir
INSERT VALUESdeyimindeki toplam satır sayısını sınırla: LIMIT_INSERT_VALUES_TOTAL_ROWS -
Bir
INSERTdeyiminde belirtilen tablo veya sütunun var olup olmadığını kontrol edin: INSERT_CHECK_TABLE_COLUMN_EXISTS -
Ekleme deyimlerinde
SYSDATE()işlevini kullanmayın: INSERT_FORBID_USE_SYSDATE_FUNCTION
Veri güncelleme ve silme
-
UPDATE -
DELETE
-
UPDATEveyaDELETEdeyimlerine katılan tablo sayısını sınırla: UPDELETE_LIMIT_TABLE_JOIN_COUNT -
UPDATEveyaDELETEdeyimleri birWHEREyan tümcesi belirtmelidir: UPDELETE_ASSIGN_WHERE_CONDITION -
UPDATEveyaDELETEdeyimlerindeWHEREyan tümcesinin alt sorgu içerip içermediğini kontrol edin: UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY -
UPDATEveyaDELETEdeyimlerindeLIMITkullanarak etkilenen satır sayısını sınırla: UPDELETE_CHECK_LIMIT_AFFECTED_ROWS -
UPDATEveyaDELETEdeyimleri için çoklu tablo birleştirme sözdiziminin eksiksiz olup olmadığını algılar (örneğin, birjoinyan tümcesinden bironyan tümcesi eksiktir): UPDELETE_CHECK_TABLE_JOIN_LOSS_ON -
UPDATEveyaDELETEdeyimlerindeORDER BYyan tümcesi içermeyin: UPDELETE_FORBID_ORDER_BY -
UPDATEdeyimi kontrolü: Birden çok sütun arasındaSETayırıcısı (andgeçersizdir): UPDATE_CHECK_SET_ITEM_DELIMITER -
Çoklu tablo üzerinde
UPDATE:SETyan tümcesindeki sütunların tablo önekiyle belirtilip belirtilmediğini kontrol eder: UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX -
Bir
UPDATEdeymindeki tabloların veya sütunların var olup olmadığını kontrol edin: UPDATE_CHECK_TABLE_COLUMN_EXIST -
Bir
UPDATEdeyminin birincil anahtarı değiştirip değiştirmediğini kontrol edin: UPDATE_CHECK_PRIMARY_KEY_CHANGE -
Bir
UPDATEdeyminin unique key'i değiştirip değiştirmediğini kontrol edin: UPDATE_CHECK_UNIQUE_KEY_CHANGE -
Bir
UPDATEdeyimi tablonun "değiştirilme zamanı" sütununu da güncellemelidir: UPDATE_ALSO_TO_UPDATE_MODIFY_TIME_COLUMN -
Bir
UPDATEdeyminde tablonun "oluşturulma zamanı" sütununu güncellemeyin: UPDATE_FORBID_MODIFY_CREATE_TIME_COLUMN
-
-
SQL Optimizasyon Önerileri aşağıdaki kontrol öğelerini içerir.
Kategori
Kontrol öğesi
Yok
-
Birincil anahtarı
inttüründe olan tabloları optimize edin: OPTIMIZE_PRIMARY_IS_INT_TABLE -
Auto-increment birincil anahtarlar için kalan alanın yetersiz olması konusunda uyar: SNIFFING_AUTO_PRIMARY_REMAIN_SPACE
-
Unique key'de (UK)
NULLdeğeri riski konusunda uyar: SNIFFING_UNIQUE_EXIST_NULL_RISK -
DDL tablo kilitlemeleri veya değişiklik hataları konusunda uyarı ve optimizasyon: ALTER_LOCK_FAIL_SNIFFING_OPTIMIZE
-
SQL enjeksiyon risklerini algıla: CHECK_SQL_INJECTION_RISK
-
Zorunlu dizin
(FORCE INDEX)kullanımından kaynaklanan riskleri algıla: CHECK_SQL_ASSIGN_FORCE_INDEX -
Yürütme planındaki dizini kontrol et: SQL_EXPLAIN_INDEX_CHECK
-
DMS dizin analizi ve öneriler: DMS_INDEX_ANALYZE_AND_SUGGEST
-