Seringkali dalam tabel yang tidak memiliki kunci alami, masih berguna bagi pengguna untuk dapat memiliki pengidentifikasi yang dihasilkan secara unik. Jika tabel memiliki kunci utama pengganti (dan dalam kasus seperti itu Anda tentu mengharapkannya) haruskah kunci itu diekspos kepada pengguna atau haruskah bidang lain digunakan untuk tujuan itu?
Salah satu alasan untuk tidak mengekspos kunci pengganti adalah bahwa sekarang Anda tidak dapat melakukan operasi yang menjaga hubungan antara catatan, tetapi mengubah nilai-nilai kunci, seperti beberapa jenis penghapusan / penyisipan ulang, banyak metode menyalin data dari satu database ke lain, dll.
Keuntungan utama dari mengungkap kunci pengganti adalah kesederhanaan menggunakan bidang yang Anda miliki.
Dalam keadaan apa yang lebih baik untuk secara langsung mengekspos kunci pengganti kepada pengguna?
Jawaban:
Anda harus siap untuk setiap pengidentifikasi yang terpapar ke pengguna / pelanggan yang perlu diubah, dan mengubah identitas baris dalam database dan menyebarkan bahwa perubahan ke semua kunci asing hanya meminta untuk memecah data.
Jika data tidak memiliki kunci bisnis alami, Anda dapat menambahkan bidang tambahan untuk "pengidentifikasi bisnis". Ini harus dioptimalkan untuk proses yang digunakan. Entri keypad telepon hanya berarti angka. Melalui telepon / verbal berarti menghindari simbol suara yang serupa (B / D, M / N, dll). Anda bahkan dapat membuat sendiri beberapa frasa yang mudah diingat ("jeli hijau").
Efeknya adalah bahwa bisnis nanti dapat mengubah cara mereka ingin merujuk ke catatan, dan satu-satunya perubahan skema data adalah menambahkan kolom baru untuk gaya id itu atau mengubah id yang sudah ada di sana. Perubahan tidak menyebar melalui seluruh database, dan Anda masih memiliki satu id (pengganti) yang valid dari waktu ke waktu.
Singkatnya, saya akan menghindari memperlihatkan kunci pengganti kepada pengguna. Seperti yang ditunjukkan komentar, kunci pengganti hampir tidak pernah berubah. Sebaliknya, bisnis ingin mengubah segalanya. Jika kunci pengganti dibuka, tinggal menunggu waktu sebelum bisnis ingin mengubahnya.
Sebagai catatan tambahan, ketika saya mengatakan "mengekspos" di sini, saya bermaksud memberikan kunci kepada pengguna dengan harapan bahwa mereka menggunakannya secara langsung (seperti menelepon untuk mendukung dengan nomor pesanan mereka).
sumber
Dalam beberapa kasus, kunci pengganti diharapkan dan masuk akal bagi pengguna. Contoh favorit saya adalah "nomor pesanan". Nomor pesanan bukan benar-benar kunci alami: kunci alami mungkin timestamp plus pengguna, atau mungkin lebih dari itu jika Anda mengharapkan pengguna untuk menghasilkan lebih dari satu pesanan dalam rincian dari cap waktu Anda.
Meskipun demikian, pengguna memahami dan mengharapkan kenyamanan nomor pesanan. Tidak ada salahnya, dan banyak nilai, jika Anda memberi tahu pengguna tentang mereka.
Di sisi lain, beberapa tombol pengganti tidak masuk akal bagi pengguna. Tentu, perusahaan asuransi kesehatan saya memiliki beberapa kunci pengganti yang mengidentifikasi saya berdasarkan id anggota saya, tanggal lahir, karier, dll, tetapi saya tidak peduli tentang itu, saya peduli dengan info pada kartu saya (yang sering termasuk id berdasarkan pada majikan saya dan tidak unik di seluruh dunia ... Oleh karena itu kunci pengganti di perusahaan asuransi).
sumber
Anda seharusnya hanya mengekspos kunci pengganti jika itu adalah GUID / UUID * yang dihasilkan dengan benar. Mengungkap kunci pengganti sekuensial adalah nomor 4 pada OWASP Top 10 masalah keamanan.
* Dalam praktiknya, yang terbaik adalah mengasumsikan bahwa itu tidak dihasilkan dengan benar untuk tujuan ini kecuali Anda tahu bahwa itu dibuat oleh generator nomor acak atau pseudo-acak yang aman secara kriptografis.
sumber
Jika sebuah tabel tidak memiliki kunci alami, tombol pengganti memungkinkan baris seperti ini.
Saya akan memanggil kunci buatan ini alih-alih kunci pengganti, tetapi perbedaan itu tidak penting untuk pertanyaan ini.
Sekarang, dengan asumsi bahwa ada data penting yang merujuk kunci pengganti ini melalui kunci asing, bagaimana pengguna akhir tahu baris mana yang akan diperbarui jika mereka tidak tahu nilai kunci pengganti?
sumber
Dalam kata-kata awam:
sumber
Anda HANYA harus memaparkan bidang ke pengguna yang memberikan informasi bermanfaat kepada pengguna, baik secara langsung atau dalam melaporkan cacat kepada Anda.
sebaliknya, Anda harus SELALU mengekspos "kunci utama pengganti" ketika mereka merupakan sarana utama untuk mengidentifikasi catatan (sederhana atau kompleks) untuk interaksi yang dilakukan pengguna.
sumber
Tidak masalah apakah Anda membuka kunci atau tidak kepada pengguna akhir. Aplikasi Anda harus melakukan otorisasi yang diperlukan sehingga hanya mengetahui id pesanan, misalnya, tidak dapat memungkinkan mereka mengakses sesuatu yang biasanya tidak dapat mereka akses.
peringatan: ini mengasumsikan aplikasi berbasis web atau n-tier di mana otorisasi sisi server mungkin / layak. Jika Anda memiliki aplikasi VB yang langsung mengeksekusi sql, itu adalah masalah keseluruhan.
sumber