You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Satır Bazı Güvenlik Uygulaması
Netsis Satır Bazı Güvenlik uygulamasıyla ilgili ayrıntılı bilgiye bu dokümandan ulaşılır.
Netsis Satır Bazı Güvenlik sistemi, veri tabanındaki kayıtları satır bazında görüntüleme ve işlem yetkilerinin, "Kullanıcı", "Kullanıcı Grubu" veya "Tüm Kullanıcılar" bazında sınırlandırılabilmesini sağlar.
Satır Bazı Güvenlik uygulaması, Oracle & SQL Server 2016 ve üzeri versiyonların tüm sürümlerinde (Express, Standard, Enterprise) kullanılabilir.
Satır Bazı Güvenlik Sisteminin kullanılabilmesi için Şirket / Şube / Parametre Tanımları ekranından Güvenlik Uygulaması parametresinin "Satır Bazı Güvenlik Sistemi" veya "Hepsi" olarak seçilmesi gerekir.

Güvenlik tanımlamaları, "Genel\Kullanıcı İşlemleri\Kayıt\Satır Bazı Güvenlik" menüsünden gerçekleştirilir.
Örneğin; Kullanıcılar il bazında tanımlanan kullanıcı gruplarına bağlıdır. Her kullanıcının yalnızca bağlı olduğu ilde bulunan müşterileri görüntüleme ve işlem yetkisinin tanımlanması istenmektedir.
İzmir için örnek tanımlama aşağıdaki gibi gerçekleştirilir.
Kısıt Kapsamı alanında Grup seçeneği işaretlenerek Grup Kodu rehberinden "IZMIR" kullanıcı grubu seçilir.
Veritabanı Nesnesi, kısıtlamanın yapılacağı tablo nesnesinin belirtiği alandır. Örneğimizde Cari Hesap Kayıtları ile ilgili bir kısıtlama yapılacağı için "TBLCASABIT" nesnesi seçilir.

Satır Bazı Güvenlik ile izleme ve işlem olmak üzere iki çeşit kısıtlama yapılabilir.
İzleme Kısıtı: Seçilen kullanıcıların belirlenen kısıt ifadesine uygun kayıtları görüntüleyebilmesi veya görüntüleyememesi için kullanılan kuraldır.
Örn; Kullanıcının sadece İzmir'e iline ait kayıtları görüntülemesi için (@CARI_IL='IZMIR'),
İzmir dışındaki tüm kayıtları görüntüleyebilmesi için (@CARI_IL<>'IZMIR') şeklinde tanımlanabilir.
Örneğimizdeki kısıt tanımlandıktan sonra İzmir grubuna bağlı bir kullanıcı tarafından programa giriş yapıldığında ekranlarda, raporlarda ve rehberlerde cari il bilgisi İzmir olmayan kayıtların gösterilmesine izin verilmeyecektir.
İzleme seçilerek oluşturulan kısıtlar NFS_RLS_PREDICATE_XXX_FILTER (XXX Tablo Adı) adıyla oluşturulan Table Valued Function'a eklenir.
İşlem Kısıtı: Seçilen kullanıcılar için kısıt ifadesinde belirtilen kayıtlarda, kayıt, düzelme ve silme işlemlerinin engellenmesi için kullanılır.
Örneğin; Yetki grubu "İzmir" olan bir kullanıcı tarafından cari il bilgisine "İzmir" dışında bir kayıt girilmek istendiğinde ekran görüntüsündeki uyarı alınacaktır.

İşlem kısıtı seçilerek oluşturulan kayıtlar NFS_RLS_PREDICATE_XXX_BLOCK (XXX Tablo Adı) adıyla oluşturulan Table Valued Function'a eklenir.
Hepsi seçilerek oluşturulan kayıtlar ise; <span style="color: #333333"><strong>NFS_RLS_PREDICATE_XXX</strong>_<strong>FILTER </strong>ve<strong> NFS_RLS_PREDICATE_XXX_BLOCK </strong>için oluşturulan </span>Table Valued Function'a eklenir.
Not: Kısıt Tipi seçeneği sadece SQL Server veritabanlarında kullanılabilir.
Detaylı Tanım: Detaylı Tanım yöntemi seçildiğinde alttaki bölüme istenen kısıt tanımı serbest bir biçimde yazılabilir. Kısıt tanımlarında saha adının başında @ ifadesi yer almalıdır.
Örn; <span style="color: #333333"><em>@CARI_KOD LIKE 'M%' AND @CARI_TIP = 'A' AND (@CARI_IL = 'IZMIR' OR @CARI_IL = 'AYDIN')</em></span>
Basit Tanım: Basit Tanım yönteminde SQL cümlesinin yazıldığı bölüm yerine saha listesinin bulunduğu bir tablo ekrana gelecektir. Saha Adı alanından tablonun kısıt ifadesinin yazılacağı saha adı seçilir ve ilgili operatör belirtilerek değer alanlarına kısıt değeri yazılır.

Birden fazla alana kısıt vermek için sağ klik menüsü "Araya Satır Ekle" seçeneği kullanılabilir.
Tablo Sahaları
"Veritabanı Nesnesi" alanında seçilen tabloya ait sahaların izlenmesi için kullanılan butondur. Böylece, kısıt verilecek tablonun saha isimlerine bu ekrandan bakılabilir.
Satır bazı güvenlik kısıtları kaydedildiğinde Row-Level Security (RLS) tanımları için gereken table valued function nesneleri otomatik olarak oluşturulur ve bu fonksiyonlar oluşturulan policy'lere otomatik eklenir.
Yukarıdaki tanımlara göre function ve policy aşağıdaki gibi oluşur.
Predicate Block Function (Kısıt Tipi İşlem/Hepsi Seçildiğinde)
<span style="color: #0000ff">CREATE</span> <span style="color: #0000ff">FUNCTION</span> [dbo]<span style="color: #808080">.</span>[NFS_RLS_PREDICATE_BLOCK_TBLCASABIT] <span style="color: #808080">(</span>@SUBE_KODU <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span><span style="color: #808080">,</span>@ISLETME_KODU <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span><span style="color: #808080">,</span>@CARI_KOD <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_TEL <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_IL <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@ULKE_KODU <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_ISIM <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_TIP <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">)………)</span>
<span style="color: #0000ff">RETURNS</span> <span style="color: #0000ff">TABLE</span>
<span style="color: #0000ff">WITH</span> <span style="color: #0000ff">SCHEMABINDING</span> <span style="color: #0000ff">AS</span>
<span style="color: #0000ff">RETURN</span> <span style="color: #0000ff">SELECT</span> 1 <span style="color: #0000ff">AS</span> RESULT
<span style="color: #0000ff">WHERE</span> 1<span style="color: #808080">=</span>1
<span style="color: #808080">AND</span> 1<span style="color: #808080">=(</span> <span style="color: #0000ff">CASE</span>
<span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span> <span style="color: #ff00ff">CAST</span><span style="color: #808080">(</span> <span style="color: #ff00ff">SESSION_CONTEXT</span><span style="color: #808080">(</span><span style="color: #ff0000">N'NETSIS_GROUP_ID'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span> <span style="color: #808080">)=</span><span style="color: #ff0000">'-18'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span>
<span style="color: #0000ff">CASE</span> <span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span>@CARI_IL <span style="color: #808080">=</span> <span style="color: #ff0000">'IZMIR'</span> <span style="color: #808080">AND</span> @CARI_TIP<span style="color: #808080">=</span><span style="color: #ff0000">'A'</span><span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span> 1 <span style="color: #0000ff">ELSE</span> 0 <span style="color: #0000ff">END</span>
<span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span> <span style="color: #ff00ff">CAST</span><span style="color: #808080">(</span> <span style="color: #ff00ff">SESSION_CONTEXT</span><span style="color: #808080">(</span><span style="color: #ff0000">N'NETSIS_GROUP_ID'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span> <span style="color: #808080">)=</span><span style="color: #ff0000">'-19'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span>
<span style="color: #0000ff">CASE</span> <span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span>@CARI_IL <span style="color: #808080">=</span> <span style="color: #ff0000">'ISTANBUL'</span> <span style="color: #808080">AND</span> @CARI_TIP<span style="color: #808080">=</span><span style="color: #ff0000">'A'</span><span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span> 1 <span style="color: #0000ff">ELSE</span> 0 <span style="color: #0000ff">END</span>
<span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span> <span style="color: #ff00ff">CAST</span><span style="color: #808080">(</span> <span style="color: #ff00ff">SESSION_CONTEXT</span><span style="color: #808080">(</span><span style="color: #ff0000">N'NETSIS_GROUP_ID'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span> <span style="color: #808080">)=</span><span style="color: #ff0000">'-20'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span>
<span style="color: #0000ff">CASE</span> <span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span>@CARI_IL<span style="color: #808080">=</span><span style="color: #ff0000">'ANKARA'</span> <span style="color: #808080">AND</span> @CARI_TIP<span style="color: #808080">=</span><span style="color: #ff0000">'A'</span><span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span> 1 <span style="color: #0000ff">ELSE</span> 0 <span style="color: #0000ff">END</span>
<span style="color: #0000ff">ELSE</span> 1 <span style="color: #0000ff">END</span><span style="color: #808080">)</span>
<span style="color: #0000ff">GO</span>

Predicate Filter Function (Kısıt Tipi İzleme/Hepsi Seçildiğinde)
<span style="color: #0000ff">CREATE</span> <span style="color: #0000ff">FUNCTION</span> [dbo]<span style="color: #808080">.</span>[NFS_RLS_PREDICATE_FILTER_TBLCASABIT] <span style="color: #808080">(</span>@SUBE_KODU <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span><span style="color: #808080">,</span>@ISLETME_KODU <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span><span style="color: #808080">,</span>@CARI_KOD <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_TEL <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_IL <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@ULKE_KODU <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_ISIM <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">),</span>@CARI_TIP <span style="color: #0000ff">AS</span> <span style="color: #0000ff">VARCHAR</span><span style="color: #808080">(</span><span style="color: #ff00ff">MAX</span><span style="color: #808080">)………)</span>
<span style="color: #0000ff">RETURNS</span> <span style="color: #0000ff">TABLE</span>
<span style="color: #0000ff">WITH</span> <span style="color: #0000ff">SCHEMABINDING</span> <span style="color: #0000ff">AS</span>
<span style="color: #0000ff">RETURN</span> <span style="color: #0000ff">SELECT</span> 1 <span style="color: #0000ff">AS</span> RESULT
<span style="color: #0000ff">WHERE</span> 1<span style="color: #808080">=</span>1
<span style="color: #808080">AND</span> 1<span style="color: #808080">=(</span> <span style="color: #0000ff">CASE</span>
<span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span> <span style="color: #ff00ff">CAST</span><span style="color: #808080">(</span> <span style="color: #ff00ff">SESSION_CONTEXT</span><span style="color: #808080">(</span><span style="color: #ff0000">N'NETSIS_GROUP_ID'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span> <span style="color: #808080">)=</span><span style="color: #ff0000">'-18'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span>
<span style="color: #0000ff">CASE</span> <span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span>@CARI_IL <span style="color: #808080">=</span> <span style="color: #ff0000">'IZMIR'</span> <span style="color: #808080">AND</span> @CARI_TIP<span style="color: #808080">=</span><span style="color: #ff0000">'A'</span><span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span> 1 <span style="color: #0000ff">ELSE</span> 0 <span style="color: #0000ff">END</span>
<span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span> <span style="color: #ff00ff">CAST</span><span style="color: #808080">(</span> <span style="color: #ff00ff">SESSION_CONTEXT</span><span style="color: #808080">(</span><span style="color: #ff0000">N'NETSIS_GROUP_ID'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span> <span style="color: #808080">)=</span><span style="color: #ff0000">'-19'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span>
<span style="color: #0000ff">CASE</span> <span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span>@CARI_IL <span style="color: #808080">=</span> <span style="color: #ff0000">'ISTANBUL'</span> <span style="color: #808080">AND</span> @CARI_TIP<span style="color: #808080">=</span><span style="color: #ff0000">'A'</span><span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span> 1 <span style="color: #0000ff">ELSE</span> 0 <span style="color: #0000ff">END</span>
<span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span> <span style="color: #ff00ff">CAST</span><span style="color: #808080">(</span> <span style="color: #ff00ff">SESSION_CONTEXT</span><span style="color: #808080">(</span><span style="color: #ff0000">N'NETSIS_GROUP_ID'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">AS</span> <span style="color: #0000ff">INTEGER</span> <span style="color: #808080">)=</span><span style="color: #ff0000">'-20'</span> <span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span>
<span style="color: #0000ff">CASE</span> <span style="color: #0000ff">WHEN</span> <span style="color: #808080">(</span>@CARI_IL<span style="color: #808080">=</span><span style="color: #ff0000">'ANKARA'</span> <span style="color: #808080">AND</span> @CARI_TIP<span style="color: #808080">=</span><span style="color: #ff0000">'A'</span><span style="color: #808080">)</span> <span style="color: #0000ff">THEN</span> 1 <span style="color: #0000ff">ELSE</span> 0 <span style="color: #0000ff">END</span>
<span style="color: #0000ff">ELSE</span> 1 <span style="color: #0000ff">END</span><span style="color: #808080">)</span>
<span style="color: #0000ff">GO</span>
Security Policy
<span style="color: #0000ff">CREATE</span> <span style="color: #0000ff">SECURITY</span> <span style="color: #0000ff">POLICY</span> [dbo]<span style="color: #808080">.</span>[NETSIS_POLICY_RLS_TBLCASABIT]
<span style="color: #0000ff">ADD</span> <span style="color: #0000ff">FILTER</span> <span style="color: #0000ff">PREDICATE</span> [DBO]<span style="color: #808080">.</span>[NFS_RLS_PREDICATE_FILTER_TBLCASABIT]<span style="color: #808080">(</span>[SUBE_KODU]<span style="color: #808080">,</span>[ISLETME_KODU]<span style="color: #808080">,</span>[CARI_KOD]<span style="color: #808080">,</span>[CARI_TEL]<span style="color: #808080">,</span>[CARI_IL]<span style="color: #808080">,</span>[ULKE_KODU]<span style="color: #808080">,</span>[CARI_ISIM]<span style="color: #808080">,</span>[CARI_TIP]<span style="color: #808080">,</span>[GRUP_KODU]<span style="color: #808080">……………)</span> <span style="color: #0000ff">ON</span> [dbo]<span style="color: #808080">.</span>[TBLCASABIT]<span style="color: #808080">,</span>
<span style="color: #0000ff">ADD</span> <span style="color: #0000ff">BLOCK</span> <span style="color: #0000ff">PREDICATE</span> [DBO]<span style="color: #808080">.</span>[NFS_RLS_PREDICATE_BLOCK_TBLCASABIT]<span style="color: #808080">(</span>[SUBE_KODU]<span style="color: #808080">,</span>[ISLETME_KODU]<span style="color: #808080">,</span>[CARI_KOD]<span style="color: #808080">,</span>[CARI_TEL]<span style="color: #808080">,</span>[CARI_IL]<span style="color: #808080">,</span>[ULKE_KODU]<span style="color: #808080">,</span>[CARI_ISIM]<span style="color: #808080">,</span>[CARI_TIP]<span style="color: #808080">,</span>[GRUP_KODU]<span style="color: #808080">……………)</span> <span style="color: #0000ff">ON</span> [dbo]<span style="color: #808080">.</span>[TBLCASABIT]
<span style="color: #0000ff">WITH</span> <span style="color: #808080">(</span><span style="color: #0000ff">STATE</span> <span style="color: #808080">=</span> <span style="color: #0000ff">ON</span><span style="color: #808080">,</span> <span style="color: #0000ff">SCHEMABINDING</span> <span style="color: #808080">=</span> <span style="color: #0000ff">ON</span><span style="color: #808080">)</span>
<span style="color: #0000ff">GO</span>
Kuralları Yeniden oluştur
Satır bazı güvenlik kuralları doğru bir şekilde çalışmadığında veya Security Policy ve Function nesnelerinin içeriğinde kuralların doğru çalışmasını etkileyen bir değişiklik meydana geldiğinde Policy ve Function nesnelerinin yeniden oluşmasını sağlar.
Kural Önizleme
Tanımlanan kuralların önizlemesi için kullanılan ekrandır. Ön izlemesi istenen Kullanıcı veya Grup kodu ve ilgili veritabanı nesnesi seçim yapıldıktan sonra <<tab>> tuşuna basıldığında, tabloda seçilen kullanıcının görüntüleyebileceği kayıtlar listelenir. Örn; "IZMIR" grubundaki kullanıcılar tarafından programa giriş yapıldığında, kısıt verilen tablodaki kayıtların nasıl görüntüleceği aşağıdaki gibi izlenebilir.


Satır bazı güvenlik uygulamasında dikkat edilmesi gereken bazı durumlar vardır. Örneğin bir kullanıcı için belirli bir stok grubu kısıtlandığında, kısıt kapsamındaki kullanıcı tarafından Maliyet Oluşturma işlemi çalıştırıldığında yetkisi olmayan stok grubu için maliyet işlemi çalıştırılmayacaktır. Bu nedenle bu gibi işlemlerin kısıtlı olmayan kullanıcılarda yapılması önerilir.
Not: Satır bazı güvenlik kısıtlamaları admin kullanıcılar için yapıldığında dikkate alınmamaktadır.