İzin - Permission

İzin - Permission Erişimi veya kullanımı belirli bir yetki dahilinde sınırlandırılmış kısıtlı kaynaklara erişime ve ya kullanımı için gerekli yetkiye izin adı verilir. .NET için ise izin; System.Security.IPermission ara biriminden türeyen ve bu ara birimin tüm özelliklerini sağlayan tüm nesnelerdir.Bu yazımızda izinleri ve izin kümelerini inceleyeceğiz.. İzin kümeleri hiç ya da daha çok izinden oluşan kümedir. Kod Erişim güvenliğindeki izinler küme teorisi üzerine kuruludur. Buna göre izin kümesi boş küme de olabilir ya da sonsuz sayıda eleman içerebilir. İzin kümeleri System.Collections.ICollection arabirimini desteklemektedir. Yalnız tüm elemanları System.Security.IPermission ara birimine sahip nesnelerdir. CLR"de bir çok gömülü IPermission sınıfından türeyen ve bunlara ek özellikler içeren bir çok izin tanımlıdır. Bir izinin sahip olması gereken fonksiyonlar System.Security.IPermission ara birimiyle tanımlanmıştır:namespace System.Security { public interface IPermission{ IPermission Union(IPermission rhs); IPermission Intersect(IPermission rhs); bool IsSubsetOf(IPermission rhs); IPermission Copy(); void Demand(); } }İlk üç metot her bir izine de bir küme gibi düşünmemizi sağlamaktadır. İzinler İzinler 1 1 0 1 0 0 1 0 0 0 1 0 İzin Kümesi A İzin Kümesi B İzinler İzinler 1 1 0 1 1 0 1 0 0 0 0 0 A Bileşim B A Kesişim B İşlem Sonuç A.IsSubsetOf( B ) False B.IsSubsetOf( A ) False A.IsSubsetOf( A.Union( B ) ) True A.Intersect( B ).IsSubsetOf( B ) TrueBu örnekte izin kümeleri üzerinde yapılan işlemler bitmask ile gösterilmiştir. Kesişim işlemi, bit düzeyinde ve mantıksal işlemi;Bileşim işlemi, bit düzeyinde ve ya mantıksal işlemi ile sembolize edilmiştir. Alt küme işlemi ise sahip olunan izinlerin diğerinde de olması mantığıyla sembolize edilmiştir. Bir çok izin, yukarıdaki örnekte de olduğu gibi seçilmiş işlemleri gösteren bir bitmask ile gösterilebilmektedir.static void DosyaİzinleriÖrneği() { FileIOPermissionAccess all = FileIOPermissionAccess.AllAccess; IPermission p1 = new FileIOPermission(all,@"C:Dizin"); IPermission p2 = new FileIOPermission(all,@"C:DizinAltDizin"); IPermission p3 = p1.Union(p2); IPermission p4 = p1.Intersect(p2); Debug.Assert(p2.IsSubsetOf(p1)); Debug.Assert(p1.IsSubsetOf(p2) == false); }Bu örnekte, ilk satırla, tüm erişim tipleri (okumak, değiştirmek, yeni dosya ya da dizin eklemek, dizin ya da dosya silmek) için izinler oluşturulacaktır."C:Dizin" dosya yoluyla belirtilen dizindeki dosyalara erişim için bir izin tanımlanmış ve bu p1 değişkeninde saklanmıştır. "C:DizinAltDizin" dosya yoluyla belirtilen dizindeki dosyalara erişim için bir izin tanımlanmış ve bu p2 değişkeninde saklanmıştır. p1 ile p2 izinlerinin birleşimi ya da kesişimi yine bir izindir(tıpkı küme teorisinde olduğu gibi; iki kümenin kesişimi ya da birleşimi yine bir kümedir). p1 ile p2 izinlerinin kesişimleri ayrı bir izin olsa bile burada p2 izinin p1 izinin bir alt kümesi olmasından dolayı bu izin p2"ye eşittir. p1 ile p2 izinlerinin birleşimleri ayrı bir izin olsa bile p2 izninin p1 izninin bir alt kümesi olmasından dolayı bu izin p1"e eşittir.IPermission metotları kendisine verilen tüm izinlerin aynı tipte olduğunu kabul ederler. Bu demektir ki, FileIOPermission nesnesiyle ile Web Permission nesnesinin kesişim işlemine sokulması hataya sebep olacaktır. Bir çok izin, işlemler ile ilgil ek bilgiler de içerirler. FileIOPermission nesnesinde dosya yolu gibi bir ek bilgi bulunur, WebPermission nesnesinde de sunucu adı ve ya adresi gibi ek bilgiler bulunur. Örneğin, FileIOPermission izninden türetilmiş bir nesneden GetPathList metoduyla o izine eklenmiş tüm dizinlerin listesini alabilirsiniz. WebPermission izninden türetilmiş bir nesneden ConnectList özelliği ile bağlı izin listesini, AcceptList ile kabul olmuş izin listesini alabilirsiniz.İzin Kümeleri sınırsız izinlere de sahip olabilirler. Bu izin kümesinin kurucu metotuna(constructor) PermisssionState.Unrestricted parametresi geçirilerek gerçeklenebilir. Bu şekilde sınırsız izin tanımlanmış tüm izin kümeleri IUnrestrictedPermission arabirimi tarafından tanımlanmış o izin kümesine ait tüm izin ve ayrıcalıklara sahiptir. Ama bu tüm yetkileri aldığı anlamına da gelmez. IUnrestrictedPermission arabirimini desteklemeyen izin ve ayrıcalıklar (örneğin, kimlik izinleri) bu şekilde o izine eklenemez. Bununla beraber, AddPermission metoduyla bu izinleri eklemeniz mümkündür.Tüm izinleri bir ya da bir kaç makalede incelemek mümkün olmadığından bu yazımızda izinlerin genel özelliklerinden bahsettik. .NET Form Güvenliği yazı dizimizin bir sonraki yazısında .NET güvenliğinin temelini oluşturan Yığıt Yürüyüşü (Stack Walk) anlatılacaktır.Not : Bu makale Don Box"ın "The Security Infrastructure of the CLR Provides Evidence, Policy, Permissions, and Enforcement Services" ve MSDN"nin ilgili konu anlatımlarının yer aldığı "An Overview of Security in the .NET Framework" makalelerinden derlenmiştir.Yazar : Yunus Emre ALPÖZENe-Posta : yunus.alpozen et msakademik.net

Döküman Arama

Başlık :

Kapat