Row Level Security

Row Level Security(RLS) bize, bir database altında bulunan tablodaki verilerin row bazlı erişim kontrolünü sağlar. Örnek verecek olursak; Bir işletme düşünün bu işletmenin Sahibi(Boss), Satış Müdürü(Manager), Üretim Mühendisi(Engineer) ve Güvenlik Görevlisi(Bodyguard) olsun. Bu işletmede araçlar için ürünlerin üretildiğini ve satıldığını düşünelim. İşletme Sahibi Üretilen ve Satılan tüm ürünleri görebilsin. Satış Müdürü sadece satılan tüm ürünleri görebilsin. Üretim Mühendis sadece üretilen ürünleri görebilsin. Ve son olarak Güvenlik Görevlisinin uygulamaya erişimi olsun fakat bu konu hakkında hiç bir bilgiye erişemesin.   Yukarıdaki senaryomuza göre adım adım bilgilerimizi tamamlayalım. USE AdventureWorks2017 CREATE TABLE Product      (      ProductID int identity(1,1),      Authorized sysname,      ProductCase varchar(20),        Product varchar(20),     Qty int      );  USE AdventureWorks2017 INSERT INTO Product VALUES ('Boss','All', 'Car', 5); INSERT INTO Product VALUES ('Engineer','Production', 'Wheel', 1); INSERT INTO Product VALUES ('Engineer','Production','Jant', 4); INSERT INTO Product VALUES ('Manager','Sales', 'Koltuk', 2); INSERT INTO Product VALUES ('Manager','Sales', 'Paspas', 3); INSERT INTO Product […]

Row Level Security

Row Level Security(RLS) bize, bir database altında bulunan tablodaki verilerin row bazlı erişim kontrolünü sağlar.

Örnek verecek olursak; Bir işletme düşünün bu işletmenin Sahibi(Boss), Satış Müdürü(Manager), Üretim Mühendisi(Engineer) ve Güvenlik Görevlisi(Bodyguard) olsun.

Bu işletmede araçlar için ürünlerin üretildiğini ve satıldığını düşünelim.

İşletme Sahibi Üretilen ve Satılan tüm ürünleri görebilsin.

Satış Müdürü sadece satılan tüm ürünleri görebilsin.

Üretim Mühendis sadece üretilen ürünleri görebilsin.

Ve son olarak Güvenlik Görevlisinin uygulamaya erişimi olsun fakat bu konu hakkında hiç bir bilgiye erişemesin.

 

Yukarıdaki senaryomuza göre adım adım bilgilerimizi tamamlayalım.

USE AdventureWorks2017

CREATE TABLE Product 

    ( 

    ProductID int identity(1,1), 

    Authorized sysname, 

    ProductCase varchar(20),

       Product varchar(20),

    Qty int 

    ); 

USE AdventureWorks2017

INSERT INTO Product VALUES ('Boss','All', 'Car', 5);

INSERT INTO Product VALUES ('Engineer','Production', 'Wheel', 1);

INSERT INTO Product VALUES ('Engineer','Production','Jant', 4);

INSERT INTO Product VALUES ('Manager','Sales', 'Koltuk', 2);

INSERT INTO Product VALUES ('Manager','Sales', 'Paspas', 3);

INSERT INTO Product VALUES ('Manager','Sales', 'Cam', 6);

 

USE AdventureWorks2017

SELECT * FROM Product;

Senaryomuzda okumasını istediğimiz ve istemediğimiz kişileri oluşturup ilgili tabloya okuma yetkilerini veriyoruz.

USE AdventureWorks2017

CREATE USER Boss WITHOUT LOGIN;

GRANT SELECT ON dbo.Product TO Boss;

CREATE USER Manager WITHOUT LOGIN;

GRANT SELECT ON dbo.Product TO Manager;

CREATE USER Engineer WITHOUT LOGIN;

GRANT SELECT ON dbo.Product TO Engineer;

CREATE USER Bodyguard WITHOUT LOGIN;

GRANT SELECT ON dbo.Product TO Bodyguard;

Yeni bir table value function oluşturuyoruz. Bunu oluşturmadaki amacımız RLS yapacağımız verilerde hangi kolon altındaki değerlere göre bunu yapacağız.

USE AdventureWorks2017

CREATE FUNCTION dbo.tvf_fn_RLS(@Authorized AS sysname)

RETURNS TABLE

WITH SCHEMABINDING

AS

RETURN SELECT 1 AS fn_securitypredicate_result

WHERE @Authorized = USER_NAME() OR USER_NAME() = 'Boss';

 

Filtrelenecek kolona güvenlik policy ekliyoruz. Policy durumu kesinlikle ON olmalı yoksa RLS çalışmaz.

USE AdventureWorks2017

CREATE SECURITY POLICY SalesProdFilter

ADD FILTER PREDICATE dbo.tvf_fn_RLS(Authorized)

ON dbo.Product

WITH (STATE = ON);

 

Tüm bu işlemlerden sonra tek tek oluşturduğumuz kullanıcılar için sorgu sonuçlarını aşağıda inceleyebilirsiniz.

USE AdventureWorks2017

EXECUTE AS USER = 'Boss';

SELECT * FROM Product;

REVERT;

EXECUTE AS USER = 'Manager';

SELECT * FROM Product;

REVERT;

EXECUTE AS USER = 'Engineer';

SELECT * FROM Product;

REVERT;

EXECUTE AS USER = 'Bodyguard';

SELECT * FROM Product;

REVERT;

Benzer Yazılar

SQL SERVER RIGHT-LEFT PARTITION

SQL Server 5 gün önce

SQL Server’da partitioning, büyük veritabanı tablolarını daha yönetilebilir ve performanslı hale getirmek amacıyla kullanılan bir tekniktir. Bu teknik, tablonun verilerini fiziksel olarak değil, mantıksal olarak parçalara ayırır. Veriler, belirli bir partition function ve partition scheme kullanılarak farklı bölümlere yönlendirilir. Partitioning, özellikle büyük veri kümeleriyle çalışan veri tabanlarında sorgu performansını artırır ve veri yönetimini kolaylaştırır. Partition Function ve Partition Scheme nedir? Partition Function: Verilerin hangi kriterlere göre bölüneceğini belirler. Örneğin, bir tarih aralığına göre verileri ayırmak. Partition Scheme: Verilerin hangi filegroup’larda depolanacağını belirler.   Örnek olarak Range LEFT ve Range RIGHT olmak üzere iki ayrı tabloda partition nasıl yapılır sizlere göstereceğim. İlk olarak Range LEFT olan partition yapısından başlayacağım. Öncelikle Veri tabanıma yeni filegroup ve file ekliyorum Şimdi sıra FUNCTION ve SCHEME oluşturmakta ben tablomu yıllık olarak partition yaptım sizler ihtiyaçlarınız doğrultusunda aylık,günlük vs yapabilirsiniz. LEFT partition dediğimiz olay vermiş olduğunuz tarih aralığına eşit bir veri geldiğinde bu veriyi solundaki partition […]

Veritabanı Recovery Pending Durumu ve Düzeltme Seçenekleri

SQL Server 2 hafta önce

İçindekilerVeritabanı Recovery Pending Durumu Nedir?Veritabanı Neden Recover Pending Duruma Düşer?Recovery Pending Durumu Nasıl Çözülür?SonuçKaynaklarVeritabanı Recovery Pending Durumu Nedir? SQL Server’da veritabanları bazı nedenlere bağlı olarak “Recovery Pending” (Kurtarma Bekleme)  moduna geçebilir. Veritabanın düzgün bir şekilde kapatılmaması, eksik veya bozuk log dosyaları, disk depolama sorunları, sistemde yaşanan anormal şekilde çökmeler veya MS SQL Server’daki hatalar bu duruma sebep olabilir. Recovery durumu, aslında veritabanını tekrar kullanılabilir hale getirmek için bir kurtarma işlemi yürüttüğünü ifade eder ve üç aşamadan oluşur; Analysis (Analiz): Transaction log incelemesi yapılması ve işlemlerin tamamlanma (Commit) durumunun kontrol edilmesi, Redo (Yeniden İşleme): Tamamlanmış (Commit) ancak henüz diske yazılamamış olan işlemlerin yeniden işlenmesi, Undo (Geri Alma): Başlamış (Begin) ancak tamamlanmamış (Commit) işlemlerin  geri alınmasıdır.   Veritabanı Neden Recover Pending Duruma Düşer? SQL Server Restart Süreci SQL Server servisi restart edildiğinde üzerinde bulunan tüm veritabanları tutarlılığın sağlanması için otomatik olarak recovery moduna girer ve redo/undo işlemleri sürecince devam eder. Ani Sistem […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

0 Yorum

Yorum Yaz

Rastgele