Video: The Great Gildersleeve: A Job Contact / The New Water Commissioner / Election Day Bet 2024
Güvenlik için yararlı bir model, kaydı ayrı ayrı izinler vermek yerine kayıttaki verilere dayalı izinleri uygulamaktır. Bu, meta veriler, tek tek sütunlar (Bigtable klonları) veya öğe (Agrega NoSQL veritabanları) değerlerine dayanabilir.
İyi bir örnek, bir belgede bir müşteri adının belirtilmesidir. Müşteriden söz eden tüm belgelere erişimi sadece bu müşterinin bilgilerine erişimi olan kişilere sınırlamak isteyebilirsiniz. Dokümandaki verileri işleyerek ve bu verilerin değerine dayalı ilgili güvenlik izinlerini uygulayarak bu belgelere erişimi kısıtlayabilirsiniz.
Hiçbir NoSQL veritabanı bu özelliği doğrudan kutudan çıkarır. Bunun nedeni, veriler uygulama tarafından kaydedildikten sonra, ancak diğer uygulamalar veya kullanıcılar tarafından geri çağrılmaya hazır hale gelmeden kayıtlara izinler atanması gerektiğidir. Dolayısıyla, bu izin ataması işlem sınırında yapılmalıdır.
Ayrıca, çok az sayıdaki NoSQL veritabanı, ACID uyumlu işlemleri desteklemektedir (örneğin MarkLogic, FoundationDB ve Neo4j). Bir veritabanı, bir belgedeki verilere dayanan izinlerin kullanıma hazır olmasını desteklemiyorsa, ancak ACID işlemlerini ve öncesi tetikleyicileri destekliyorsa, kolay bir geçici çözüm mümkündür.
Bir kayıtta bir değer olup olmadığını kontrol eden ve değerine göre izinleri değiştirmek için bir tetikleyici yazmak genellikle kolaydır. Veritabanı, taahhüt işlemi sırasında değil bunu taahhüt ettikten sonra desteklediği sürece, verilerinizin basit bir önceden teslim tetikleyicisi kullanılarak güvenli hale getirildiğini biliyorsunuzdur.
Örneğin, MarkLogic Server, tamamen serileştirilebilir ACID işlemlerini ve öncesi tetikleyicileri destekler. Öznitelik tabanlı erişim kontrolü için desteklemek istediğim basit bir XML belgesi aşağıda belirtilmiştir:
jbloggs ACME Lorem Ipsum Dolar Oturur Amet …
MarkLogic Server'ın tetikleyicileri W3C XQuery dilini kullanır. Aşağıdaki XQuery örneği, MarkLogic'e yüklendiğinde okuma ve yazma izinlerini atayan basit bir tetikleyicidir:
xquery sürümü "1. 0-ml"; import modülü ad alanı trgr = ' // marklogic. com / xdmp / triggers 'at' / MarkLogic / tetikler. xqy '; $ trgr: uri değişkenini xs: string external olarak bildirin; $ trgr değişkenini bildirin: tetikleyici node () harici olarak; xdmp: document-set-permissions ($ trgr-uri, (xdmp: permission ("seniororsales", "update"), xdmp: izin ("satış", "okuma"))) else ()
Tetikleyici dosya ayarlarına yüklendikten sonra.xqy, bir MarkLogic Sunucu Modülü Veritabanı'nda, tetikleyiciyi etkinleştirmek için MarkLogic - Sorgu Konsolu için web kodlama uygulamasında şu kodu çalıştırın. Varsayılan bir MarkLogic Sunucu kurulumunda Sorgu Konsolu'nu URL'den bulabilirsiniz: // localhost: 8000 / qconsole.
Tetikleyiciyi Query Console'u kullanarak nasıl kuracağınızı gösteren kod:
xquery version "1. 0-ml"; import modülü ad alanı trgr = "/ MarkLogic / triggers" daki " // marklogic. com / xdmp / tetikleyiciler". xqy '; trgr: create-trigger ("setperms", "Set Sales Doc Permissions", trgr: tetikleyici veri olayı (trgr: toplama kapsamı ("meetingreports"), trgr: belge içeriği ("değiştir"), trgr: öncesi (), fn: true (), xdmp: varsayılan izinler (), fn: tetikleyici modülü (xdmp: database ("Modüller"), "/ tetikleyiciler", "ayarlayıcılar xqy" yanlış ())