Sunucu (nardbd)
Veritabanlarını mTLS'li gRPC ile sunmak — sertifikalar, ayarlar, yetkiler ve denetim kaydı.
nardbd bir veya daha fazla .ndbc veritabanını ağ üzerinden sunar. İstemciler gRPC ile bağlanır. Bağlantı her zaman karşılıklı TLS'tir (mTLS): sunucu istemcinin sertifikasını, istemci de sunucununkini doğrular.
Kurulum#
cd nardb
go build -o bin/nardbd ./cmd/nardbd
./bin/nardbd certs -dir ./certs -hosts db.example.com,10.0.0.5 -client app
./bin/nardbd example-config > nardbd.json # düzenleyin
./bin/nardbd serve -config nardbd.jsoncerts bir sertifika otoritesi (ca.crt, ca.key), bir sunucu sertifikası ve ilk istemci sertifikasını üretir. Anahtar dosyaları yalnızca sahibinin okuyabileceği izinlerle (0600) yazılır. ca.key ile yeni istemciler imzalanabilir; onu sunucudan uzakta saklayın.
./bin/nardbd client-cert -dir ./certs -client muhasebeAyarlar#
{
"listen": "127.0.0.1:7070",
"tls_cert": "certs/server.crt",
"tls_key": "certs/server.key",
"client_ca": "certs/ca.crt",
"audit_log": "nardbd-audit.log",
"session_ttl": "8h",
"databases": [
{"name": "magaza", "path": "data/magaza.ndbc", "key": ""},
{"name": "arsiv", "path": "data/arsiv.ndbc", "key": "passphrase-env:NARDB_ARSIV_PASSPHRASE"}
]
}| Alan | Not |
|---|---|
listen | Varsayılan 127.0.0.1. Başka bir adres verilirse sunucu uyarı yazar; önüne bir güvenlik duvarı koyun. |
tls_cert, tls_key, client_ca | Zorunlu. Sunucu TLS'siz ya da istemci sertifikasız çalışmaz. |
key | Boş: şifresiz ya da anahtarı sistem anahtar deposunda. passphrase-env:AD: parola ortam değişkeninden. passphrase-file:/yol: parola dosyadan (dosya yalnızca sahibince okunabilmeli). |
Veritabanları önce NarDB Shell ya da Go API ile oluşturulur; sunucu yeni veritabanı oluşturmaz.
Kullanıcılar ve yetkiler#
Sunucuya bağlanan istemci, veritabanının bir kullanıcısıyla oturum açar ve her ifade o kullanıcının yetkisiyle çalışır. Kullanıcıyı ve yetkiyi shell'de verin:
>> create_user -n app
>> grant -u app -s uyeler -p write
>> grant -u yonetici -s '*' -p admin
>> revoke -u app -s uyeler
>> show_users| Yetki | İzin verdiği |
|---|---|
read | from(...) ile seçme |
write | read + insert_one, insert_many, update, delete |
admin | write + create_schema, alter_schema, drop_schema |
-s '*' bütün şemaları, ileride oluşturulacaklar dahil, kapsar. Yetkisi olmayan bir kullanıcı uzaktan hiçbir şey yapamaz. Bir betikteki ifadelerin hepsinin yetkisi, hiçbiri çalışmadan önce denetlenir.
İstemci (Go)#
import "nardb/client"
c, err := client.Dial(ctx, client.Config{
Addr: "db.example.com:7070",
CAFile: "certs/ca.crt",
CertFile: "certs/client-app.crt",
KeyFile: "certs/client-app.key",
})
s, err := c.Authenticate(ctx, "magaza", "app", parola)
res, err := s.Exec(ctx, `from('uyeler').where({'email': $1}).fields('name');`, email)Değerler $1, $2 ile ayrı gönderilir; sorgu metnine gömülmez. Büyük sonuçlar 500 satırlık parçalar halinde akar. Sözleşme nardb/proto/nardb/v1/nardb.proto dosyasındadır; başka dillerde istemci bu dosyadan üretilebilir.
Güvenlik davranışları#
- Giriş hataları veritabanının, kullanıcının ya da parolanın hangisinin yanlış olduğunu söylemez. Olmayan veritabanı ve olmayan kullanıcı, yanlış parolayla aynı sürede reddedilir.
- Kaba kuvvet: aynı istemciden (sertifika + IP) bir dakika içinde 5 başarısız giriş, o istemciyi bir dakika kilitler.
- Oturumlar: jeton 32 rastgele bayttır; sunucu yalnızca özetini tutar. Süresi
session_ttlkadardır. - Bağlantı sınırı: veritabanının
max_connectionsayarı, açık oturum sayısının üst sınırıdır. - Denetim kaydı (
audit_log): her olay bir JSON satırıdır. Kayıt şu bilgileri içerir: zaman, olay (auth_ok,auth_fail,auth_locked,exec,denied,logout), istemci sertifikasındaki ad, adres, veritabanı, kullanıcı, ifade türleri ve şemaları, etkilenen satır sayısı, süre. Sorgu metni ve değerler kayda girmez.
{"time":"2026-10-30T14:39:38Z","event":"denied","client":"app","db":"magaza","user":"app","statements":["drop_schema:urunler:admin"],"error":"nardb: permission denied: user 'app' needs admin on 'urunler' (line 1, col 1)"}Henüz yok#
- NarDB Shell'in uzak sunucuya bağlanması (Connect Remote Server).
- Sertifika iptal listesi (CRL); bir istemciyi engellemek için şimdilik yetkilerini kaldırın ya da yeni bir CA ile sertifikaları yenileyin.
- Partition'ları başka düğümlere dağıtma.