Latihan - Mengontrol siapa yang dapat mengakses database Anda

Selesai

Meskipun Anda mungkin dapat terhubung ke database melalui jaringan yang tidak berarti Anda benar-benar dapat memperoleh akses ke data itu sendiri. Mengikuti pendekatan berlapis, Anda ingin memastikan bahwa hanya pengguna yang memerlukan akses ke data yang benar-benar dapat mengaksesnya. Akses ini adalah tempat autentikasi dan otorisasi berperan.

Autentikasi

Autentikasi adalah proses verifikasi identitas. Identitas ini bisa menjadi pengguna, layanan yang berjalan pada sistem, atau sistem itu sendiri, seperti komputer virtual. Melalui proses autentikasi, Anda memastikan bahwa orang atau sistem adalah siapa yang mereka klaim. SQL Database mendukung dua jenis autentikasi: Autentikasi SQL dan autentikasi Microsoft Entra.

Autentikasi SQL

Metode autentikasi SQL menggunakan nama pengguna dan kata sandi. Akun pengguna dapat dibuat di database utama dan dapat diberikan izin di semua database di server. Anda juga dapat membuat pengguna dalam database itu sendiri, yang disebut pengguna mandiri, dan memberi mereka akses hanya ke database tersebut. Saat Anda membuat server logis untuk database, Anda menentukan masuk admin server dengan nama pengguna dan kata sandi. Dengan menggunakan kredensial ini, Anda dapat mengautentikasi ke database apa pun di server tersebut sebagai pemilik database, atau dbo.

Autentikasi Microsoft Entra

Metode autentikasi ini menggunakan identitas yang dikelola oleh MICROSOFT Entra ID dan didukung untuk domain terkelola dan terintegrasi. Gunakan autentikasi Microsoft Entra (keamanan terintegrasi) jika memungkinkan. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lainnya di satu lokasi pusat. Manajemen ID Pusat menyediakan satu tempat untuk mengelola pengguna database dan menyederhanakan manajemen izin. Jika Anda ingin menggunakan autentikasi Microsoft Entra, Anda harus membuat administrator server lain yang disebut admin Microsoft Entra, yang diizinkan untuk mengelola pengguna dan grup Microsoft Entra. Admin ini juga dapat melakukan semua operasi yang dapat dilakukan admin server reguler.

Authorization

Otorisasi mengacu pada apa yang dapat dilakukan identitas dalam Azure SQL Database. Otorisasi ini dikendalikan oleh izin yang diberikan langsung ke akun pengguna dan keanggotaan peran database. Peran database digunakan untuk mengelompokkan izin bersama-sama untuk memudahkan administrasi. Tambahkan pengguna ke peran untuk memberikan izin yang dimiliki peran. Izin ini dapat mencakup kemampuan untuk masuk ke database, kemampuan untuk membaca tabel, dan kemampuan untuk menambahkan dan menghapus kolom dari database. Sebagai praktik terbaik, Anda harus memberi pengguna hak istimewa paling sedikit yang diperlukan. Proses pemberian otorisasi kepada pengguna SQL dan Microsoft Entra sama.

Dalam contoh di sini, akun admin server yang Anda sambungkan adalah anggota peran db_owner, yang memiliki wewenang untuk melakukan apa pun dalam database.

Autentikasi dan otorisasi dalam praktiknya

Sebagai praktik terbaik, aplikasi Anda harus menggunakan akun khusus untuk mengautentikasi. Dengan cara ini, Anda dapat membatasi izin yang diberikan pada aplikasi dan mengurangi risiko aktivitas berbahaya jika kode aplikasi rentan terhadap serangan injeksi SQL. Kami menyarankan agar Anda membuat pengguna database mandiri, yang memungkinkan aplikasi Anda mengautentikasi langsung ke database. Untuk informasi selengkapnya, lihat Pengguna Database Mandiri - Membuat Database Anda Portabel.

Gunakan autentikasi Microsoft Entra untuk mengelola identitas pengguna database secara terpusat dan sebagai alternatif untuk autentikasi SQL Server.

Lihat cara menyiapkan pengguna dan memberi mereka akses ke database. Dalam hal ini, Anda menggunakan autentikasi SQL untuk pengguna Anda, tetapi prosesnya pada dasarnya akan sama jika Anda menggunakan autentikasi Microsoft Entra.

Membuat pengguna database

Buat pengguna baru yang dapat Anda gunakan untuk memberikan akses.

  1. Kembali ke Cloud Shell, di VM appServer Anda, coba sambungkan lagi ke database Anda sebagai ADMINUSER.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Jalankan perintah berikut untuk membuat pengguna baru. Pengguna ini adalah pengguna mandiri yang hanya mengizinkan akses ke database marketplace . Jangan ragu untuk menyesuaikan kata sandi seperlunya, tetapi pastikan dan catat karena Anda membutuhkannya untuk langkah di masa mendatang.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Dengan kredensial ini, pengguna dapat mengautentikasi ke database, tetapi mereka tidak berwenang untuk mengakses data apa pun. Berikan akses pengguna ini.

Memberikan izin kepada pengguna

Jadikan pengguna sebagai anggota db_datareader peran dan db_datawriter , memberikan akses untuk membaca dan menulis ke database, masing-masing. Anda juga ingin mencegah pengguna ini mengakses tabel dengan alamat.

  1. Saat masih tersambung ke sqlcmd appServer, jalankan T-SQL berikut untuk memberikan db_datareader peran dan db_datawriter kepada pengguna yang Anda buat.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Anda dapat mempersempit cakupan akses lebih lanjut. Anda dapat menolak akses pengguna ke elemen lain dalam database menggunakan operator DENY. Jalankan T-SQL berikut untuk menolak kemampuan ApplicationUser pengguna untuk memilih data dari tabel SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Sekarang masuk sebagai pengguna tersebut dan lihat konfigurasi ini dalam tindakan.

  1. Saat masih menjalankan perintah T-SQL, masukkan exit untuk keluar dari sesi Anda.

  2. Sekarang masuk kembali ke database, tetapi sebagai pengguna yang Anda buat.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Jalankan kueri berikut: Kueri ini menarik data dari tabel yang diizinkan untuk diakses pengguna.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    Anda harus mendapatkan kembali daftar pelanggan.

    FirstName      LastName       EmailAddress                    Phone
    -------------- -------------- ------------------------------- ------------
    Orlando        Gee            orlando0@adventure-works.com    245-555-0173
    Keith          Harris         keith0@adventure-works.com      170-555-0127
    Donna          Carreras       donna0@adventure-works.com      279-555-0130
    Janet          Gates          janet1@adventure-works.com      710-555-0173
    ...
    
  4. Lihat apa yang terjadi saat Anda mencoba mengkueri tabel yang tidak dapat Anda akses.

    SELECT * FROM SalesLT.Address;
    GO
    

    Anda seharusnya mendapatkan pesan bahwa Anda tidak memiliki akses ke tabel ini.

    Msg 229, Level 14, State 5, Server server-22942, Line 1
    The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
    

Seperti yang Anda lihat di sini, meskipun Anda memberikan akses baca/tulis ke database, Anda dapat lebih mengamankan akses ke data dengan secara eksplisit menolak akses ke tabel. Jika Anda memiliki beberapa pengguna yang berbagi akses serupa, Anda dapat membuat peran kustom dengan izin yang tepat dan menyederhanakan administrasi Anda.

Penting untuk mengamankan database Anda dengan benar, dan hanya memberikan akses jika perlu. Azure SQL Database menyediakan kemampuan bawaan untuk sepenuhnya mengontrol kemampuan untuk mengautentikasi dan mengotorisasi identitas untuk mengakses data dalam database Anda.