Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim – III

Merhaba,

Bir önceki Asp.NET Core Identity – Identity Altyapısı Kurulumu – II başlıklı makalede Asp.NET Core uygulamalarında Identity altyapısının nasıl kurulduğunu incelemiştik. Bu inceleme neticesinde migrate edilerek oluşturulan veritabanı içerisinde aşağıdaki tablolar oluşturulmuştur. İşte bu makalemizde bu tabloların ne olduğunu, hangi işlev için üretildiklerini detaylıca irdeleyeceğiz.

Asp.NET Core Identity – Alt Yapı Kurulumu - II

AspNetUsersİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
Kullanıcılarla ilgili genel geçer bilgileri tutan tablodur.
1. Her bir kullanıcıyı temsil edecek olan Primary Key Id değeri. Dikkat edilirse nvarchar olarak ayarlanmıştır. Bu ayarlamanın nasıl yapıldığını bir sonraki makalemizde ele alacağız…
2. Kullanıcı adını tutan kolondur. Dikkat edilirse “UserName” kolonunun hemen altında “NormalizedUserName” kolonuda mevcuttur. Neden böyle bir kolona ihtiyaç duyulmuştur? Milyonluk/milyarlık verilerde(Big Data) arama sorguları gerçekleştirilirken hız kazanmak için oluşturulmuş kolondur. Big datanın söz konusu olduğu durumlarda bir arama sorgusu “UserName” üzerinde değil “NormalizedUserName” kolonu üzerinde gerçekleştirilir. Çünkü “Normalized…” ile başlayan kolonlar indekslenmiştir. Dolayısıyla sorgularda daha hızlı çalışan bir altyapıya sahiptirler. “Normalized…” kolonlarının bir diğer özelliği tek bir formatta veri tutmasıdır. Örneğin; “UserName” kolonunda bulunan “Gençay” değeri aynen “NormalizedUserName” kolonuna “GENÇAY” olarak büyük harflerle kopyalanacaktır. Büyük harflerle girilmesinin sebebi tek bir fortmat olmasının getirisi olan daha hızlı eşleştirme yapılabilir olmasıyla birlikte daha hızlı indexlenebilir olmasıdır. Bir kolonun “Normalized…” versiyonu varsa eğer o kolonun kendisi indexlenmemektedir. Dolayısıyla asıl hızlı sorgulamalar Entity Framework tarafından Identity’e özel “Normalized…” kolonlarına odaklanılarak gerçekleştirilir. Bir önceki Identity sürümünde tüm indexlemeler direkt olarak ilgili kolon üzerinde gerçekleştiriliyordu. Dolayısıyla “Normalized…” ile başlayan kolonlar söz konusu değildi. Bunun getirisinin yanında birçokolası hataların yaşanması maliyeti oldukça yükseltiyordu.
3. Kullanıcının e-posta bilgisini tutan alandır. 2. numaralı kolonda olduğu gibi bu kolonunda aynı amaca hizmet eden indexlenmiş değeri olan “NormalizedEmail” kolonu mevcuttur.
4. Kullanıcıdan alınan tüm passwordler Hash algoritmasıyla şifrelenerek tutulmaktadır.
5. Kullanıcı ilk oluşturulduğunda(create) buraya bir build değeri atanır. Sonraki her güncelleme üzerine bu değer güncellenecektir. Dolayısıyla bizlerde bu kullanıcı üzerinde bir değişiklik olduğuna dair bilgi edinmiş olacağız. Bir nevi Data Concurrency sağlayabilmek için oluşturulmuştur.
6. İlgili veri üzerinde Data Concurrency sağlayabilmek için oluşturulmuştur.
7. Kullanıcının kaydı neticesinde aktivasyon yapılanmasının iki adımlı olup olmadığına dair kayıt tutar. Bu kolon genellikle 3. party üyelik sistemleriyle birlikte kullanılır. Örneğin; kullanıcı Facebook üzerinden giriş yaptığında ekstradan telefon ile onay gerektiriyorsa işte “TwoFactorEnabled” kolonu true/1 olarak işaretlenecektir.
8. Kullanıcı girişlerine dair yapılan hataları ve engel durumunu tutan kolonlardır. “LockoutEnd” kolonu kaç kez yanlış girildiğine dair, “LockoutEnabled” kolonu kullanıcının aktifliğine dair ve “AccessFailedCount” kolonu ise kaç başarısız giriş yapılmaya çalışıldığına dair bilgi tutmaktadır. Identity mimarisi bu yapıları otomatik işleyecektir. Dolayısıyla tarafımızca custom bir kod geliştirmemize lüzum görülmemektedir.
AspNetRolesİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
Uygulamada kullanıcılara özgü tanımlanan rolleri tutan tablodur. Şöyle tabloyu incelersek rollerin adını tutacak olan “Name” kolonu ve bu değerleri indexleyip big data durumlarında performans kazandıracak indexlenmiş “NormalizedName” kolonu mevcuttur. Ayriyetten veri tutarlılığı için de “ConcurrencyStamp” kolonu mevcuttur.
AspNetUserRolesİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
Uygulamada hangi kullanıcı hangi rol yetkilerine sahip ilişkilendiren Cross Table(Ara Tablo) görevi gören bir tablodur. Composite primary key olarak ayarlanan “UserId” ile “RoleId” kolonları üzerinden bu ilişki sağlanmaktadır.
AspNetUserClaimsİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
Kullanıcılara dair ekstra bilgiler bu tabloda tutulmaktadır.
AspNetRoleClaimsİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
Uygulamada tanımlanan rollere dair ekstra bilgiler bu tabloda tutulmaktadır.
AspNetUserLoginsİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
3. party üyelik sistemlerinde diğer platformdaki kullanıcıya ait id değerini bu tabloda tutmaktadır. Bu tablo otomatik olarak Identity mimarisi tarafından işlenmektedir.
AspNetUserTokensİnceleme
Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim - III
Ne işe yarar?
Token bazlı doğrulamalarda üretilen token değeri bu tabloda tutulur.

Evet… Artık üretilen tablolarımızı da tanıdığımıza göre bir sonraki içeriğimizde “IdentityUser” sınıfından türeyen sınıflara custom property eklenince nasıl bir inşa söz konusu olduğunu inceleyebiliriz. O halde şimdilik görüşmek üzere…

İlgilenenlerin faydalanması dileğiyle…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 11 Ağustos 2019

    […] Asp.NET Core Identity – Veritabanı Tablolarını İnceleyelim – III […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.