Izin Tingkat Kolom
Sembunyikan kolom sensitif.
Izin Tingkat Kolom adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Mengapa Izin Tingkat Kolom Penting
Tidak semua pengguna seharusnya dapat melihat setiap kolom dalam tabel. Kolom gaji, hash kata sandi, atau nomor kartu kredit dapat berada dalam tabel yang sama dengan data yang sepenuhnya bersifat publik, seperti nama pengguna atau alamat email.
Izin tingkat kolom memungkinkan Anda memberikan access ke kolom tertentu, bukan ke seluruh tabel, sehingga data sensitif tetap tersembunyi dari pengguna yang tidak memiliki alasan yang sah untuk melihatnya.
GRANT pada Seluruh Tabel
Secara default, GRANT SELECT ON table memberi suatu peran kemampuan untuk membaca semua kolom. Ini baik untuk data publik, tetapi bermasalah ketika tabel mencampur kolom sensitif dan non-sensitif.
Kueri di bawah memberikan peran analyst access baca penuh ke tabel employees—termasuk salary dan SSN.
GRANT SELECT ON employees TO analyst;Sintaks GRANT Tingkat Kolom
PostgreSQL (dan SQL standar) memungkinkan Anda mencantumkan nama kolom tertentu di dalam pernyataan GRANT. Sintaksnya adalah:
GRANT privilege (col1, col2) ON table TO role;
Contoh di bawah memberikan peran analyst izin untuk membaca hanya id, name, dan department—tetapi NOT salary atau ssn.
GRANT SELECT (id, name, department) ON employees TO analyst;Memverifikasi Izin Kolom
Anda dapat memeriksa hak istimewa tingkat kolom di PostgreSQL dengan melakukan kueri terhadap tampilan information_schema.column_privileges. Tampilan ini mencantumkan penerima hibah mana yang memiliki hak istimewa apa pada kolom mana.
SELECT grantee, table_name, column_name, privilege_type
FROM information_schema.column_privileges
WHERE table_name = 'employees'
ORDER BY grantee, column_name;Apa yang Terjadi Tanpa Kolom yang Tepat
Jika suatu peran mencoba membaca kolom yang belum diberikan kepadanya, basis data mengembalikan galat akses ditolak. Hanya referensi ke kolom yang diizinkan yang akan berhasil.
Dengan asumsi analyst hanya diberi id, name, dan department, kueri pertama di bawah ini gagal; kueri kedua berhasil.
-- This will fail for analyst (no permission on salary):
-- SELECT id, name, salary FROM employees;
-- This succeeds:
SELECT id, name, department FROM employees;Izin UPDATE Tingkat Kolom
Pembatasan tingkat kolom juga berlaku untuk UPDATE. Anda dapat mengizinkan suatu peran memperbarui hanya kolom tertentu—misalnya, mengizinkan peran layanan bantuan memperbarui status pengguna tanpa dapat mengubah email atau password_hash mereka.
GRANT UPDATE (status) ON users TO helpdesk;
-- helpdesk can now run:
UPDATE users SET status = 'suspended' WHERE id = 42;Menyembunyikan Kolom dengan Tampilan
Pendekatan umum lainnya adalah membuat tampilan yang hanya menampilkan kolom aman, lalu memberikan access ke tampilan tersebut, bukan ke tabel dasar. Pendekatan ini berfungsi di semua basis data, bukan hanya basis data yang mendukung GRANT tingkat kolom.
CREATE VIEW public_employees AS
SELECT id, name, department, hire_date
FROM employees;
GRANT SELECT ON public_employees TO analyst;Mencabut Access Tingkat Kolom
Sama seperti GRANT, Anda dapat menggunakan REVOKE dengan daftar kolom untuk menghapus access ke kolom tertentu. Jika suatu peran memiliki access tingkat tabel yang luas, Anda mungkin perlu mencabutnya sepenuhnya sebelum memberikan access tingkat kolom yang dibatasi.
-- Remove all SELECT on the table first
REVOKE SELECT ON employees FROM analyst;
-- Then grant only safe columns
GRANT SELECT (id, name, department) ON employees TO analyst;Izin Kolom dan Keamanan Tingkat Baris Bersama-sama
Izin tingkat kolom dan Keamanan Tingkat Baris (RLS) saling melengkapi. RLS mengontrol baris mana yang dapat dilihat pengguna; izin tingkat kolom mengontrol kolom mana dalam baris tersebut yang terlihat.
Bersama-sama, keduanya membentuk kontrol access dua dimensi yang kuat: batasi kumpulan baris DAN sembunyikan bidang sensitif dalam setiap baris.
-- RLS policy: employees can see only their own row
CREATE POLICY own_row ON employees
FOR SELECT
USING (user_id = current_user_id());
-- Column grant: hide salary even for own row
GRANT SELECT (id, name, department) ON employees TO employee_role;Menggunakan Fungsi SECURITY DEFINER
Jika Anda menginginkan logika terperinci di luar daftar kolom sederhana, fungsi SECURITY DEFINER dapat menjadi perantara. Fungsi tersebut berjalan dengan hak istimewa pemiliknya (yang memiliki access penuh ke kolom) dan hanya mengembalikan hal-hal yang dipilihnya untuk ditampilkan, siapa pun yang memanggilnya.
CREATE OR REPLACE FUNCTION get_employee_summary(emp_id INT)
RETURNS TABLE(id INT, name TEXT, department TEXT)
SECURITY DEFINER
LANGUAGE sql AS
$$
SELECT id, name, department
FROM employees
WHERE id = emp_id;
$$;
GRANT EXECUTE ON FUNCTION get_employee_summary(INT) TO analyst;Desain Praktis: Keamanan Kolom Berlapis
Pola produksi yang baik menggabungkan tiga lapisan:
- Kepemilikan tabel — hanya akun layanan aplikasi yang memiliki tabel dasar.
- Tampilan atau GRANT kolom — peran pembaca hanya mendapatkan access ke kolom non-sensitif.
- Kolom pengauditan — catat pengguna dan stempel waktu yang menyentuh data sensitif melalui pemicu.
Hal ini memastikan bahwa meskipun suatu peran secara tidak sengaja diberi hak istimewa berlebih pada satu lapisan, lapisan lainnya tetap melindungi data.
-- Layer 1: revoke public access
REVOKE ALL ON employees FROM PUBLIC;
-- Layer 2: expose safe columns via view
CREATE VIEW employee_public AS
SELECT id, name, department, hire_date FROM employees;
GRANT SELECT ON employee_public TO reporting_role;
-- Layer 3: audit trigger logs sensitive field reads (pseudocode)
-- CREATE TRIGGER audit_salary AFTER SELECT ON employees ...Pemeriksaan Singkat
Pernyataan SQL mana yang memberikan peran hr_viewer kemampuan untuk membaca hanya kolom name dan department dari tabel employees dengan benar?
Ringkasan: Izin Tingkat Kolom
Izin tingkat kolom memungkinkan Anda membatasi access ke bidang individual, bukan ke seluruh tabel, sehingga data sensitif seperti gaji, SSN, dan hash kata sandi tetap tersembunyi dari peran yang tidak memiliki hak istimewa.
Poin utama:
- Gunakan
GRANT SELECT (col1, col2) ON table TO roleuntuk membatasi kolom yang dapat dibaca. - Gunakan
REVOKEdengan daftar kolom untuk menghapus access ke kolom tertentu. - Tampilan merupakan alternatif portabel yang berfungsi di semua basis data.
- Gabungkan izin tingkat kolom dengan RLS untuk kontrol access dua dimensi.
- Fungsi SECURITY DEFINER menyediakan penyaringan tingkat kolom terprogram dengan logika tambahan.
Jika diterapkan secara konsisten, keamanan tingkat kolom merupakan salah satu cara paling sederhana dan efektif untuk menerapkan prinsip hak istimewa paling rendah pada lapisan data.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Izin Tingkat Kolom” gratis?
Ya — teks lengkap “Izin Tingkat Kolom” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Izin Tingkat Kolom”?
Sembunyikan kolom sensitif. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Izin Tingkat Kolom” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Peran dan Hak Istimewa
- Kebijakan Keamanan Tingkat Baris
- Izin Tingkat Kolom
- Mengaudit Akses