Sütun Düzeyi İzinler
Hassas sütunları gizleyin.
Sütun Düzeyi İzinler, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Sütun Düzeyinde İzinler Neden Önemlidir
Her kullanıcı bir tablodaki her sütunu görmemelidir. Bir maaş sütunu, bir parola özeti veya bir kredi kartı numarası, kullanıcı adı ya da e-posta gibi tamamen herkese açık verilerle aynı tabloda bulunabilir.
Sütun düzeyindeki izinler, tablonun tamamı yerine belirli sütunlara erişim vermenizi sağlar; böylece görmek için iş gerekçesi olmayan kullanıcıların hassas verileri görmesi engellenir.
Bütün Tablo Üzerinde <code>GRANT</code>
Varsayılan olarak GRANT SELECT ON table, bir role tüm sütunları okuma yeteneği verir. Bu, herkese açık veriler için uygundur; ancak tablo hassas ve hassas olmayan sütunları bir arada içerdiğinde sorun oluşturur.
Aşağıdaki sorgu, analyst rolüne employees tablosu için maaş ve SSN dahil tam okuma erişimi verir.
GRANT SELECT ON employees TO analyst;Sütun Düzeyinde GRANT Sözdizimi
PostgreSQL (ve standart SQL), bir GRANT ifadesi içinde belirli sütun adlarını listelemenize olanak tanır. Sözdizimi şöyledir:
GRANT privilege (col1, col2) ON table TO role;
Aşağıdaki örnek, analyst rolüne yalnızca id, name ve department sütunlarını okuma izni verir — ancak salary veya ssn için NOT.
GRANT SELECT (id, name, department) ON employees TO analyst;Sütun İzinlerini Doğrulama
PostgreSQL'de sütun düzeyindeki ayrıcalıkları information_schema.column_privileges görünümünü sorgulayarak inceleyebilirsiniz. Bu görünüm, hangi yetki sahibinin hangi sütunda hangi ayrıcalığa sahip olduğunu listeler.
SELECT grantee, table_name, column_name, privilege_type
FROM information_schema.column_privileges
WHERE table_name = 'employees'
ORDER BY grantee, column_name;Doğru Sütunlar Olmadan Ne Olur
Bir rol, erişim izni verilmemiş bir sütunu okumaya çalışırsa veritabanı izin reddedildi hatası döndürür. Yalnızca izin verilen sütunlara başvurmak başarılı olur.
analyst rolüne yalnızca id, name ve department izni verildiğini varsayarsak, aşağıdaki ilk sorgu başarısız olur; ikincisi başarılı olur.
-- This will fail for analyst (no permission on salary):
-- SELECT id, name, salary FROM employees;
-- This succeeds:
SELECT id, name, department FROM employees;Sütun Düzeyinde UPDATE İzni
Sütun düzeyindeki kısıtlamalar UPDATE için de geçerlidir. Bir rolün yalnızca belirli sütunları güncellemesine izin verebilirsiniz — örneğin bir yardım masası rolünün kullanıcının status değerini güncellemesine, ancak email veya password_hash değerini değiştirememesine izin verebilirsiniz.
GRANT UPDATE (status) ON users TO helpdesk;
-- helpdesk can now run:
UPDATE users SET status = 'suspended' WHERE id = 42;Görünümlerle Sütunları Gizleme
Yaygın başka bir yaklaşım, yalnızca güvenli sütunları gösteren bir görünüm oluşturmak ve ardından temel tablo yerine görünüme erişim vermektir. Bu yaklaşım yalnızca sütun düzeyinde GRANT desteği sunan veritabanlarında değil, tüm veritabanlarında çalışır.
CREATE VIEW public_employees AS
SELECT id, name, department, hire_date
FROM employees;
GRANT SELECT ON public_employees TO analyst;Sütun Düzeyindeki Erişimi Geri Alma
GRANT gibi, belirli sütunlara erişimi kaldırmak için sütun listesiyle birlikte REVOKE kullanabilirsiniz. Bir rolün geniş kapsamlı tablo düzeyi erişimi varsa, kısıtlı sütun düzeyi erişimi vermeden önce bu erişimi tamamen geri almanız gerekebilir.
-- 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;Sütun İzinleri ve RLS Birlikte
Sütun düzeyindeki izinler ve satır düzeyinde güvenlik (RLS) birbirini tamamlar. RLS, kullanıcının hangi satırları görebileceğini; sütun düzeyindeki izinler ise bu satırlardaki hangi sütunların görünür olduğunu denetler.
Birlikte güçlü, iki boyutlu bir erişim denetimi oluştururlar: satır kümesini kısıtlayın VE her satırdaki hassas alanları gizleyin.
-- 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;SECURITY DEFINER İşlevlerini Kullanma
Basit sütun listelerinin ötesinde ince ayrıntılı bir mantık istediğinizde, SECURITY DEFINER işlevi bir köprü görevi görebilir. İşlev, sahibinin ayrıcalıklarıyla (sütunlara tam erişimi olan) çalışır ve çağıran kişi kim olursa olsun yalnızca açığa çıkarmayı seçtiği verileri döndürür.
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;Pratik Tasarım: Katmanlı Sütun Güvenliği
Sağlam bir üretim deseni üç katmanı birleştirir:
- Tablo sahipliği — temel tablonun sahibi yalnızca uygulama hizmet hesabıdır.
- Görünümler veya sütun GRANT'leri — okuma rolleri yalnızca hassas olmayan sütunlara erişebilir.
- Denetim sütunları — tetikleyiciler aracılığıyla hassas verilere dokunan kullanıcıyı ve zaman damgasını kaydedin.
Bu, bir role tek katmanda yanlışlıkla gerekenden fazla ayrıcalık verilse bile diğer katmanların verileri korumaya devam etmesini sağlar.
-- 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 ...Hızlı Kontrol
hr_viewer rolüne employees tablosundaki yalnızca name ve department sütunlarını okuma yeteneğini doğru şekilde veren SQL ifadesi hangisidir?
Özet: Sütun Düzeyinde İzinler
Sütun düzeyindeki izinler, erişimi tabloların tamamı yerine tek tek alanlarla sınırlandırmanızı sağlar; böylece maaşlar, SSN'ler ve parola özetleri gibi hassas veriler ayrıcalığı olmayan rollerden gizlenir.
Temel çıkarımlar:
- Okunabilir sütunları sınırlandırmak için
GRANT SELECT (col1, col2) ON table TO rolekullanın. - Belirli sütun erişimlerini kaldırmak için sütun listesiyle birlikte
REVOKEkullanın. - Görünümler, tüm veritabanlarında çalışan taşınabilir bir alternatiftir.
- İki boyutlu erişim denetimi için sütun düzeyindeki izinleri RLS ile birleştirin.
- SECURITY DEFINER işlevleri, ek mantıkla program aracılığıyla sütun düzeyinde filtreleme sağlar.
Tutarlı biçimde uygulandığında sütun düzeyinde güvenlik, veri katmanında en az ayrıcalık ilkesini zorunlu kılmanın en basit ve etkili yollarından biridir.
Sıkça Sorulan Sorular
“Sütun Düzeyi İzinler” dersi ücretsiz mi?
Evet — “Sütun Düzeyi İzinler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Sütun Düzeyi İzinler” dersinde ne öğreneceğim?
Hassas sütunları gizleyin. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Sütun Düzeyi İzinler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Roller ve Ayrıcalıklar
- Satır Düzeyi Güvenlik Politikaları
- Sütun Düzeyi İzinler
- Erişimi Denetleme