1. Ana Sayfa
  2. SQL Server
  3. SQL Server’da sadece Okunabilir tablo Nasıl oluşturulur ?

SQL Server’da sadece Okunabilir tablo Nasıl oluşturulur ?

read-only-table

Veritabanı Yöneticilerinin / Geliştiricilerinin yeni yıl sonlarında yada başlarında yaşadıkları sorunlardan biri de sadece okunabilir bir tablo’ya ihtiyaç duyulmasıdır. Peki firmalar neden sadece okuma amaçlı bir tablo kullanma ihtiyacı hissedebilir hemen bir örnek vereyim. Mali takvim yıl ayrıntıları, satış verileri hedefleri vs gibi değerler sene sona ererken yada başlarken verilebilir. Bu veriler çeşitli bölümlere ait olacaktır ve dönem için ayarlandıktan sonra yetkili bölümler tarafından yapılmadıkça veri modifikasyonlarını engellenmesi gerekirebilir böyle bir durumda bu yapıya ihtiyaç duyabilirsiniz.

Yukarıda bahsettiğimiz ihtiyaç için bir kaç farklı çözüm yöntemi uygulayabilirsiniz, bunları sırası ile aşağıda anlatıyor olacağım.

Yöntem 1 : Read-Only FileGroup oluşturulması

Yöntemin işlem basamakları aşağıdaki gibidir.

1) Yeni bir FileGroup oluşturun.

2) Tabloyu oluşturduğunuz FileGroup üzerinde oluşturun.

3) Tablonuzun gerekli veriler ile doldurun.

4) Oluşturduğunuz filegroup’u read-only olarak alter edin.

Örnek kod blokları ise aşağıdaki gibidir. (Kodlar MSHOWTO Veritabanı için uygulanmıştır. )

ALTER DATABASE [MSHOWTO]
ADD FILEGROUP FG_FinansRead2019;
GO
ALTER DATABASE [MSHOWTO]
ADD FILE
(
NAME = ROFG,
FILENAME = ‘D:\DATA\FinansRead2019\FinansRead2019.ndf’,
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP FG_FinansRead2019;
GO

Filegroup üzerinde tabloyu oluşturuyoruz.

CREATE TABLE FinansalHedefler2019
(
ID int IDENTITY(1,1),
YearVal int,
QuarterVal int,
TargetVal int
)
ON FG_FinansRead2019

Örnek Kayıtları ekliyoruz.

INSERT into FinansalHedefler2019 VALUES
(2019,1,1800),
(2019,2,3500),
(2019,3,1200),
(2019,4,2540),
(2019,5,690),
(2019,6,2420),
(2019,7,4333),
(2019,8,3123)

Filegroup’u read-only olarak ayarlıyoruz.

ALTER DATABASE [MSHOWTO] MODIFY FILEGROUP FG_FinansRead2019 READ_ONLY

İşlem sonrasında tablomuza kayıt eklemeye çalışıyoruz.

INSERT into FinansalHedefler2019

VALUES (2019,9,5541)

Hata mesajımız ;

Resim-1

Artıları

  1. Yönetimi daha kolay
  2. Filegroup değişiklikleri yaparak, yeni tablolara daha rahat uygulanabilir.
  3. Kullanıcı erişimlerinde / yetkilerinde değişiklik yapmaya gerek yok.

Eksileri

  1. Bahsedilen işlemleri uygulayabilmek için sunucuda en azından dbcreator rolüne sahip bir kullanıcı gerekli.

Yöntem 2 : DML İşlemlerini önlemek için DENY deyimi kullanımı

Bu durumda, tabloda veri değişikliğini önlemek için açık bir DENY işlemi yapabiliriz.

Yöntem2 için yeni tablo oluşturulur.

CREATE TABLE FinansalHedefler2019_Yontem2
(
ID int IDENTITY(1,1),
YearVal int,
QuarterVal int,
TargetVal int
)

Yeni oluşturulan tabloya örnek kayıtlar girilir.

INSERT into FinansalHedefler2019_Yontem2 VALUES
(2019,1,1800),
(2019,2,3500),
(2019,3,1200),
(2019,4,2540),
(2019,5,690),
(2019,6,2420),
(2019,7,4333),
(2019,8,3123)

Kısıtlı erişime sahip olacak yeni bir kullanıcı oluşturulur.

Resim-2

User Mapping bölümünde ;

Resim-3

Oluşturduğumuz kullanıcı için INSERT,UPDATE ve DELETE işlemlerini için yetkilerini kaldıralım.

DENY INSERT, UPDATE, DELETE ON FinansalHedefler2019_Yontem2 TO kisitlikullanici

Yeni kayıt eklemeye çalışalım / silmeye çalışalım / update etmeye çalışalım.

INSERT into FinansalHedefler2019_Yontem2 VALUES (2019,9,5541)

Hata Mesajımız ;

Resim-4

Bunun birden fazla kullanıcı için uygulanmasını istiyorsanız eğer yeni bir user role oluşturup kullanıcı o role içerisine ekleyip, deny işlemini o role grup üzerine uygulamanız gerekmektedir.

Artıları

  1. DML işlemlerinin izinleri, kullanıcılar için seçici olarak veya ayrı olarak uygulanabilir

Eksileri

  1. Yönetim çabası çok büyük.Her kullanıcının erişim rolünün ayarlanması / ayrı olarak oluşturulan role eklenmesi gerekir
  2. Yönetici düzeyinde kullanıcılar veya yükseltilmiş izinlere sahip kullanıcılar bu yöntemi kullanarak erişimi kısıtlayamaz. Sysadmin, dbcreator rolü gibi.

Yöntem 3 : Tabloya Instead Of Trigger tanımlaması yapılması

Kullanıcılar tarafından veri manipülasyonunu kısıtlamak için tabloya İnstead Of Trigger tanımlaması yapılabilir. Örneği aşağıdaki gibidir.

Yöntem3 için yeni tablo oluşturulur.

CREATE TABLE FinansalHedefler2019_Yontem3
(
ID int IDENTITY(1,1),
YearVal int,
QuarterVal int,
TargetVal int
)

Örnek kayıtlar eklenir.

INSERT FinansalHedefler2019_Yontem3 VALUES
(2019,1,1800),
(2019,2,3500),
(2019,3,1200),
(2019,4,2540),
(2019,5,690),
(2019,6,2420),
(2019,7,4333),
(2019,8,312)

Instead Of trigger tanımlaması yapılır.

CREATE TRIGGER trg_FinansalHedefler2019_Yontem3
ON FinansalHedefler2019_Yontem3
INSTEAD OF INSERT,UPDATE,DELETE
AS
BEGIN
RAISERROR (‘Bu tablo sadece okunabilir, herhangi bir Insert,Update,Delete işlemi uygulanamaz!’,16,1)
Rollback;
END

Yeni Kayıtlar eklenir.

INSERT into FinansalHedefler2019_Yontem3 VALUES (2019,9,5541)

Hata mesajımız :

Resim-5

Artıları

  1. Her kullanıcı veya rol için ayrıcalıklara gerek yok

Eksileri

  1. Bir tetikleyici / trigger kullanmanın ek yükü

İhtiyaç duyulan sadece okunabilir tabloyu (Read-Only tablo – Table ) oluşturmayı bu yazımızda incelemiş olduk.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org 

TAGs: , , Server,

Yorum Yap

Yazar Hakkında

Milenyumdan beri ilginç bir merak duygusu ile başlayan bilgisayar ve teknoloji dünyası merakı sayesinde eğitim yaşantımı doğup büyüdüğüm Düzce'de geçirdim. Sonrasında Düzce'nin kendimi geliştirmek adına yeterli imkanlara sahip olmadığından İstanbul'a gelip Bilge Adam Eğitim Kurumlarından Yazılım ve Veritabanı eğitimi aldım. Eğitimimi tamamlarken çeşitli Windows ve Web uygulamaları geliştirdim. Sırası ile Sentez Yazılım, Nebim Yazılım, Ciceksepeti, Doğan Holding, Kariyer.Net, TurkNet gibi firmalarında Yönetici / Müdür pozisyonlarında farklı ünvanlarda ( Yazılım Geliştirici / Raporlama ve Veritabanı Yöneticisi gibi) görev aldım. Şimdilerde ise DMC Bilgi Teknolojileri firmasının Kurucu Ortaklığını ve Veritabanı Danışmalığı Hizmeti vermekteyim.

Yorum Yap