---
title: 'Güvenlik Yapılandırması'
source: 'https://academia.sh/tr/kurslar/nosql/guvenlik-yapilandirmasi'
course: 'İlişkisel Olmayan Veri Modelleri'
language: tr
updated: '2026-08-17T18:08:59+00:00'
license: 'CC BY-SA 4.0'
---

# Güvenlik Yapılandırması

Yetkinin bir ayar olarak ölçülmesi: kimlik doğrulaması kapalı bir kurulumda erişilebilen derlem ve kayıt sayısının sayılması, aynı beş uygulama kimliğinin küme geneli, veritabanı düzeyi ve derlem düzeyi rollerle koşturulup okunabilir, yazılabilir ve kişisel veri taşıyan kayıt toplamlarının karşılaştırılması, en az yetkinin küçültemediği artığın adlandırılması ve aktarım ile durağan şifrelemenin bedelinin ek bayt ve ek işlem adımı olarak çıkarılması.

Önceki ders aynı kümeyi aynı bölünmede dört ayarla koşturdu ve sınıf adının deponun değil
isteğin gittiği yolun özelliği olduğunu saydı. O koşumlarda kümeye ulaşan her yazma ya kabul
edildi ya reddedildi, her okuma ya yanıtlandı ya yanıtsız kaldı. İsteğin kimden geldiği bir kez
bile sorulmadı.

Bu ders o soruyu sorar ve yanıtı yine bir yapılandırmadır. Kimlik doğrulamanın mekaniği burada
anlatılmaz; buranın konusu deponun kendi ayarlarıdır. Ölçülecek üç şey var: kapalı bir yetki
ayarının neye açık olduğu, rol kapsamını daraltmanın bunu ne kadar küçülttüğü ve şifrelemenin
hangi kalemde ne kadar bedel eklediği.

## Açık Yüzey Sayılabilir Bir Niceliktir

Güvenlik yapılandırması anlatılırken kullanılan sıfatlar — sıkı, gevşek, yeterli — karar
taşımaz. Ölçülebilir karşılığı **açık yüzeydir**: bir yapılandırmada tanımlı kimliklerin
okuyabildiği kayıtların toplamı. Yanında iki nicelik daha durur: yazılabilir kayıt ve kişisel
veri taşıyan okunabilir kayıt toplamı. Girdileri derlem boyları, deponun tanıdığı kimlikler ve
her kimliğe atanan rolün kapsamıdır; ilk ikisi kurulumdan gelir, üçüncüsü karardır.

## Düzenek

**NS31 — kurulumda yedi derlem, 154.540 kayıt ve beş uygulama kimliği vardır; her kimliğin işi
belli birkaç derleme dokunur.** Gerekçe: kurs boyunca kullanılan katalog, üye, ödünç ve ceza
derlemlerine personel ve denetim derlemleri eklenir; bir arama hizmeti, bir ödünç ucu, bir ceza
işi, bir rapor işi ve bir yedek işi tipik bir ayrışmadır. **NS32 — aktarım şifrelemesinde bir
çerçeve en çok 16.384 bayt taşır ve 29 bayt ek alır; bağlantı kurulumu bağlantı başına 5.200
bayttır.** Gerekçe: ek bir başlık, bir sıra sayacı ve bir kimlik doğrulama etiketidir; sonucu
belirleyen sayının kendisi değil, **yanıt boyundan bağımsız olmasıdır**. **NS33 — durağan
şifreleme 4.096 baytlık bloklar üzerinde çalışır, blok başına 28 bayt üstveri tutar ve her blok
okunuşu bir ek çözme adımıdır.**

Düzenek bir **modeldir**: gerçek kurulum, ağ ya da kimlik sağlayıcı yoktur. Ölçüm sınıfında sayı
yoktur; NS31–NS33 varsayım, çıktıdaki her sayı onlardan türeyen hesaptır.

```js
// guvenlik/model.mjs — depo YAPILANDIRMASI modelidir: gercek kurulum, ag ya da kimlik
// saglayici yoktur. Rol kapsami ve sifreleme bedeli parametreden hesaplanir.
export const DERLEM = [
  // veritabani, derlem, kayit, kayit basina bayt, kisisel veri tasir mi
  ["kutuphane", "kitap", 20000, 368, false],
  ["kutuphane", "uye", 12000, 214, true],
  ["kutuphane", "odunc", 20000, 96, true],
  ["kutuphane", "ceza", 4800, 72, true],
  ["kutuphane", "ozet", 1560, 88, false],
  ["isletim", "personel", 180, 260, true],
  ["isletim", "denetim", 96000, 128, false],
];
export const KIMLIK = ["katalog-arama", "odunc-uc", "ceza-isleme", "rapor", "yedek"];
const izin = (vt, d, ...e) => ({ vt, d, e });
const HEPSI = [izin("*", "*", "oku", "yaz")];
const her = (r) => Object.fromEntries(KIMLIK.map((k) => [k, r]));
const VT = [izin("kutuphane", "*", "oku", "yaz")];
const AZ = {
  "katalog-arama": [izin("kutuphane", "kitap", "oku")],
  "odunc-uc": [izin("kutuphane", "kitap", "oku"), izin("kutuphane", "uye", "oku"),
    izin("kutuphane", "odunc", "oku", "yaz")],
  "ceza-isleme": [izin("kutuphane", "odunc", "oku"), izin("kutuphane", "ceza", "oku", "yaz")],
  rapor: [izin("kutuphane", "odunc", "oku"), izin("kutuphane", "ceza", "oku")],
  yedek: [izin("*", "*", "oku")],
};
export const YAPILANDIRMA = [
  { ad: "Y0 kimlik dogrulama kapali", kimlik: "hayir", rol: her(HEPSI) },
  { ad: "Y1 kume geneli tek rol", kimlik: "evet", rol: her(HEPSI) },
  { ad: "Y2 veritabani duzeyi rol", kimlik: "evet", rol: { ...her(VT), yedek: AZ.yedek } },
  { ad: "Y3 derlem duzeyi (en az yetki)", kimlik: "evet", rol: AZ },
  { ad: "Y4 derlem duzeyi + ozet derlemi", kimlik: "evet",
    rol: { ...AZ, rapor: [izin("kutuphane", "ozet", "oku")] } },
];

const uyar = (i, d) => (i.vt === "*" || i.vt === d[0]) && (i.d === "*" || i.d === d[1]);

export function yuzey(y) {
  const satir = KIMLIK.map((k) => {
    let oku = 0, yaz = 0, kisisel = 0;
    for (const d of DERLEM) {
      const ilgili = y.rol[k].filter((i) => uyar(i, d));
      if (ilgili.some((i) => i.e.includes("oku"))) { oku += d[2]; if (d[4]) kisisel += d[2]; }
      if (ilgili.some((i) => i.e.includes("yaz"))) yaz += d[2];
    }
    return { k, oku, yaz, kisisel };
  });
  const top = (a) => satir.reduce((s, r) => s + r[a], 0);
  const uyg = satir.filter((r) => r.k !== "yedek").map((r) => r.oku);
  return { satir, oku: top("oku"), yaz: top("yaz"), kisisel: top("kisisel"),
    enGenisUyg: Math.max(...uyg) };
}

export const CERCEVE = 16384, CERCEVE_EK = 29, ELSIKISMA = 5200, BLOK = 4096, BLOK_EK = 28;
export const cerceve = (b) => Math.ceil(b / CERCEVE);
export const blok = (b) => Math.ceil(b / BLOK);
export const bayt = (d) => d[2] * d[3];
export const TOPLAM_BAYT = DERLEM.reduce((s, d) => s + bayt(d), 0);
export const TOPLAM_BLOK = DERLEM.reduce((s, d) => s + blok(bayt(d)), 0);
const OZET = bayt(DERLEM.find((d) => d[1] === "ozet"));
export const ISYUKU = [
  // ad, istek sayisi, istek basina tasinan bayt, istek basina dokunulan blok
  ["katalog-arama noktasal", 180000, 1472, 1],
  ["odunc-uc noktasal", 20000, 640, 1],
  ["ceza-isleme noktasal", 4800, 208, 1],
  ["rapor ozet taramasi", 12, OZET, blok(OZET)],
  ["gecelik yedek", 1, TOPLAM_BAYT, TOPLAM_BLOK],
];
```

```js
// guvenlik/olc.mjs — ayni derlemler, ayni bes kimlik, bes yapilandirma; sonra ayni is yukunun
// aktarim ve duragan sifreleme bedeli
import { DERLEM, KIMLIK, YAPILANDIRMA, ISYUKU, yuzey, cerceve, blok, bayt,
  CERCEVE_EK, ELSIKISMA, BLOK_EK, TOPLAM_BAYT, TOPLAM_BLOK } from "./model.mjs";

const n = (x) => String(x).replace(/\B(?=(\d{3})+(?!\d))/g, ".");
const s = (x, w) => n(x).padStart(w);
const y = (x) => (x * 100).toFixed(2).replace(".", ",");
const KAYIT = DERLEM.reduce((a, d) => a + d[2], 0);

console.log(`${DERLEM.length} derlem, ${n(KAYIT)} kayit, ${n(TOPLAM_BAYT)} bayt, ` +
  `${KIMLIK.length} uygulama kimligi; kayit sutunlari bes kimlik uzerinden toplanmistir.\n`);
console.log("yapilandirma                    | kimlik | okunabilir | en genis uyg | yazilabilir | kisisel");
console.log("--------------------------------|--------|------------|--------------|-------------|--------");
for (const yp of YAPILANDIRMA) {
  const r = yuzey(yp);
  console.log(`${yp.ad.padEnd(31)} | ${yp.kimlik.padEnd(6)} | ${s(r.oku, 10)} | ` +
    `${s(r.enGenisUyg, 12)} | ${s(r.yaz, 11)} | ${s(r.kisisel, 7)}`);
}
const yd = YAPILANDIRMA.map((yp) => yuzey(yp).satir.find((r) => r.k === "yedek"));
console.log(`\nYedek kimliginin okudugu kayit bes yapilandirmada: ` +
  `${yd.map((r) => n(r.oku)).join(", ")} (kisisel ${n(yd[4].kisisel)}).`);

const istek = ISYUKU.reduce((a, w) => a + w[1], 0);
const yuk = ISYUKU.reduce((a, w) => a + w[1] * w[2], 0);
const cerEk = ISYUKU.reduce((a, w) => a + w[1] * cerceve(w[2]) * CERCEVE_EK, 0);
console.log(`\nAyni gunun is yuku: ${n(istek)} istek, ${n(yuk)} bayt tasindi.`);
console.log("is yuku                |   istek | istek bayti | cerceve eki | oran   | cozme adimi");
console.log("-----------------------|---------|-------------|-------------|--------|------------");
for (const [ad, sayi, b, bl] of ISYUKU) {
  const ek = cerceve(b) * CERCEVE_EK;
  console.log(`${ad.padEnd(22)} | ${s(sayi, 7)} | ${s(b, 11)} | ${s(sayi * ek, 11)} | ` +
    `${("%" + y(ek / b)).padStart(6)} | ${s(sayi * bl, 11)}`);
}
console.log(`${"toplam".padEnd(22)} | ${s(istek, 7)} | ${s(yuk, 11)} | ${s(cerEk, 11)} | ` +
  `${("%" + y(cerEk / yuk)).padStart(6)} | ${s(ISYUKU.reduce((a, w) => a + w[1] * w[3], 0), 11)}`);

const HAVUZ = 64, kitap = DERLEM.find((d) => d[1] === "kitap");
console.log(`\nBaglanti kurulumu ${n(ELSIKISMA)} bayt: ${HAVUZ} baglantilik havuzla ` +
  `${n(HAVUZ * ELSIKISMA)} bayt (%${y(HAVUZ * ELSIKISMA / yuk)}), istek basina baglantiyla ` +
  `${n(istek * ELSIKISMA)} bayt (%${y(istek * ELSIKISMA / yuk)}).`);
console.log(`Duragan sifreleme ${n(TOPLAM_BLOK)} blok x ${BLOK_EK} bayt = ` +
  `${n(TOPLAM_BLOK * BLOK_EK)} bayt ek (%${y(TOPLAM_BLOK * BLOK_EK / TOPLAM_BAYT)}); tek noktasal ` +
  `okuma 1 blok cozer, kitap derleminin taranmasi ${n(blok(bayt(kitap)))}.`);
console.log(`\nkosumdan bagimsiz: cerceve eki ${CERCEVE_EK} bayt sabittir, orani yanit boyuna ` +
  `bolunur — 208 baytlik yanitta %${y(CERCEVE_EK / 208)}, dolu cercevede ` +
  `%${y(CERCEVE_EK / 16384)}, ${(16384 / 208).toFixed(0)} kat.`);
```

```
7 derlem, 154.540 kayit, 24.665.680 bayt, 5 uygulama kimligi; kayit sutunlari bes kimlik uzerinden toplanmistir.

yapilandirma                    | kimlik | okunabilir | en genis uyg | yazilabilir | kisisel
--------------------------------|--------|------------|--------------|-------------|--------
Y0 kimlik dogrulama kapali      | hayir  |    772.700 |      154.540 |     772.700 | 184.900
Y1 kume geneli tek rol          | evet   |    772.700 |      154.540 |     772.700 | 184.900
Y2 veritabani duzeyi rol        | evet   |    387.980 |       58.360 |     233.440 | 184.180
Y3 derlem duzeyi (en az yetki)  | evet   |    276.140 |       52.000 |      24.800 | 118.580
Y4 derlem duzeyi + ozet derlemi | evet   |    252.900 |       52.000 |      24.800 |  93.780

Yedek kimliginin okudugu kayit bes yapilandirmada: 154.540, 154.540, 154.540, 154.540, 154.540 (kisisel 36.980).

Ayni gunun is yuku: 204.813 istek, 305.071.440 bayt tasindi.
is yuku                |   istek | istek bayti | cerceve eki | oran   | cozme adimi
-----------------------|---------|-------------|-------------|--------|------------
katalog-arama noktasal | 180.000 |       1.472 |   5.220.000 |  %1,97 |     180.000
odunc-uc noktasal      |  20.000 |         640 |     580.000 |  %4,53 |      20.000
ceza-isleme noktasal   |   4.800 |         208 |     139.200 | %13,94 |       4.800
rapor ozet taramasi    |      12 |     137.280 |       3.132 |  %0,19 |         408
gecelik yedek          |       1 |  24.665.680 |      43.674 |  %0,18 |       6.024
toplam                 | 204.813 | 305.071.440 |   5.986.006 |  %1,96 |     211.232

Baglanti kurulumu 5.200 bayt: 64 baglantilik havuzla 332.800 bayt (%0,11), istek basina baglantiyla 1.065.027.600 bayt (%349,11).
Duragan sifreleme 6.024 blok x 28 bayt = 168.672 bayt ek (%0,68); tek noktasal okuma 1 blok cozer, kitap derleminin taranmasi 1.797.

kosumdan bagimsiz: cerceve eki 29 bayt sabittir, orani yanit boyuna bolunur — 208 baytlik yanitta %13,94, dolu cercevede %0,18, 79 kat.
```

## Kimlik Doğrulamak Yüzeyi Küçültmüyor, Kapsam Küçültüyor

Birinci tablonun ilk iki satırı aynı: 772.700 okunabilir, 772.700 yazılabilir, 184.900 kişisel
kayıt. Kimlik doğrulamasını açmak açık yüzeyi bir kayıt bile küçültmedi.

Farkı tablo göstermiyor, çünkü tablo kimlik **sayısını** sabit tutuyor. Y0'da o sayı beş
değildir: depoya ulaşabilen her istemci bu beş satırdan biri gibi davranır, silme dahil. Y0'ın
açık yüzeyi 772.700 değil, erişebilen istemci sayısı çarpı 154.540'tır. Kimlik doğrulaması
yüzeyi küçülten değil, onu **sonlu bir kimlik kümesine bağlayan** ayardır; küçültme işini kapsam
yapar.

Kapsamın üç düzeyi üç sayı veriyor: veritabanı düzeyi okunabilir kaydı 387.980'e, derlem düzeyi
276.140'a indirdi. Asıl fark yazmadadır — 772.700 → 233.440 → 24.800, yani 31,2 kat — çünkü beş
kimlikten yalnız ikisinin yazması gerekir.

`en genis uyg` sütunu tek bir kimlik ele geçtiğinde görüneni veriyor: 154.540 → 58.360 →
52.000. Ama o sütun yedek kimliğini dışarıda bırakıyor; altındaki satıra göre yedeğin okuduğu
kayıt beş yapılandırmanın **hepsinde** 154.540 kaldı, 36.980'i kişisel. En az yetki en kötü
durumu değiştirmedi, onu tek bir kimliğe hapsetti; sınırı, işi gereği her şeyi okuyan kimliktir.

Y4 son adımı gösteriyor: rapor işine kişisel alan taşımayan bir özet derlemi verildiğinde
okunabilir kayıt 252.900'e, kişisel kayıt 93.780'e indi. Yetki daraltmanın bittiği yerde **veri
daraltmak** başlar.

## Şifrelemenin Bedeli Sabittir, Oranı Değil

İkinci tablo aktarım şifrelemesini aynı günün iş yükünde hesaplıyor: toplam oran %1,96, yani
305.071.440 bayta karşılık 5.986.006 bayt. Yayılma büyüktür — 208 baytlık ceza yanıtında %13,94,
24.665.680 baytlık yedek aktarımında %0,18. Çerçeve eki 29 bayt olarak sabittir; oranı belirleyen
şifreleme değil **yanıtın küçüklüğüdür**, ve son satır bunu koşumdan bağımsız veriyor: 79 kat.

Asıl kalem tablonun altındadır. Bağlantı kurulumu bağlantı başına 5.200 bayttır: 64 bağlantılık
havuzla günde 332.800 bayt, yükün %0,11'i. Aynı iş yükü her istek için yeni bağlantı açtığında
1.065.027.600 bayta, taşınan verinin %349'una çıkıyor. Aktarım şifrelemesini pahalı gösteren
çoğu kez bağlantı kurma biçimidir.

Durağan şifreleme ayrı bir kalemdir: 6.024 blok × 28 bayt = 168.672 bayt, verinin %0,68'i ve veri
boyundan bağımsız. Yerdeki bedel küçüktür; asıl bedel işlem adımıdır ve kayıt sayısıyla değil
**dokunulan blok sayısıyla** ölçülür: noktasal okuma 1, kitap derlemi taraması 1.797. Günün
204.813 isteği 211.232 çözme adımı üretiyor, 6.024'ü tek bir gecelik yedeğe ait.

## Özet

- Açık yüzey sayılabilir bir niceliktir: tanımlı kimliklerin okuyabildiği kayıt toplamı, yanında
  yazılabilir ve kişisel kayıt toplamı.
- Kimlik doğrulamasını açmak açık yüzeyi hiç küçültmedi (772.700 → 772.700); o ayar yüzeyi
  **sonlu bir kimlik kümesine bağlar**. Kapalıyken açık yüzey erişebilen istemci sayısı çarpı
  154.540'tır, yazma ve silme dahil.
- Kapsamı küme geneli rolden derlem düzeyine indirmek okunabilir kaydı 276.140'a, yazılabilir
  kaydı 24.800'e (31,2 kat) indirdi.
- En az yetki en kötü durumu değiştirmedi: yedek kimliği beş yapılandırmanın hepsinde 154.540
  kaydın tamamını okudu. Yetki daraltmanın bittiği yerde veri daraltmak başlar — rapor işine özet
  derlemi verildiğinde kişisel kayıt 118.580'den 93.780'e indi.
- Aktarım şifrelemesinin çerçeve eki 29 bayt olarak sabittir: oranı 208 baytlık yanıtta %13,94,
  dolu çerçevede %0,18. Havuzsuz bağlantı kurulumu taşınan verinin %349'unu ekliyor.
- Durağan şifreleme yerde %0,68 tutar; işlem bedeli dokunulan blok sayısıdır — noktasal okumada
  1, kitap derlemi taramasında 1.797 ek çözme adımı.

## Kurs Kapanışı

Bu kurs on dokuz derste tek bir soruyu sordu: aynı iş iki modelde ya da iki kararla
koşturulduğunda ölçülen fark nedir ve hangi güvenceden vazgeçilmiştir.

| Ders | Karşılaştırılan iki model/karar | Ölçülen fark | Vazgeçilen güvence |
|---|---|---|---|
| Anahtar–Değer Depoları | anahtar erişimi — dizin | ceza sorgusu 1 — 20.000 gidiş | alan üzerinde koşul |
| Belge Veritabanları | belge — ilişkisel | iç içe kayıt 1 — 4 gidiş | yazma anında denetim |
| Geniş Sütun Depoları | satır — aile yerleşimi | dolaşım özeti 1.867 — 46 sayfa | tek yerleşimin iki örüntüye yetmesi |
| Çizge Veritabanları | birleştirme — dolaşma | beşinci derecede 14.190.839 — 217.544 | maliyetin dereceden bağımsızlığı |
| Zaman Serisi Depoları | tam damga — fark kodlaması | 9.331.200 — 329.013 bayt | erişim birimi bölüt olur |
| Model Seçim Ölçütleri | tek örüntü — karışım | kazanan karışımla değişiyor | puanlamanın yazmayı sayması |
| Belge Veri Tipleri | açık — kısa ad — sabit şema | 7.357.008 — 6.082.574 — 3.139.138 bayt | alan adının depoda durması |
| Gömme ve Referans | gömülü — referanslı şema | şube sorgusu 6.149.233 — 781.096 bayt | kitap sayfasının tek gidişi |
| Sorgu İşleçleri | belge düzeyi — öge düzeyi bağlaç | 6.033 — 3.340 belge | koşulların aynı ögede karşılanması |
| Toplama Boru Hattı | süzme önce — gruplama önce | doruk bellek 2.418 — 40.276 | aşama sırasının serbestliği |
| Dizinleme | kesişim — öge düzeyi bileşik dizin | 6.033 — 3.340 okunan belge | bakım 10.840 — 173.994 giriş |
| Şema Doğrulama | yüzeysel — tam kural, `reddet` kipi | 2.500 — 3.200 yakalanan belge | sıradan yazmaların geçmesi |
| İşlemler | tek belge — çok belgeli işlem | 0/20 — 12/20 ihlal, 18 iptal | iptalsizlik, 604.903 bayt geri alma |
| Çoğaltma Kümeleri | üç–dört — beş üyeli küme | 12 yazmasız tur, geri alınan 9 — 6 | kabul edilmiş yazmanın kalıcılığı |
| Parçalama | `alinma_gunu` — `karma(alinma_gunu)` — `uye_id` | sıcak pay %100 — %59,6 | dengenin sıcak parçayı önlemesi |
| Okuma ve Yazma İlgileri | `w=1` — `w=çoğunluk` — `w=hepsi` | onay turu 0/10/16, kayıp yazma 3/0/0 | yazma erişilebilirliği |
| Tutarlılık Modelleri | yapışkan yönlendirme — oturum belirteci | nedensel kopma 24 → 12 → 0 | bayat okumanın 47/108 kalması |
| CAP ve PACELC | `w=çoğunluk`·çoğunluk — `w=1`·yerel | 16 red/16 yanıtsız — 0 yanıtsız | azınlıktaki kabulün kalıcılığı |
| Güvenlik Yapılandırması | küme geneli rol — en az yetki | yazılabilir 772.700 — 24.800 | tek kimliğin her işi görmesi |

Sağdaki iki sütun kursun kuralıdır: **aile değil erişim örüntüsü seçilir; her model bir
güvenceden vazgeçerek bir başarım satın alır.** Bir aileyi adıyla seçmek karar değildir — karar,
hangi işin kaç kat ucuzlayacağını ve hangi güvencenin düşeceğini yazmaktır. On dokuz satırın
hiçbirinde bedelsiz bir kazanç yok.

Bu on dokuz satırın söylenmemiş ortak bir varsayımı daha var. Anahtar–değer deposu değeri diske
yazdı, geniş sütun deposu bellekteki tabloyu dosyaya döktü, çoğaltma kümesi onayı yazma diske
indikten sonra verdi ve durağan şifreleme bu derste tam olarak o diski şifreledi. Verinin
**tamamının** bellekte tutulduğu ve dayanıklılığın kendisinin bir ayara dönüştüğü depolar hiç
ele alınmadı. Bir sonraki kurs — **Bellek İçi Depolar ve Önbellek Sistemleri** — oradan
başlıyor.
