Bagikan melalui


Praktik terbaik keamanan SQL Server

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Artikel ini menyediakan informasi tentang praktik dan panduan terbaik yang membantu membangun keamanan untuk SQL Server. Untuk tinjauan komprehensif fitur keamanan SQL Server, lihat Mengamankan SQL Server.

Untuk praktik terbaik keamanan produk tertentu, lihat Azure SQL Database dan SQL Managed Instance dan SQL Server di Azure VM.

Gambaran Umum

Metodologi keamanan berlapis menyediakan solusi pertahanan mendalam dengan menggunakan beberapa kemampuan keamanan yang ditargetkan pada cakupan keamanan yang berbeda. Fitur keamanan tersedia di SQL Server 2016, dan ditingkatkan dalam rilis berikutnya, membantu melawan ancaman keamanan dan menyediakan aplikasi database yang aman.

Azure mematuhi beberapa peraturan dan standar industri yang dapat memungkinkan Anda untuk membangun solusi yang sesuai dengan SQL Server yang berjalan di komputer virtual. Untuk informasi tentang kepatuhan terhadap peraturan dengan Azure, lihat Pusat Kepercayaan Azure.

Perlindungan tingkat kolom

Organisasi sering kali perlu melindungi data di tingkat kolom karena data mengenai pelanggan, karyawan, rahasia dagang, data produk, layanan kesehatan, keuangan, dan data sensitif lainnya sering disimpan dalam database SQL Server. Kolom sensitif sering mencakup nomor identifikasi/jaminan sosial, nomor ponsel, nama depan, nama keluarga, identifikasi akun keuangan, dan data lain yang dapat dianggap sebagai data pribadi.

Metode dan fitur yang disebutkan di bagian ini meningkatkan tingkat perlindungan di tingkat kolom dengan overhead minimal, dan tanpa memerlukan perubahan luas pada kode aplikasi.

Gunakan Always Encrypted untuk mengenkripsi data tidak aktif dan melalui kabel. Data terenkripsi hanya didekripsi oleh pustaka klien di tingkat klien aplikasi. Gunakan enkripsi acak selama deterministik jika memungkinkan. Always Encrypted dengan enklave aman dapat meningkatkan performa untuk operasi perbandingan seperti ANTARA, IN, LIKE, DISTINCT, Joins, dan lainnya untuk skenario enkripsi acak.

Gunakan Masking Data Dinamis (DDM) untuk mengaburkan data di tingkat kolom saat Always Encrypted bukan opsi yang tersedia. Masking Data Dinamis (DDM) tidak kompatibel dengan Always Encrypted. Gunakan Always Encrypted melalui masking data dinamis jika memungkinkan.

Anda juga dapat MEMBERIKAN izin di tingkat kolom ke tabel, tampilan, atau fungsi bernilai tabel. Pertimbangkan hal berikut: - Hanya SELECTizin , REFERENCES, dan UPDATE yang dapat diberikan pada kolom. - Tingkat DENY tabel tidak lebih diutamakan daripada tingkat GRANTkolom .

Perlindungan tingkat baris

Keamanan Tingkat Baris (RLS) memungkinkan kemampuan untuk menggunakan konteks eksekusi pengguna untuk mengontrol akses ke baris dalam tabel database. RLS memastikan bahwa pengguna hanya dapat melihat rekaman yang berkaitan dengan mereka. Ini memberi aplikasi Anda keamanan 'tingkat rekaman' tanpa harus membuat perubahan signifikan pada aplikasi Anda.

Logika bisnis dienkapsulasi dalam fungsi bernilai tabel yang dikontrol oleh kebijakan keamanan yang mengaktifkan dan menonaktifkan fungsionalitas RLS. Kebijakan keamanan juga mengontrol FILTER predikat dan BLOCK yang terikat pada tabel yang dioperasikan RLS. Gunakan Keamanan Tingkat Baris (RLS) untuk membatasi rekaman yang dikembalikan ke pengguna yang melakukan panggilan. Gunakan SESSION_CONTEXT (T-SQL) untuk pengguna yang terhubung ke database melalui aplikasi tingkat menengah tempat pengguna aplikasi berbagi akun pengguna SQL Server yang sama. Untuk performa dan pengelolaan yang optimal, ikuti praktik terbaik Keamanan Tingkat Baris.

Tip

Gunakan Keamanan Tingkat Baris (RLS) bersama dengan Always Encrypted atau Dynamic Data Masking (DDM) untuk memaksimalkan postur keamanan organisasi Anda.

Enkripsi file

Enkripsi Data Transparan (TDE) melindungi data di tingkat file dengan menyediakan enkripsi saat tidak aktif ke file database. Enkripsi Data Transparan (TDE) memastikan bahwa file database, file cadangan, dan tempdb file tidak dapat dilampirkan dan dibaca tanpa sertifikat yang tepat yang mendekripsi file database. Tanpa Transparent Data Encryption (TDE), penyerang dapat mengambil media fisik (drive atau pita cadangan) dan memulihkan atau melampirkan database untuk membaca konten. Transparent Data Encryption (TDE) didukung untuk bekerja dengan semua kemampuan keamanan lainnya di SQL Server. Enkripsi Data Transparan (TDE) menyediakan enkripsi I/O real time dan dekripsi data dan file log. Enkripsi TDE menggunakan kunci enkripsi database (DEK) disimpan dalam database pengguna. Kunci enkripsi database juga dapat dilindungi menggunakan sertifikat, yang dilindungi oleh kunci master master database database.

Gunakan TDE untuk melindungi data tidak aktif, cadangan, dan tempdb.

Audit dan pelaporan

Untuk mengaudit SQL Server, buat kebijakan audit di tingkat server atau database. Kebijakan server berlaku untuk semua database yang sudah ada dan yang baru dibuat di server. Untuk kesederhanaan, aktifkan audit tingkat server dan izinkan audit tingkat database untuk mewarisi properti tingkat server untuk semua database.

Mengaudit tabel dan kolom dengan data sensitif yang memiliki langkah-langkah keamanan yang diterapkan padanya. Jika tabel atau kolom cukup penting untuk memerlukan perlindungan oleh kemampuan keamanan, maka harus dianggap cukup penting untuk diaudit. Sangat penting untuk mengaudit dan meninjau tabel secara teratur yang berisi informasi sensitif tetapi di mana tidak mungkin untuk menerapkan langkah-langkah keamanan yang diinginkan karena semacam keterbatasan aplikasi atau arsitektur.

Identitas serta autentikasi

SQL Server mendukung dua mode autentikasi, mode autentikasi Windows dan 'mode SQL Server dan Autentikasi Windows' (mode campuran).

Login terpisah dari pengguna database. Pertama, petakan login atau grup Windows ke pengguna atau peran database secara terpisah. Selanjutnya, berikan izin kepada pengguna, peran server, dan/atau peran database untuk mengakses objek database.

SQL Server mendukung jenis login berikut:

  • Akun pengguna Windows lokal atau akun domain Direktori Aktif - SQL Server mengandalkan Windows untuk mengautentikasi akun pengguna Windows.
  • Grup Windows - Memberikan akses ke grup Windows memberikan akses ke semua login pengguna Windows yang merupakan anggota grup. Menghapus pengguna dari grup akan menghapus hak dari pengguna yang berasal dari grup. Keanggotaan grup adalah strategi yang disukai.
  • Login SQL Server - SQL Server menyimpan nama pengguna dan hash kata sandi dalam master database.
  • Pengguna database mandiri mengautentikasi koneksi SQL Server di tingkat database. Database mandiri adalah database yang diisolasi dari database lain dan dari instans SQL Server (dan master database) yang menghosting database. SQL Server mendukung pengguna database mandiri untuk autentikasi Windows dan SQL Server.

Rekomendasi dan praktik terbaik berikut membantu mengamankan identitas dan metode autentikasi Anda:

  • Gunakan strategi keamanan berbasis peran hak istimewa paling sedikit untuk meningkatkan manajemen keamanan.

    • Standar untuk menempatkan pengguna Direktori Aktif dalam grup AD, grup AD harus ada dalam peran SQL Server, dan peran SQL Server harus diberikan izin minimum yang diperlukan oleh aplikasi.
  • Di Azure, gunakan keamanan hak istimewa terkecil dengan menggunakan kontrol akses berbasis peran (RBAC)

  • Pilih Direktori Aktif melalui autentikasi SQL Server jika memungkinkan, dan terutama pilih Direktori Aktif daripada menyimpan keamanan di tingkat aplikasi atau database.

    • Jika pengguna meninggalkan perusahaan, mudah untuk menonaktifkan akun.
    • Juga mudah untuk menghapus pengguna dari grup saat pengguna mengubah peran atau meninggalkan organisasi. Keamanan grup dianggap sebagai praktik terbaik.
  • Gunakan autentikasi multifaktor untuk akun yang memiliki akses tingkat komputer, termasuk akun yang menggunakan RDP untuk masuk ke komputer. Ini membantu melindungi dari pencurian atau kebocoran kredensial, karena autentikasi berbasis kata sandi faktor tunggal adalah bentuk autentikasi yang lebih lemah dengan kredensial yang berisiko disusupi atau keliru diberikan.

  • Memerlukan kata sandi yang kuat dan kompleks yang tidak dapat dengan mudah ditebak, dan tidak digunakan untuk akun atau tujuan lain. Memperbarui kata sandi secara teratur dan menerapkan kebijakan Direktori Aktif.

  • Akun Layanan Terkelola Grup (gMSA) menyediakan manajemen kata sandi otomatis, manajemen nama prinsipal layanan (SPN) yang disederhanakan, dan mendelegasikan manajemen kepada administrator lain.

    • Dengan gMSA, sistem operasi Windows mengelola kata sandi untuk akun alih-alih mengandalkan administrator untuk mengelola kata sandi.
    • gMSA secara otomatis memperbarui kata sandi akun tanpa memulai ulang layanan.
    • gMSA mengurangi tingkat permukaan administratif dan meningkatkan pemisahan tugas.
  • Meminimalkan hak yang diberikan ke akun AD DBA; Pertimbangkan pemisahan tugas yang membatasi akses ke komputer virtual, kemampuan untuk masuk ke sistem operasi, kemampuan untuk memodifikasi log kesalahan dan audit, dan kemampuan untuk menginstal aplikasi dan/atau fitur.

  • Pertimbangkan untuk menghapus akun DBA dari peran sysadmin dan memberikan CONTROL SERVER ke akun DBA daripada menjadikannya anggota peran sysadmin. Peran admin sistem tidak dihormati DENY saat SERVER KONTROL melakukannya.

Silsilah data dan integritas data

Menyimpan catatan historis perubahan data dari waktu ke waktu dapat bermanfaat untuk mengatasi perubahan yang tidak disengaja pada data. Ini juga dapat berguna untuk audit perubahan aplikasi dan dapat memulihkan elemen data ketika aktor jahat memperkenalkan perubahan data yang tidak diotorisasi.

  • Gunakan tabel temporal untuk mempertahankan versi rekaman dari waktu ke waktu, dan untuk melihat data seperti yang ada di atas rentang hidup rekaman untuk memberikan tampilan historis data aplikasi Anda.
  • Tabel Temporal dapat digunakan untuk menyediakan versi tabel saat ini kapan saja.

Alat dan evaluasi penilaian keamanan

Alat konfigurasi dan penilaian berikut mengatasi keamanan area permukaan, mengidentifikasi peluang keamanan data, dan memberikan penilaian praktik terbaik tentang keamanan lingkungan SQL Server Anda di tingkat instans.

  • Konfigurasi area permukaan - Anda hanya boleh mengaktifkan fitur yang diperlukan oleh lingkungan Anda, untuk meminimalkan jumlah fitur yang dapat diserang oleh pengguna berbahaya.
  • Penilaian kerentanan untuk SQL Server (SSMS) - Penilaian kerentanan SQL adalah alat di SSMS v17.4+ yang membantu menemukan, melacak, dan memulihkan potensi kerentanan database. Penilaian kerentanan adalah alat yang berharga untuk meningkatkan keamanan database Anda dan dijalankan di tingkat database, per database.
  • Penemuan dan Klasifikasi Data SQL (SSMS) - Adalah umum bagi DBA untuk mengelola server dan database dan tidak menyadari sensitivitas data yang terkandung dalam database. Penemuan & Klasifikasi Data menambahkan kemampuan untuk menemukan, mengklasifikasikan, memberi label, dan melaporkan tingkat sensitivitas data Anda. Penemuan & Klasifikasi Data didukung dimulai dengan SSMS 17.5.

Ancaman SQL umum

Ini membantu mengetahui apa saja ancaman umum yang berisiko SQL Server:

  • Injeksi SQL - Injeksi SQL adalah jenis serangan di mana kode berbahaya dimasukkan ke dalam string yang diteruskan ke instans SQL Server untuk eksekusi.
    • Proses injeksi bekerja dengan mengakhiri string teks dan menambahkan perintah baru. Karena perintah yang disisipkan mungkin memiliki lebih banyak string yang ditambahkan sebelum dijalankan, penyerang mengakhiri string yang disuntikkan dengan tanda --komentar .
    • SQL Server menjalankan kueri valid secara sinaptis yang diterima.
  • Waspadai serangan saluran samping, malware , dan ancaman lainnya.

Risiko injeksi SQL

Untuk meminimalkan risiko injeksi SQL, pertimbangkan item berikut:

  • Tinjau proses SQL apa pun yang membangun pernyataan SQL untuk kerentanan injeksi.
  • Buat pernyataan SQL yang dihasilkan secara dinamis dengan cara berparameter.
  • Pengembang dan admin keamanan harus meninjau semua kode yang memanggil EXECUTE, , EXECatau sp_executesql.
  • Larang karakter input berikut:
    • ;: Pemisah kueri
    • ': Pemisah string data karakter
    • --: Pemisah komentar baris tunggal.
    • /* ... */: Pembatas komentar.
    • xp_: Prosedur tersimpan yang diperluas katalog, seperti xp_cmdshell.
      • Tidak disarankan untuk digunakan xp_cmdshell pada lingkungan SQL Server apa pun. Gunakan SQLCLR sebagai gantinya, atau cari alternatif lain karena risiko xp_cmdshell yang dapat ditimbulkan.
  • Selalu validasi input pengguna dan output kesalahan scrub agar tidak ditumpahkan dan diekspos ke penyerang.

Risiko saluran samping

Untuk meminimalkan risiko serangan saluran samping, pertimbangkan hal berikut:

  • Pastikan aplikasi terbaru dan patch sistem operasi diterapkan.
  • Untuk beban kerja hibrid, pastikan patch firmware terbaru diterapkan untuk perangkat keras lokal apa pun.
  • Di Azure, untuk aplikasi dan beban kerja yang sangat sensitif, Anda dapat menambahkan perlindungan tambahan terhadap serangan saluran samping dengan komputer virtual terisolasi, host khusus, atau dengan menggunakan komputer virtual Confidential Compute seperti seri DC dan Virtual Machines yang menggunakan prosesor EPYC AMD Gen ke-3.

Ancaman infrastruktur

Pertimbangkan ancaman infrastruktur umum berikut:

  • Akses brute force - penyerang mencoba mengautentikasi dengan beberapa kata sandi pada akun yang berbeda sampai kata sandi yang benar ditemukan.
  • Pemecahan kata sandi / semprotan kata sandi - penyerang mencoba satu kata sandi yang dibuat dengan hati-hati terhadap semua akun pengguna yang diketahui (satu kata sandi ke banyak akun). Jika semprotan kata sandi awal gagal, mereka mencoba lagi, menggunakan kata sandi yang dibuat dengan hati-hati yang berbeda, biasanya menunggu sejumlah waktu yang ditetapkan antara upaya untuk menghindari deteksi.
  • Serangan ransomware adalah jenis serangan yang ditargetkan di mana malware digunakan untuk mengenkripsi data dan file, mencegah akses ke konten penting. Penyerang kemudian mencoba memeras uang dari korban, biasanya dalam bentuk mata uang kripto, dengan imbalan kunci dekripsi. Sebagian besar infeksi ransomware dimulai dengan pesan email dengan lampiran yang mencoba menginstal ransomware, atau situs web menghosting kit eksploitasi yang mencoba menggunakan kerentanan di browser web dan perangkat lunak lain untuk menginstal ransomware.

Risiko kata sandi

Karena Anda tidak ingin penyerang dengan mudah menebak nama akun, atau kata sandi, langkah-langkah berikut membantu mengurangi risiko kata sandi ditemukan:

  • Buat akun administrator lokal unik yang tidak bernama Administrator.
  • Gunakan kata sandi kuat yang kompleks untuk semua akun Anda. Untuk informasi selengkapnya tentang cara membuat kata sandi yang kuat, lihat artikel Membuat kata sandi yang kuat.
  • Secara default, Azure memilih Autentikasi Windows selama penyiapan komputer virtual SQL Server. Oleh karena itu, login SA dinonaktifkan dan kata sandi ditetapkan oleh penyiapan. Sebaiknya login SA tidak boleh digunakan atau diaktifkan. Jika Anda harus memiliki login SQL, gunakan salah satu strategi berikut:
    • Buat akun SQL dengan nama unik yang memiliki sysadmin pada bagian keanggotaannya. Anda dapat melakukan ini dari portal dengan mengaktifkan Autentikasi SQL selama provisi.

      Tip

      Jika Anda tidak mengaktifkan Autentikasi SQL selama provisi, Anda harus mengubah mode autentikasi secara manual ke SQL Server dan Mode Autentikasi Windows. Untuk informasi selengkapnya, lihat Mengubah mode autentikasi server.

    • Jika Anda harus menggunakan login SA, aktifkan loginnya setelah provisi dan tetapkan kata sandi baru yang kuat.

Risiko ransomware

Pertimbangkan hal berikut untuk meminimalkan risiko ransomware:

  • Strategi terbaik untuk menjaga terhadap ransomware adalah dengan memberikan perhatian khusus pada kerentanan RDP dan SSH. Selain itu, pertimbangkan rekomendasi berikut:
    • Menggunakan firewall dan mengunci port
    • Pastikan sistem operasi terbaru dan pembaruan keamanan aplikasi diterapkan
    • Menggunakan akun layanan terkelola grup (gMSA)
    • Membatasi akses ke komputer virtual
    • Memerlukan akses Just-in-time (JIT) dan Azure Bastion
    • Meningkatkan Surface Area Security dengan menghindari penginstalan alat termasuk sysinternals dan SSMS pada komputer lokal
    • Hindari menginstal Fitur Windows, peran, dan mengaktifkan layanan yang tidak diperlukan
    • Selain itu, harus ada pencadangan penuh reguler yang diamankan secara terpisah dari akun administrator umum sehingga tidak dapat menghapus salinan database.