SQL Console di Data Management (DMS) mengevaluasi setiap pernyataan SQL terhadap serangkaian checkpoint keamanan sebelum dieksekusi. Checkpoint ini mengontrol pernyataan SQL mana yang dapat dijalankan, siapa yang boleh menjalankannya, dan dalam kondisi apa—sehingga memberikan Anda kontrol detail halus atas akses dan operasi database. Topik ini menggunakan ApsaraDB RDS for MySQL sebagai contoh.
Cara kerja
Saat Anda mengirimkan pernyataan SQL di SQL Console, DMS mengevaluasi setiap pernyataan secara berurutan terhadap checkpoint yang telah ditentukan. Pada setiap checkpoint, DMS membaca faktor (dengan awalan @fac.) untuk menilai konteks waktu proses—seperti jenis SQL, jumlah baris yang terpengaruh, atau role pengguna saat ini—lalu menerapkan Actions (dengan awalan @act.) berdasarkan kondisi aturan yang dikonfigurasi.
Checkpoint
DMS mengevaluasi pernyataan SQL terhadap checkpoint berikut secara berurutan. Setiap checkpoint memiliki aturan yang dapat dikonfigurasi sendiri.
| Checkpoint | Apa yang dikontrol |
|---|---|
| Basic Configuration Item | Jumlah maksimum baris yang dikembalikan per kueri, apakah set hasil dapat dimodifikasi, dan apakah data sensitif dapat disertakan dalam perhitungan |
| SQL Execution Quantity Criteria | Jumlah maksimum pernyataan SQL yang dapat dikirimkan sekaligus |
| DQL SQL Criteria | Batasan eksekusi untuk pernyataan bahasa kueri data (DQL) |
| Other SQL Criteria | Batasan eksekusi untuk berbagai jenis SQL—misalnya, mengizinkan SQL yang tidak dikenali dan memblokir penghapusan tabel penuh |
| SQL Permission Criteria | Batasan eksekusi berdasarkan izin pada database, tabel, kolom sensitif, dan baris |
| SQL Execution Performance Criteria | Memblokir pernyataan DDL ketika ruang tabel yang terpengaruh melebihi batas ukuran, atau pernyataan DML ketika jumlah baris yang terpengaruh melebihi batas |
| Exception Recognition Criteria of Database and Table Column Permissions | Menentukan apakah pernyataan DQL, DML, DDL, atau bahasa kontrol data (DCL) dilanjutkan atau ditolak saat terjadi pengecualian saat penguraian |
| SQL Execution Criteria in Logical Databases | Batasan eksekusi untuk pernyataan SQL yang dijalankan terhadap database logis |
DMS menyediakan konfigurasi dan aturan bawaan untuk setiap checkpoint. Untuk menyesuaikannya, lihat bagian Konfigurasikan aturan keamanan pada topik Kelola aturan keamanan.
Faktor dan action
Faktor
Faktor adalah variabel yang telah ditentukan yang disediakan DMS untuk digunakan dalam kondisi aturan keamanan. Faktor menangkap konteks waktu proses—seperti apakah suatu pernyataan memengaruhi seluruh tabel, atau apakah pengguna saat ini merupakan DBA.
Nama faktor menggunakan format @fac.<display-name>.
Setiap modul pada halaman Detail dari satu set aturan keamanan menyediakan sekumpulan faktor spesifik untuk checkpoint-nya.
Faktor yang disediakan oleh SQL Console
| Faktor | Deskripsi |
|---|---|
@fac.sql_count | Jumlah pernyataan SQL yang dikirimkan sekaligus |
@fac.select_sql_count | Jumlah pernyataan DQL di antara pernyataan SQL yang dikirimkan |
@fac.dml_sql_count | Jumlah pernyataan bahasa manipulasi data (DML) di antara pernyataan SQL yang dikirimkan |
@fac.sql_type | Kategori pernyataan SQL. Untuk nilai yang valid, lihat Jenis pernyataan SQL. |
@fac.sql_sub_type | Subkategori pernyataan SQL. Untuk nilai yang valid, lihat Jenis pernyataan SQL. |
@fac.env_type | Jenis lingkungan instans, ditampilkan sebagai nama lingkungan seperti DEV atau PRODUCT. Untuk detailnya, lihat Ubah jenis lingkungan instans. |
@fac.fulltable_delete | Apakah pernyataan tersebut menghapus seluruh tabel. Nilai yang valid: true, false |
@fac.fulltable_update | Apakah pernyataan tersebut memperbarui seluruh tabel. Nilai yang valid: true, false |
@fac.current_sql | Pernyataan SQL saat ini |
@fac.user_is_admin | Apakah pengguna saat ini merupakan administrator DMS. Nilai yang valid: true, false |
@fac.user_is_dba | Apakah pengguna saat ini merupakan database administrator (DBA). Nilai yang valid: true, false |
@fac.user_is_inst_dba | Apakah pengguna saat ini merupakan DBA dari instansiasi basis data saat ini. Nilai yang valid: true, false |
@fac.user_is_sec_admin | Apakah pengguna saat ini merupakan administrator keamanan. Nilai yang valid: true, false |
@fac.sql_affected_rows | Jumlah baris yang akan dipengaruhi oleh pernyataan saat ini. Catatan Faktor ini memicu operasi |
@fac.sql_relate_table_store_size | Perkiraan ukuran total tabel yang diakses oleh pernyataan saat ini, dalam MB. Nilai ini diperkirakan berdasarkan metadata DMS dan bukan nilai aktual. |
Tindakan
Action menentukan apa yang dilakukan DMS ketika kondisi IF suatu aturan terpenuhi—misalnya, mengizinkan atau menolak suatu pernyataan, atau memeriksa apakah pengguna memiliki izin pada kolom sensitif.
Nama action menggunakan format @act.<display-name>.
Setiap modul pada halaman Detail dari satu set aturan keamanan menyediakan sekumpulan action spesifik untuk checkpoint-nya.
Tindakan yang Tersedia di SQL Console
| Action | Deskripsi |
|---|---|
@act.reject_execute | Menolak pernyataan SQL saat ini |
@act.allow_execute | Mengizinkan pernyataan SQL saat ini |
@act.reject_sql_type_execute | Menolak subkategori tertentu dari pernyataan SQL. Tentukan subkategori sebagai argumen. Contoh: @act.reject_sql_type_execute 'UPDATE' |
@act.allow_sql_type_execute | Mengizinkan subkategori tertentu dari pernyataan SQL. Tentukan subkategori sebagai argumen. Contoh: @act.allow_sql_type_execute 'UPDATE' |
@act.check_dml_sec_column_permission | Memeriksa apakah pengguna memiliki izin pada kolom sensitif. Jika tidak, pernyataan DML tidak dieksekusi. |
@act.uncheck_dml_sec_column_permission | Melewati pemeriksaan izin kolom sensitif untuk pernyataan DML |
@act.check_sql_access_permission | Memeriksa apakah pengguna memiliki izin yang diperlukan pada database, tabel, atau kolom yang terlibat dalam pernyataan—misalnya, izin baca atau tulis |
@act.uncheck_sql_access_permission | Melewati pemeriksaan izin akses |
@act.enable_sec_column_mask | Menyamarkan kolom sensitif dalam set hasil kueri untuk pengguna yang tidak memiliki izin pada kolom tersebut |
@act.disable_sec_column_mask | Tidak menyamarkan kolom sensitif dalam set hasil kueri untuk pengguna yang tidak memiliki izin pada kolom tersebut |
Jenis pernyataan SQL
DMS mengklasifikasikan pernyataan SQL ke dalam empat kategori. Faktor @fac.sql_type mengembalikan kategorinya, dan @fac.sql_sub_type mengembalikan jenis pernyataan spesifik yang tercantum di bawah ini.
DML
INSERT, INSERT_SELECT, SELECT_INTO, MULTI_INSERT, REPLACE, REPLACE_INTO, UPDATE, DELETE, MERGE, REMOVE, MSCK_REPAIR, REFRESH_MATERIALIZED_VIEW, BEGIN, START_TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT, RELEASE_SAVEPOINT, SET, ADD_EDGE, ADD_VERTEX, SET_PROPERTY, GDB_DROP, INSERT_MANY, INSERT_ONE, DELETE_MANY, DELETE_ONE, UPDATE_MANY, UPDATE_ONE, WLM_ADD_RULE
DDL
CREATE, CREATE_SCHEMA, CREATE_INDEX, CREATE_VIEW, CREATE_SEQUENCE, CREATE_TABLE, CREATE_TABLEGROUP, CREATE_PACKAGE, CREATE_SELECT, TRUNCATE, DROP, DROP_SCHEMA, DROP_INDEX, DROP_VIEW, DROP_TABLE, DROP_TABLEGROUP, DROP_SEQUENCE, RENAME, ALTER_TABLE_DROP_COLUMN, ALTER_TABLE_CHARACTER_COLLATE, ALTER_TABLE_AUTOINCREMENT, ALTER, ALTER_SCHEMA, ALTER_INDEX, ALTER_VIEW, ALTER_TABLE, ALTER_TABLEGROUP, ALTER_SEQUENCE, CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION, CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, MONGO_CREATE_INDEX, MONGO_DROP_INDEX, CREATE_DATABASE, ALTER_DATABASE, DROP_DATABASE, CREATE_USER, ALTER_USER, DROP_USER, CREATE_ROLE, DROP_ROLE, EXEC, CALL_PROCEDURE, CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER, CREATE_EVENT, ALTER_EVENT, DROP_EVENT, ROLLBACK_DDL, CANCEL_DDL, VACUUM, SUBMIT_JOB, CANCEL_JOB, BUILD_TABLE, IF
DQL
Pernyataan bahasa kueri data (DQL) mengambil data tanpa memodifikasinya.
SELECT, DESC, EXPLAIN, SHOW_INDEX, SHOW, CHECK_TABLE, SHOW_DDL, LIST, GDB_QUERY, CHECKSUM, SELECT_PG_TERMINATION_BACKEND, WLM_LIST_RULE
DCL
Pernyataan bahasa kontrol data (DCL) mengelola akses database dan status sesi.
GRANT, DECLARE, SET, ANALYZE, FLUSH, OPTIMIZE, KILL, RECOVER_DDL, REMOVE_DDL, SELECT_PG_TERMINATION_BACKEND
FAQ
Q: Bisakah saya membatasi eksekusi pernyataan SQL 'select *'?
A: Ini hanya berlaku untuk instans yang telah mengaktifkan mode Security Collaboration.
Pada bilah menu atas DMS, pilih Security and Disaster Recovery (DBS) > Security Rules.
Pada tab Specification Management, pilih ruleset yang sesuai dengan jenis mesin data Anda.
Temukan aturan tujuan, lalu pada kolom Actions, klik tombol Edit untuk membuka halaman Details.
Pada panel navigasi di sebelah kiri, pilih SQL Console. Pada bagian Checkpoint, pilih SQL execution quantity specifications.
Klik Add Rule dan masukkan skrip DSL untuk konfigurasi.
if @fac.sql_sub_type in ['SELECT'] AND @fun.is_contain_str(@fac.current_sql,'*') then @act.reject_execute 'Pernyataan SQL mengandung *. Gunakan metode alternatif.' end
Q: Bagaimana cara mengatur batasan untuk kueri besar di SQL Console DMS?
A: Tindakan ini memerlukan instans dengan mode Security Collaboration yang diaktifkan.
Pada bilah menu atas DMS, pilih Security and Disaster Recovery (DBS) > Security Rules.
Pada tab Specification Management, pilih ruleset yang sesuai dengan jenis mesin data Anda.
Temukan aturan tujuan, klik Edit pada kolom Operation untuk membuka halaman Details.
Pada panel navigasi di sebelah kiri, pilih SQL Console. Pada bilah pencarian, masukkan "full table scan" lalu klik tombol Search.
Pada daftar yang muncul, pilih aturan tujuan dan klik tombol edit untuk mengonfigurasinya.