Veri API'si oluşturucusunda rol devralma

Uyarı

Bu bölümde açıklanan Veri API oluşturucusu 2.0 işlevselliği şu anda önizleme aşamasındadır ve genel kullanılabilirlik öncesinde değişebilir. Daha fazla bilgi için bkz. Sürüm 2.0'daki yenilikler.

Rol devralma, izinleri daha geniş bir rol üzerinde bir kez tanımlamanıza ve bu erişimi otomatik olarak devralan daha belirli rollere sahip olmanıza olanak tanır. Rol devralma olmadan, her varlıkta her rol için aynı izin bloğunu tekrarlamanız gerekir. Rol devralma ile, erişimi anonymous bir kez tanımlayın ve daha geniş her rol aynı erişimi alır.

Devralma zinciri

Devralma zinciri en az ayrıcalıklıdan en ayrıcalıklıya akar:

named-role → authenticated → anonymous
Rol Şuradan türetilir Notlar
Adlandırılmış rol (örneğin, editor) authenticated anonymous yapılandırılmamışsa authenticated ya da
authenticated anonymous Açık authenticated bir blok olmadığında uygulanır
anonymous (yok) Zincirin tabanı; geri dönüş yok

Zincir şu anlama gelir:

  • Adlandırılmış rolün izin bloğu yoksa DAB bir authenticated bloğu arar. Yoksa anonymous öğesine geri döner.
  • İzin bloğu yoksa authenticated , DAB bloğunu anonymous kullanır.
  • İstek, anonymous izin bloğu yoksa 403 Forbidden ile reddedilir.

Devralma nasıl çözülür?

DAB bir isteği değerlendirdiğinde etkili rolü belirler ve ardından devralma zincirini takip ederek bir izin bloğu bulur.

  1. DAB istekteki etkili rolü tanımlar (üst bilgi, belirteç talepleri veya varsayılanlar aracılığıyla X-MS-API-ROLE).
  2. DAB, etkin entities.<name>.permissions rolle eşleşen açık bir izin bloğu arar.
  3. Eşleşen bir blok yoksa, DAB zincirinde yukarı doğru ilerler: authenticatedanonymous.
  4. Bulunan ilk eşleşen blok, istek için izinleri sağlar.
  5. Zincirdeki hiçbir blok herhangi bir rolle eşleşmiyorsa, DAB 403 Forbidden döndürür.

Uyarı

DAB, izinleri istek başına tam olarak bir etkin rol bağlamında değerlendirir. Rol devralma, birden çok roldeki izinleri birleştirmez.

Örnekler

En düşük yapılandırma: Tüm roller için tek izin

read üzerinde bir anonymous izni tanımlayın. Her rol (authenticated ve adlandırılmış herhangi bir rol) bu erişimi devralır.

{
  "entities": {
    "Book": {
      "source": "dbo.books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

Bu yapılandırma için geçerli izinler:

Entity: Book
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read (inherited from: anonymous)
    Unconfigured roles     | Inherit from: anonymous

Katmanlı yapılandırma: rol başına farklı erişim

Rol başına farklı erişim düzeylerine ihtiyacınız olduğunda, her bir düzeyi açıkça tanımlayın. Yapılandırmadığınız rolleri yalnızca miras üstlenir.

{
  "entities": {
    "Order": {
      "source": "dbo.orders",
      "permissions": [
        { "role": "anonymous",      "actions": [ "read" ] },
        { "role": "authenticated",  "actions": [ "read", "create" ] },
        { "role": "admin",          "actions": [ "*" ] }
      ]
    }
  }
}

Bu yapılandırma için geçerli izinler:

Entity: Order
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read, Create
    Role: admin            | Actions: Create, Read, Update, Delete
    Unconfigured roles     | Inherit from: authenticated

Haricindeki herhangi bir adlandırılmış rol admin—örneğin, viewer veya supportauthenticated devralır ve read ve create erişim alır.

Devralma yok: tamamen engellendi

anonymous izin bloğu yoksa ve zincirdeki diğer hiçbir rolün de izin bloğu yoksa, bu varlığa yapılan her istek reddedilir.

{
  "entities": {
    "AuditLog": {
      "source": "dbo.audit_log",
      "permissions": [
        { "role": "admin", "actions": [ "read" ] }
      ]
    }
  }
}

Bu yapılandırmada yalnızca admin, AuditLog öğesine erişebilir. authenticated ve anonymous devralınacak bir engel bulunmadığından, DAB 403 Forbidden bu rollerden gelen istekleri reddeder.

Önemli

DAB, authenticated veya adlandırılmış roller bir varlıkta yapılandırıldığında, fakat Unauthenticated sağlayıcı etkin durumdaysa başlangıçta bir uyarı yayar. Etkin olduğunda Unauthenticated , bu roller hiçbir zaman etkinleştirilmez. Daha fazla bilgi için bkz. Kimliği Doğrulanmamış sağlayıcıyı yapılandırma.

Etkin izinleri görüntüleme

Çözümlenmiş izinleri her varlık için görüntülemek ve hangi rollerin hangilerinden devralındığını görmek için dab configure --show-effective-permissions kullanın. Bu komut, motoru çalıştırmadan devralmanın beklendiği gibi çalıştığını doğrulamanın en hızlı yoludur.

dab configure --show-effective-permissions

Ayrıca belirli bir yapılandırma dosyasını hedefleyebilirsiniz:

dab configure --show-effective-permissions --config my-config.json

Örnek çıkış:

Entity: Book
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read (inherited from: anonymous)
    Unconfigured roles inherit from: anonymous

Entity: Order
    Role: admin            | Actions: Create, Read, Update, Delete
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read (inherited from: anonymous)
    Unconfigured roles inherit from: authenticated

Tam seçenekler için bkz --show-effective-permissions. .

Devralma ve açık izinler karşılaştırması

Scenario Tavsiye
Tüm roller aynı erişime sahip olmalıdır Üzerinde anonymousbir kez tanımla ; tüm rollerin devralmasına izin ver
Kimliği doğrulanmış kullanıcıların anonimden daha fazla erişime ihtiyacı var Tanımlama anonymous okuma, oluşturma/güncelleştirme authenticated ekleme
Tanımlı bir rolün authenticated'den daha geniş erişime ihtiyacı var Adlandırılmış rolü açıkça tanımlayın; diğerleri authenticated'den devralır.
Adlandırılmış bir rol daha az erişim gerektirir authenticated Azaltılmış eylemlerle adlandırılmış rolü açıkça tanımlayın
Bir varlığın tamamen özel olması gerekir Yalnızca belirli adlandırılmış rolü verin; authenticated ve anonymous'i tanımsız olarak bırakın.