Doküman menüsü

Sürüm 3.0.0

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.

SunucuYetkiarchivepurgecopy-onlyKullanım Amacı
KaynakSELECT✅✅✅Satırları okuma
KaynakDELETE✅✅—Arşivlenen satırları silme
KaynakTRIGGER✅✅—DELETE tetikleyicilerini (trigger) listeleme
KaynakPROCESS (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ızca INSERT yetkisini kanıtlar; validate ve dry-run hiçbir zaman kopyaları okumaz. Doğrulama yapan bir çalıştırma (sha256 veya count) kopyaları geri okur. Archive kurtarma süreci de kayıtlı bir kök kaydın ağacını silmeden önce kopyaları okur. Bu nedenle SELECT yetkisi olmayan bir hesap bu noktada, herhangi bir silme işleminden önce başarısız olur. verification: none ayarında kopyaları yalnızca archive kurtarma süreci okur. Hazır yetki tanımları bu yetkiyi içerir.
  • TRIGGER. Bir tabloda TRIGGER yetkisi olmayan bir hesap boş bir tetikleyici listesi görür. Bu liste hiçbir şey kanıtlamadığı için ön kontroller görevi reddeder. TRIGGER yetkisi 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 CREATE yetkisi 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_ADMIN yetkisi, hesabın kısıtlı diğer oturum değişkenlerini de değiştirmesine izin verir. Bu nedenle sunucunun genel max_error_count değ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. Kaynaktaki DELETE ve hedefteki INSERT, 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. PROCESS yetkisini verin.
  • En az yetki (least privilege) ilkesiyle kurulan ortamlar. validate veya dry-run komutlarını daha yetkili bir hesapla çalıştırmak yalnızca tanılama amaçlıdır: archive, purge ve copy-only komutları ö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.