Kullanıcı Yetkileri
GoArchive komutlarının kaynak, hedef ve takip şemalarında ihtiyaç duyduğu veritabanı yetkileri ve doğrudan yetkilendirme kuralları.
GoArchive, herhangi bir veri taşınmadan önce kendi yetkilerini kontrol eder. GoArchive, bağlantı hesabının görevin gerektirdiği yetkilere sahip olduğunu kanıtlayamazsa görevi reddeder. Her yetkiyi GoArchive’ın bağlandığı hesaba doğrudan verin.
Hazır Yetki Tanımları (Grant Recipes)
Aşağıdaki hazır yetki tanımları (grant recipes), gerekli yetkileri uygun kapsamda doğrudan hesaba verdiği için tüm yetki kontrollerinden geçer.
Kaynak
GRANT SELECT, DELETE, TRIGGER ON `<source_schema>`.* TO '<user>'@'<host>'; -- DELETE, TRIGGER: archive ve purge görevleri
GRANT PROCESS ON *.* TO '<user>'@'<host>'; -- archive ve purge görevleri
PROCESS tanımı gereği sunucu genelinde geçerli bir yetkidir; daha dar bir kapsamı yoktur.
Hedef: Takip Tabloları Hedef Veritabanında (Varsayılan)
job_schema tanımlanmadığında değeri destination.database olur. Böylece tek bir yetki tanımı hem verileri hem de takip tablolarını kapsar:
GRANT SELECT, INSERT, CREATE, UPDATE, TRIGGER ON `<destination_schema>`.* TO '<user>'@'<host>';
Hedef: Takip Tabloları Ayrı Bir Şemada
destination.job_schema tanımlandığında iki yetkiyi ayrı ayrı verin. Bu şemayı önce bir DBA oluşturur; GoArchive hiçbir zaman şema oluşturmaz.
GRANT SELECT, INSERT, TRIGGER ON `<destination_schema>`.* TO '<user>'@'<host>';
GRANT CREATE, SELECT, INSERT, UPDATE ON `<job_schema>`.* TO '<user>'@'<host>';
İzlenen Replikalar (İsteğe Bağlı)
-- replication.servers listesindeki HER sunucuda, o kaydın kullanıcısı için.
GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'%';
Bu yetki yalnızca replication.enabled: true olduğunda gereklidir. Hesabında bu yetki bulunmayan bir sunucu atlanmaz; görevi bekletir.
Takip Tablolarının Bakımı
Takip şemasında eski kayıtları temizleme (prune), hatalı kökleri bırakma/terk etme (abandon), görevi tamamen kullanımdan kaldırma (retire) ve tabloları silme (drop) işlemleri DELETE ve DROP yetkilerini gerektirir (Takip Tablolarının Bakımı
). GoArchive bu işlemlerin hiçbirini yapmaz: Bu yetkileri GoArchive’ın hesabına değil, bir DBA hesabına verin.
Yetki Matrisi
Yetkiler görev türüne göre listelenmiştir. validate ve dry-run, görevin ön kontrollerini çalıştırdığı için görev türünün gerektirdiği yetkilere ihtiyaç duyar.
| Sunucu | Yetki | archive | purge | copy-only | Kullanım Amacı |
|---|---|---|---|---|---|
| Kaynak | SELECT | ✅ | ✅ | ✅ | Satırları okuma |
| Kaynak | DELETE | ✅ | ✅ | — | Arşivlenen satırları silme |
| Kaynak | TRIGGER | ✅ | ✅ | — | DELETE tetikleyicilerini (trigger) listeleme |
| Kaynak | PROCESS (genel) | ✅ | ✅ | — | Yabancıl anahtar meta verisinin eksiksiz olduğunu kanıtlama |
| Hedef (veri) | INSERT | ✅ | — | ✅ | Satırları kopyalama |
| Hedef (veri) | SELECT | ✅ | — | ✅ | Doğrulama için kopyaları geri okuma ve archive kurtarma sürecinde hedefte nelerin bulunduğunu kontrol etme |
| Hedef (veri) | TRIGGER | ✅ | — | ✅ | INSERT tetikleyicilerini listeleme |
Takip şeması (job_schema) | CREATE, SELECT, INSERT, UPDATE | ✅ | ✅ | ✅ | Görev takip merkezi (registry), görev başına günlük tabloları, şema etiketi |
| Kaynak ve hedef (isteğe bağlı, genel) | SESSION_VARIABLES_ADMIN | ✅ | ✅ | ✅ | Yalnızca genel max_error_count değeri 0 olan sunucularda |
| İzlenen her replika (isteğe bağlı) | REPLICATION CLIENT | ✅ | ✅ | — | Replika izleme |
- Hedefte
SELECT. Ön kontroller yalnızcaINSERTyetkisini kanıtlar;validatevedry-runhiçbir zaman kopyaları okumaz. Doğrulama yapan bir çalıştırma (sha256veyacount) kopyaları geri okur. Archive kurtarma süreci de kayıtlı bir kök kaydın ağacını silmeden önce kopyaları okur. Bu nedenleSELECTyetkisi olmayan bir hesap bu noktada, herhangi bir silme işleminden önce başarısız olur.verification: noneayarında kopyaları yalnızca archive kurtarma süreci okur. Hazır yetki tanımları bu yetkiyi içerir. TRIGGER. Bir tablodaTRIGGERyetkisi olmayan bir hesap boş bir tetikleyici listesi görür. Bu liste hiçbir şey kanıtlamadığı için ön kontroller görevi reddeder.TRIGGERyetkisi aynı zamanda bu tablolarda tetikleyici oluşturmaya ve silmeye de izin verir; GoArchive bunu hiçbir zaman yapmaz. Yetkiyi şema yerine her görev tablosuna ayrı ayrı vermek, kapsamı yalnızca bu tablolarla sınırlar.- Takip şemasındaki
CREATEyetkisi yalnızca bir kez değil, çalışma zamanında da gereklidir: Her görevin günlük tablosu, görev ilk kez çalıştığında oluşturulur. Bu yetkiyi içermeyen bir tanım başlangıçta başarısız olur. - Kilitler yetki gerektirmez. GoArchive’ın adlandırılmış kilitleri (named locks) kaynakta veya hedefte herhangi bir yetki tanımı gerektirmez ve salt okunur (read-only) bir sunucuda da çalışır.
SESSION_VARIABLES_ADMINyetkisi, hesabın kısıtlı diğer oturum değişkenlerini de değiştirmesine izin verir. Bu nedenle sunucunun genelmax_error_countdeğerini yükseltmek genellikle daha iyi bir çözümdür. Hazır yetki tanımları bu yetkiyi içermez.
Kanıtlanabilir Yetki Kuralı
Bir yetki kontrolü, yalnızca yetki ilgili tablo için kesin olarak tespit edildiğinde başarılı olur. Yalnızca bir rol (role) üzerinden sahip olunan bir yetki kanıtlanamaz ve unconfirmed sonucuyla başarısız olur. Kısmi geri almalarla (partial revokes) genel yetkileri kısıtlayan bir sunucudaki genel yetki tanımı da aynı şekilde başarısız olur. SELECT, DELETE, INSERT, TRIGGER ve takip şeması yetkilerini GoArchive’ın bağlandığı hesaba şema veya tablo düzeyinde doğrudan verin.
PROCESS bu kuralın istisnasıdır: Rol üzerinden sahip olunan PROCESS yetkisi kabul edilir. Bu yetkinin kanıtı, yabancıl anahtar meta verisinin başarıyla okunmasıdır ve rol üzerinden sahip olunan PROCESS da aynı sonucu üretir.
Her kontrolün gördüğü durumu nasıl raporladığı Yetki, Tetikleyici ve Sunucu Ayarı Kontrolleri sayfasında listelenmiştir.
Sorun Giderme
- Bir kontrol, yetki verildiğini düşündüğünüz tabloları listeliyor. Yetkinin, bağlandığınız hesaba değil
CURRENT_USER()fonksiyonunun çözümlediği hesaba verildiğini kontrol edin. Yetkinin bir rol üzerinden değil doğrudan verildiğini ve doğru şema ile sunucuda tanımlandığını doğrulayın. KaynaktakiDELETEve hedeftekiINSERT, farklı sunucularda verilen ayrı yetkilerdir. - Yabancıl anahtar görünürlük kontrolü, şemalar arası yabancıl anahtar içermeyen bir şemada başarısız oluyor. Bu beklenen bir durumdur: Kontrol, şemanın içeriği ne olursa olsun yabancıl anahtar listesinin eksiksiz olduğunu kanıtlar.
PROCESSyetkisini verin. - En az yetki (least privilege) ilkesiyle kurulan ortamlar.
validateveyadry-runkomutlarını daha yetkili bir hesapla çalıştırmak yalnızca tanılama amaçlıdır:archive,purgevecopy-onlykomutları ön kontrolleri kendi hesaplarıyla yeniden çalıştırır. Bu hesaplar, görev türünün gerektirdiği tüm yetkilere sahip olmalıdır.
