SlideShare a Scribd company logo
1 of 46
İZİNLERİN(PERMISSIONS) YÖNETİMİ:
Veri tabanı içindeki veri ve nesnelere erişebilmek için mutlaka gerekli izinlere
sahip olmak gerekir.
SQL Server Management Studio içinden yapılacağı gibi GRANT, REVOKE
veya DENY ifadeleri ile de gerçekleştirilebilir.
Etki alanı eski versiyonlarda olduğu gibidir.
Yani;
*** Verilen bir izin, ait olduğu yapının tüm üyeleri için geçerli olur.
*** Verilen bir kısıtlama, yine tüm üyelere etki eder.
*** DENY izni, GRANT iznine baskındır. Örneğin, bir kullanıcıya bir tablo için
SELECT hakkı verilmiş ise ancak üye olduğu bir role'den dolayı aynı tablo için DENY
hakkı da varsa, geçerli olan DENY hakkıdır.
*** Bazı izinler yukarıdan aşağı doğru miras olarak geçer.
SERVER PFRMISSION:
Direkt Server yapısı üzerinde uygulanacak izinlerdir. Örneğin, veri tabanı
oluşturmak, SQL Server özelliklerini değiştirmek gibi...
SQL Server Management Studio kullanarak bu izin yapısını gerçekleştirmek
için;
1) Security klasörü altındaki Logins klasörü içinde hesaplar bulunmaktadır. İzin
verilecek hesap üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır.
2) Select a page kısmından Securables seçildikten sonra sag taraftaki Search
butonuna tıklanır. Gelen Add Objects iletişim kutusundan The server... seçeneği ile
server seçilerek OK butonuna basılır.
3) Permissions for.... Kısımından bu hesabın server genelinde sahip olacağı
izinler ve kısıtlamalar seçilerek OK butonuna basılır.
Transact-SQL ifadesi ile yetkilendirmek ise aşağıdaki gibidir. Bu yazılım
mutlaka master veri tabanı aktif iken yazılmalıdır.
GRANT { server_permission [ ,...n]}
TO lagin[,...n]
[ WITH GRANT OPTION ]
[ AS { group / role} ]
Örneğin;
USE master
GRANT ALTER ANY DATABASE TO [fb1inan]
Server-scope içindeki securables; HTTP endpoints ve certificate gibi
nesneler içerir.
Server-scope içindeki securables üzerinde GRANT izini vermek için kullanılan
yazılım şekli, aşağıdaki gibidir.
GRANT { securable_permission [ ,...n]}
ON securable_type:: securable_name
TO login[,...n]
[ WITH GRANT OPTION ]
[ AS { group I role} ]
Mutlaka master veri tabanı aktif iken yazılmalıdır.
DATABASE PERMISSION:
Veri tabanı içindeki nesnelere erişim için ve burada yapılacak görevler için sahip
olması gereken izinleri içerir.
SQL Server ile bağlantı gerçekleştikten sonra, burada bulunan veri tabanları
üzerinde işlem yapmak için gerekli izinlerin verilmesi gerekir. Burada
yapılacak.işlemler için gerekli izinlerin olup- olmadığı Master veri tabanı içindeki
sysusers sistem tablosundan kontrol edilir. Bu kısımda, bu izinlerin nasıl verileceğini
inceleyeceğiz.
use ogun3
SELECT * FROM sys.sysusers
Bu izinler; SQL Server Management Studio içinden veya Transact SQL
ifadeleri ile verilebilir.
SOL Server Management Studio içinden bu izinleri ayarlamak için;
1) Databases klasörünü açarak, izin yönetimi yapacağımız veri tabanı üzerinde
sağ tuşa basıp Properties seçeneğine tıklayalım.
2) Permission sayfasına geçilerek Permissions for. izinler verilir (Grant) veya
kısıtlanır(Deny). OK ile onaylanarak devreye sokulur.
Aynı işlemin Transact-SQL ile yapılması durumunda kullanılacak biçim
aşağıdaki gibidir.
GRANT { database_permission [ ,...n ]}
TO security_account [,...n]
[ WITH GRANT OPTION ]
[AS { group / role} ]
Örneğin;
USE ogun3
GRANT ALTER USER TO dogan
Yukarıdaki örnekte ogun3 veri tabanı içinde dogan isimli hesaba herhangi bir
kullanıcı hesabı için her türlü değişiklik hakkı verilmektedir.
DATABASE-SCOPE SECURABLE PERMİSSİON:
Database-scope içindeki securables; nesneleri içerir. Bu nesneler users,
schemas, assemblies ve service broker nesneleri olabilir.
Bunu Management Studio içinden yapmak için;
1) Server, Databases veya nesne tipi klasörü açılarak altındaki özel nesne
üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır.
2) Permissions sayfasına geçilerek Permissions for <object>
kısmından gerekli izin atamaları yapılır.
Transact-SQL yazılım biçimi ise şöyledir;
GRANT {database_permission [ , ...n]}
ON security_type : : securable_name
TO security_account [ ,...n ]
[WITH GRANT OPTION]
[AS {group / role} ]
Aşağıdaki ifade ile ogun3 veri tabanında bulunan mudur şeması için dogan
hesabında SELECT hakkı veriyoruz.
Use ogun3
GRANT SELECT
ON SCHEMA : : mudur TO dogan
SCHEMA-SCOPE SECURABLE PERMISSION:
Veri tabanı scope'ları içindeki securables nesneler; table, view, stored
procedure ve type.
Bunun Management Studio içinden yapılması;
1)Server, Databases veya nesne tipi klasörü açılarak altındaki özel
nesne üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır.
2)Permissions sayfasına geçilerek Permissions for<object>
kısmından gerekli izin atamaları yapılır.
Transact-SQL yazılım biçimi ise şöyledir;
GRANT {type_permission [ ,...n]}
ON TYPE :: type_name
TO security_account[ ,...n]
[WITH GRANT OPTION]
[AS {group | role}]
Aşağıda bu örneklenmiştir;
USE ogun3,
GRANT EXECUTE
ON TYPE :: adrestip1
TO gorkem
Aşağıdaki yazılım ile mudur şemasının personel tablosu üzerinde SELECT
hakkı alması görülmektedir.
USE ogun3,
GRANT EXECUTE
ON mudurpersonel2
TO dogan
UYGULAMA :
1) ogun3 veri tabanını altındaki Security klasörü altındaki Users klasörü
altında bulunan dogan isimli kullanıcı adı üzerinde sağ tuşa basarak Properties
seçeneğine tıklayalım.
2) Database role membership kısmından db_datareader kutucuğunu
doldurarak OK butonuna basalım.
Bu izin ile dogan isimli kullanıcının ogun3 isimli veri tabanı içindeki tüm
kayıtları görme hakkı veriyoruz. Ancak bunun dışında bir hakkı yoktur. Yani ogun3
veri tabanı içinde herhangi bir nesne içindeki verileri silemez, değiştiremez ve yeni bir
kayıt ekleyemez. Bunları yapması için listedeki diğer izinlerin kullanılması gerekir.
3) Database Engine seçeneğine tıklayalım.
4) Server name kısmından SQL Server adını seçelim. Authentication
kısmından SQL Server Authentication'ı seçerek Login kısmına oluşturduğumuz
kullanıcı adı olan dogan yazalım.
Ardından New Query seçimini dogan veri tabanı için yapalım.
5) Daha önce çalıştıramadığımız SQL ifadesini Query Editör kısmına
yazdığımızda; tüm kayıtların listelendiğini görebilirsiniz. Ancak herhangi bir tabloya
kayıt girmek istediğinizde, yine hata mesajı ile karşılaşırsınız.
NESNE BAZLI İZİNLER:
Buraya kadar izlediğimiz izinler dışında, bir nesneye özel izin ve kısıtlamalar
koyabiliriz. Hatta biraz daha ileriye giderek, nesne içinde bulunan sütun temelli izinler
oluşturabiliriz. Burada oluşturulan izinler; diğer tüm güvenlik mekanizmalarının
üzerindedir. Yani en baskın olan izindir.
UYGULAMA:
1) OZATA kullanıcısı ile SQL Server'a bağlanalım.
2) ogun3 veri tabanı altında bulunan, prestige tablosu üzerinde sağ tuşa
basarak, Properties seçeneğine tıklayalım.
3) Gelen ekrandan Permissions butonuna tıklayalım.
4) Search butonuna basarak dogan isimli kullanıcımızı ekleyelim. Ardından
izinleri şekildeki gibi yapılandıralım. Burada sadece bu tablo için Insert hakkı yererek;
yeni kayıt eklenilecek olan kullanıcıya ayrıca değişiklik yapması için Update
kutucuğunu doldurduk. Üst raftan gelecek olası bir silme tehlikesine karşında Deny
altındaki Delete kutucuğunu doldurduk.
5) Değişiklik yapmasına izin verdik de, bu değişikliği de sınırlayabiliriz. Bunun
için Update butonu seçili iken Column Permissions butonuna tıklayalım. Gelen
sütun izinleri penceresinde aşağıdaki kutucukları dolduralım. Böylelikle dogan isimli
kullanıcıya sadece fiyat değişikliği izini verdik. Eğer kutulardan herhangi birini boş
bırakırsak, yukarıdan gelen izinler geçerli olur.
6) dogan isimli kullanıcı adı ile SQL Server'a bağlanalım. Ardından Object
Explorer'ı dogan isimli kullanıcı için bağlayalım.
7) Object Explorer kısmından prestige tablosunu açalım. Bu işlemin başarı ile
gerçekleştiğini göreceksiniz. Yeni bir kayıt girelim. Burada da bir sorun olmayacaktır.
8) Var olan bir kayıdın fiyat sütununu değiştirmeye kalktığınızda da hata mesajı
karşılaşmayacaksınız.
9) Ancak var olan bir kayıdın fiyat sütunu dışında bir sütununu değiştirmek
istediğinizde veya bir satırı silmek istediğinizde; size bunu yapamayacağınızı bildiren
mesaj ile karşılaşacaksınız.
10) Tekrar sa isimli kullanıcı ile bağlanalım.
ROLES:
İzinleri tek tek kullanıcılara vermek bazı durumlarda büyük karmaşıklığa yol
açar. Onun için her zaman gruplara izin vermek doğru bir çözüm olacaktır. Aynı yetki
içinde bulunacak kullanıcıları ilk önce bir gruba atamak, ardından bu gruba gerekli
izin ataması yapmak gerekir. İşte SQL Server içindeki bu grup yapısına Role adı
veriyoruz.
Dört çeşit Role vardır;
*** Hazır Server Role.
*** Hazır Database Role.
*** Kullanıcı Tanımlı Role.
*** Application Role.
Şimdi bu rolleri tek tek inceleyelim.
HAZIR SERVER ROLE:
Bu roller, Server düzeyli izinlerin belirlendiği rollerdir. Bu alana ulaşmak için
Security klasörü altındaki Server Roles seçeneğine tıklamak yeterlidir.
Birer cümle ile açıklayacak olursak;
Rol İzin
bulkadmin BULK INSERT komutlarını çalıştırır.
dbcreator Veri tabanı oluşturur ve düzenler.
diskadmin Disk dosyalarını yönetir.
processadmin SQL Server işlem kademelerini yönetir.
securıtyadmin Veri tabanı izinlerini düzenler ve kullanımları izler.
serveradmin Server ayarlarını yapar.
setupadmin Replikasyon kurulumu yapar.
sysadmin Her şeyi yapar. En yetkili roldür. Varsayılan olarak
sistem yöneticisi bu grubun üyesidir.
Bir kullanıcıyı bu gruba üye yapmak için role üzerinde sağ tuşa basılarak
Propertles seçeneğine girilir. Add butonu kullanılarak üye eklenir.
HAZIR DATABASE ROLE:
Her veri tabanı için ayrı olarak yapılandırılan rol şeklidir. Ulaşmak için, veri
tabanı altındaki Roles seçeneğine tıklamak yeterlidir.
Rol İzin
db_accessadmin Veri tabanına kullanıcı, grup,
rol ekler veya kaldırır.
db_backupoperator Veri tabanının yedeğini alır.
db_datareader Herhangi bir tablodan veri okur.
db_datawriter Tabloların içindeki verilere ekleme
yapar, siler, değiştirir.
db_ddladmin Veri tabanına nesneleri ekler, siler,
değiştirir.
db_denydatareader Herhangi bir tablodan veri
okuyamaz.
db_denydatawriter Herhangi bir tabloda değişiklik
yapamaz.
db_owner Veri tabanıyla ilgili herhangi bir
aktiviteyi gerçekleştirir.
db_scurityadmin Nesnelerin izinlerini düzenler.
public Bir veri tabanı içindeki kullanıcılar
için, tüm yerleşik izinleridüzenler.
Bir kullanıcıyı bir hazır veri tabanı grubuna dahil etmek için üzerinde sağ tuşa
basılarak Properties seçeneğine tıklanır.
Gelen ekrandan kullanıcı; Add butonu kullanılarak bu gruba dahil edilir.
Her iki yapı için de üyelik, kullanıcının ilk oluşumu sırasında da
belirlenebilir.
KULLANICI TANIMLI ROLE:
Sabit roller dışında, istersek özel roller de tanımlayabiliriz. Bunun için; veri
tabanı altında bulunan Roles nesnesini kullanırız. Bu kendi oluşturduğumuz gruba
üye veya başka bir grup ekleyebiliriz.
Şimdi bir örnek ile bunu açıklayalım.
1) ogun3 veri tabanı altında bulunan Security/ Roles/ Database Roles klasörü
üzerinde sağ tuşa basarak, New Database Role... seçeneğine tıklayalım.
2) Gelen ekranın Role name kısmına; vermek istediğimiz ismi yazalım ve Add
butonunu kullanarak, üye etmek istediğimiz kullanıcıları ekleyelim. Yine buradan
sahiplik yapacak şemalar belirlenebilir, izin atamaları için de Securables sayfası
kullanılabilir.
APPLICATION ROLE:
Diğer bir rol seçimi de Application Role (Uygulama rolü)' dur. Bu yapıda
oluşturulan rol'e herhangi bir kullanıcı dahil edilmez. Bunun yerine, bir şifre
belirlenerek, kod kısmında sp_setapprole sistem stored procedure'ö çalıştırılıp, rolün
uygulanması sağlanır. Bu rol ile bir kez bağlandıktan sonra başka bir işlem yapmak
için, mutlaka bağlantıyı kesmek gerekir. Oturum süresince aktif kalır. Daha çok
sistem dışı kullanıcıların sadece belli nesnelere erişmesi amacı ile kullanılabilir.
UYGULAMA:
1) ogun3 veri tabanı altında bulunan Securitry Roles Application Roles
klasörü üzerinde sağ tuşa basarak New Application Role... seçeneğine tıklayalım.
2) Role name kısmına rol için vereceğimiz ismi yazalım. Örneğimizde federer
adı verdik. Ardından Password kısmına şifremizi yazalım. Biz örneğimizde 1 yazdık.
3) Securables sayfasına geçerek Search butonuna tıklayalım. Gelen iletişim
kutusundan All objects of the types seçeneğini işaretleyip OK butonuna basınca;
aşağıdaki şekil karşımıza gelir.
Buradan Tables kutusunu doldurup OK butonuna bastığımızda tablolar
aşağıdaki gibi karşımıza gelecektir. Prestige tablosunu seçerek Grant kısmından
Select izini karşısındaki kutuyu dolduralım. Onaylayarak, iletişim kutularını kapatalım.
4) SOL Server Ouery Editörü açarak aşağıdaki kodu yazalım ve F5 ile
çalıştıralım ve tüm kay.tların geldiğini gözlemleyelim.
use ogun3
exec sp_setapprole 'federer','1'
select * from prestige
CERTIFICATES:
SQL Server tarafından kullanılan dijital sertifikalar, SSL bağlantılar
oluşturmak ve Service Broker'lar ile birarada anılırlar.
SQL Server, X.509v3-compliant türü sertifikalar oluşturabilir.
iki iletişim hattı arasında hareket eden mesajların şifrelenmesi ve/veya kimlik
denetimine tabii tutulması için dijital sertifikalar kullanılabilir. Mesaj ile birlikte bu
mesajın şifrelenmesi ve çözülmesi için gerekli anahtarları bünyesinde bulundurabilir.
Public ve Private olmak üzere iki anahtar çifti temel yapısıdır.
Public parçası seninle ilişki kuracak herhangi bir kimseye verilebilirken,
Private parçası özel olmalı ve sadece sende bulunmalıdır.
Ortak sertifika yayımlayıcılar ve sertifika server'lar yaygın olarak
kullanılan yapılardır.
Not: Sertifikalar ile ilgili geniş bilgiyi Windows 2003- 2008 Server
kitabımızda bulabilirsiniz.
SOL SERVER SERTİFİKA KULLANIMI:
SQL Server; kimlik denetimi ve şifreleme amaçlı sertifika kullanımına destek
verir. Bu sayede web senkronizasyonu için replikasyon yapılarında güvenlik
sağlar.
SQL Server bünyesinde sertifika oluşturup, tutabileceğimizden bir nevi sertifika
sunucusu (Certificates Server) olarak davranır.
Bir sertifika oluşturduğumuz zaman, aktif veri tabanı içinde tutulur. Bu yüzden
veri tabanını başka bir yere taşıdığımız zaman bünyesindeki sertifikalar da beraber
taşınır.
İlişki içinde olan iki servis arasında kimlik denetimi ve güvenlik için Service
Broker kullanılabilir. Aynı zamanda tam güvenlik yapısı için kullanılır ki uzaktaki
kullanıcılar arasındaki mesajların şifrelenmesini sağlar.
Transact-SOL ifadeleri kullanılarak, bir sertifika oluşturulabilir. Bunun vanısıra
başka bir sertifika server yapısına dahil edilebileceği gibi, var olan bir sertifika başka
bir ortama yollanabilir.
Aşağıda genel yazılım biçimi görünmektedir;
CBEATE CERTIFICATE sertifika_ad [AUTHORIZATION kullanıcı_ad]
{FROM < sertifika_kaynağı > | < sertifika_seçenekleri > }
[ACTIVE FOR BEGIN_DIALOG = { ON | OFF} ]
<sertifika__kaynağı> ::=
ASSEMBLY assembly_name
|{
[ EXECUTABLE ] FILE = 'dosya_yolu'
[ WITH PRİVATE KEY { <private_key_seçenekleri> ) ]
}
<sertifika_seçenekleri > ::=
[ENCRYPTION BY PASSVVORD = 'passvrord']
WITH SUBJECT = 'certificate_adı'
[, <tarih seçenekleri> [ ,...n ] ]
<private_key_seçenekleri> ::=
FİLE = 'private_key_yolu'
[, DECRYPTION BY PASSVVORD = 'password' ]
[, ENCRYPTION BY PASSVVORD = 'passvvord' ]
<tarih seçenekleri> ::=
START_DATE = 'mm/dd/yyyy' | EXPIRY_DATE = 'mm/dd/yyyy'
Aşağıdaki örnek göksel veri tabanı için nasıl sertifika oluşturulacağını
göstermektedir;
USE ogun3
CREATE CERTIFICATE goksertifika
ENCRYPTION BY PASSMORD = 'F@ner1907'
WITH SUBJECT = 'oguneaitsertifika',
EXPIRY_DATE = '12/21/2012';
Aşağıdaki yazılım ise sertifikayı oluşturur ve Service Broker ile başlatır.
USE ogun3
CREATE CERTIFICATE goksertifİka2
ENCRYPTION BY PASSWORD = 'F@ner1907'
WITH SUBJECT = 'oguneaitsertifika2'
ACTIVE FOR BEGIN_DIALOG = ON
ALTER CERTIFICATE ifadesi ile var olan bir sertifika üzerinde değişiklik
yapılabilirken, BACKUP CERTIFICATE ifadesi ile var olan bir sertifikayı bir dosya
olarak istediğimiz bir ortama yollayabiliriz.
Aşağıdaki yazılımda C: sürücüsüne sertifika yollanmıştır.
BACKUP CERTIFICATE goksertifika TO FILE = 'c:acil.cer'
Silmek için ise DROP CERTIFICATE ifadesi kullanılır.
DROP CERTIFICATE goksertifika
STORED PROCEDURE ve VIEW İZİNLERİ:
Her ne kadar daha Stored Procedure ve View yapılarını işlemiş olsak da, bu
yapıların da güvenlik mekanizmalarına değinelim. Tablolar gibi, Stored Procedure
ve View nesnelerine de izin uygulanabilir. Genelde bu izinlere tabii olacak objeler
hazırlandığı için ve son kullanıcı; içindeki komutları göremeyeceği için, Public tabanlı
izinler vermek daha mantıklıdır. Aşağıdaki örneğimiz, bu iki yapıya ait izinleri
içermektedir.
UYGULAMA:
1) SQL Server içinde son isimli yeni bir Login oluşturarak, ogun3 veri tabanı
altındaki Users nesnesine ekleyelim.
2) ogun veri tabanı altındaki Views nesnesi üzerinde sağ tuşa basarak, New
View seçeneğine tıklayalım.
3)Gelen ekranda prestige tablosunu seçerek Add butonuna basalım.
Sonra Close butonu ile bu ekranı kapatalım.
4) Eklenen prestige tablosunda ilk iki kutuyu dolduralım ve
prestigemini ismi ile kaydedelim kapatalım.
5) Query Editör içine aşağıdaki kodu yazarak çalıştıralım. Başarılı oluşum
mesajını alınca Stored Procedure oluşmuş demektir.
CREATE PROCEDURE nadal AS
Select * from prestige
GO
6) SQL Server Query Editor'e son isimli kullanıcı ile bağlanarak, aşağıdaki
kodları yazalım.
use ogun3
select * from prestige_mini
use ogun3
exec nadal
Her iki komutun da çalışmadığını göreceksiniz. Çünkü son isimli kullanıcının
burada bir yetkisi yok. O zaman herkesin, dolayısı ile son isimli kullanıcının da bunu
çalıştırması için; "Public" rolüne view için select ve Stored Procedure için exec
hakkı vermek gerekiyor. Bu, SQL Server Management Studio içinden yapılabilir.
Ancak bu sefer Transact- SQL ifadesi ile yapalım.
7) "sa" kullanıcısı ile SQL Server Query Editör'ü açalım.
8) Aşağıdaki ifadeleri yazalım.
grant select on prestige_mini to son
grant exec on nadal to son
9) Tekrar "son" isimli kullanıcı ile logon olduğumuz zaman 6. adımdaki
komutları çalıştırdığımızda bu işlemin, başarı ile gerçekleştiğini izleyeceğiz.
UYGULAMA:
1) ogun3 veri tabanında beykoz isimli yeni bir tabloyu şekildeki gibi
tasarlayarak örnek kayıtlar girelim.
2) Yine aynı yerde sariyer isimli bir tasarlayarak örnek verileri içine
girelim.
3) Şimdi Security dizinin içindeki Logins kısmında alit, belit, selit isimli üç
adet yeni SQL Login hesabı oluşturalım.
4) SQL Query Editör içine aşağıdaki SQL komutlarını yazıp, F5 ile çalıştıralım.
use ogun3
select * from beykoz
Aynı işlemi sariyer tablosu için de yaptığınızda, hiçbir sorun olmadan eriştiğinizi
görebilirsiniz.
5) İşlemi, grafiksel olarak test etmek için sıra ile beykoz ve sariyer tablosu
üzerinde sağ tuşa basarak Edit Top... seçeneği ile yapalım.
Her iki işlemde de hiçbir sorun olmadan verileri görebiliyoruz.
6) Connect/ Database Engine seçeneğine tıklayalım.
7) Gelen ekranda alit ile sisteme girelim.
8) 4. adımda yaptıklarımızı tekrarlayalım. Ne Oldu? (Eğer SQL Query Editör
açılırken, kullanıcı adını sorarsa alit yazmayı unutmayınız!)
Evet! SQL Server'ı açma yetkimiz var ancak bu, veri tabanı için bir izin
olmadığından, her iki durumda da "alit" isimli kullanıcının bu veri tabanı için yetkili bir
kullanıcı olmadığına dair mesaj ile karşılaşacaksınız.
9) O zaman bizim alit ve belit isimli kullanıcıları; bu veri tabanı için yetkili
kullanıcı yapalım. Bunun için tekrar, sa isimli kullanıcı ile SQL Server'a
bağlanalım.
10) ogun3 isimli veri tabanının altındaki Users nesnesi üzerinde, sağ tuşa
basarak; New User seçeneğine tıklayalım. Sıra ile hem alit hem de belit isimli
kullanıcıları ekleyelim
11) Tekrar "alit" ile SQL Server'a bağlanalım.
12) 4. adımda yaptıklarımızı tekrarlayalım. Ne Oldu?
13) Yine beceremedik ve bu sefer de veri tabanı nesnesi için gerekli izinin
olmadığını belirten mesaj ile karşılaştık. OFFFF nasıl olacak bakalım. :)
14) Tekrar "sa" ile SQL Server'a bağlanalım.
15) ogun3 veri tabanı altında bulunan Roles Database Roles kısmını seçerek;
db_datareader üzerinde sağ tuşa basıp, Properties seçeneğine tıklayalım.
16) Gelen ekranda Add butonunu kullanarak "alit" ve "belit" isimli kullanıcıları
ekleyelim ve OK butonu ile onaylayalım.
17) Yine Roles kısmında bulunan db_datawriter'ın üzerinde sağ tuşa basıp,
Properties seçeneğine tıklayalım ve Add butonunu kullanarak sadece "belit'i
ekleyelim .
18) İlk önce alit" isimli kullanıcı ile SQL Server'a bağlanalım.
19) 4. adımda yaptıklarımızı tekrarlayalım. Artık hem sariyer, hem de personel
tablosu içindeki tüm kayıtları görebiliyoruz. Demek ki buradan çıkacak sonuç:
db_datareader yerleşik rolüne bir kullanıcıyı üye yaptığımız zaman, o veri tabanı
içindeki tüm tabloları okuma hakkına sahip oluyor.
20) Şimdi sariyer veya beykoz tablosunu açarak içine; yeni kayıt
girmeye çalışalım. Evet, şimdi de bunu yapamıyoruz! Çünkü alit sadece
db_datareader hakkına sahip.
21) belit isimli kullanıcı ile SQL Server'a logon olalım.
22) 4. ve 20. adımdaki işlemleri yapmaya çalıştığımızda, hepsinin de
gerçekleştiğini göreceğiz. Çünkü "belit" hem db_datareader, hem de db_datawriter
rollerine üye olduğu için, okuma ve yazma hakkına sahip olmaktadır.
AUDITING GÜVENLİK:
Auditing ile SQL Server'ın bir instance'ının veya SQL Server'ın veri tabanının
sistem üzerinde meydana gelen olaylarını izleyebiliriz. SQL Server için birkaç
yöntem mümkündür. SQL Server 2008 içinde, SQL Server Auditing yapısı ile
otomatik izleme gerçekleştirebiliriz.
SOL SERVER PROFILER:
Microsoft SQL Server Profiler; Database Engine veya Analysis Services
yapılarını izlemek için kullanılan grafiksel bir ara yüzdür.
Kullanımı;
*** İlk olarak SQL Server izlemesi için gerekli tanımlama, SQL Server Profile
kullanılarak yapılır.
*** SQL Server Profile, bu verileri kaydetmeye başlar.
*** ilgilendiğimiz bilgileri izleyebiliriz. Bu yapıya yardımcı olacak ise SQL Trace
yapısıdır.
*** Olaylarda meydana gelen kilitlenmelerin nasıl olduğunu grafiksel olarak
izleyebilir. Sonuçları XML olarak kaydedebilir.
*** Tüm sonuçları XML formatına kaydedeceği gibi, ANSI, Unicode ve OEM
olarak da kaydedebilir.
*** İzlemede seçilen anahtara göre gruplama yapabilir. Böylelikle izlenen
olayların basitçe kaç kez meydana geldiği görülebilir.
XML; her ortama rahatlıkla aktarılacak olan bir biçime sahip olduğu için, izlenen
olay bilgilerini XML biçiminde kaydetmek doğru bir seçim olacaktır. Ardından bu
veriler; analiz için özel bir uygulama yazılabileceği Excel programı gibi yaygın
programlar bünyesine çağrılarak da kullanılabilir.
Nasıl yapılır?
1) SQL Server 2008 programı içinden Tools menüsünden SQL Server Profiler
seçeneğine tıklanır.
2) File menüsünden New Trace seçilir.
3) Gelen iletişim kutusunda izlenecek yer tespit edilerek Connect butonuna
basılır. Bu Database Engine veya Analysis Services tipli olabilir.
4) General kısmından Trace name kısmına bir isim verilir. Ardından Event
Selection sekmesine geçilerek olaylar belirlenir ve Run butonu ile izleme başlatılır.
5) Yapılan olaylar istediğiniz süre zarfında, şekildeki gibi kaydolur. Bunun için
SQL Server içinde bir kaç işlem yapmanız, olayların artmasını gözlemeniz açısından
yararlı olacaktır.
6) Şekildeki gibi, izleme devam eder.
7) File menüsünden Stop Trace seçeneğine tıklanarak izleme işlemi
durdurulur.
8) XML olarak kaydetmek için File/ Save As altındaki Trace XML File...
seçeneğine tıklanır.
9) isim verilerek, istenilen yere kaydedilir.
10) Excel programına getirmek için, bu program açılarak File/ Öpen
seçeneğinden kaydedilmiş dosya seçilir. Gelen iletişim kutularından değişiklik
yapılmadan onaylanır. Sonunda Excel süzme yapısının da içinde bulunduğu tüm
bilgiler; şekildeki gibi karşımıza gelir. Burada olayları bulmak, oldukça pratik ve basit
olacaktır.
DDL TRİGGER:
Veri tabanı içindeki nesne hareketlerini bildirmek için kullanılır. Bildiğimiz klasik
Trigger gibi değildir, sadece verilerde bir değişiklik olduğu zaman bunları bize sunar.
Örneğin; bir tablonun oluşturulması veya silinmesi gibi işlemleri izlememizi sağlar.
SQL Server yapısını izlemek için, oldukça kullanışlı bir araçtır.
Kullanılan DDL ifadelerinde CREATE TABLE, ALTER TABLE, DROP TABLE
veya UPDATE STATICS devreye giren DDL Trigger ile yönetimsel işlerde takip
edilebilir.
Meydana gelen olaylar istenilirse ROOLBACK TRANSACTION ifadesi ile geri
alınabilir.
CREATE TRİGGER:
Bir DDL Trigger oluşturmak için CREATE TRİGGER ifadesi kullanılır. Trigger
oluşturulurken ilk yapılması gereken işlem, DDL Trigger yapısından
bulunacak alan ve tip belirtilmelidir.
Aşağıdaki örnek kod; bir kullanıcının veri tabanı üzerinde tablo oluşturmasını
izleyen bir DDL Trigger oluşturur. Bu yapıda ON DATABASE yerine, duruma göre
ON ALL SERVER ifadesi de kullanılabilir.
CREATE TRİGGER tabloolustur
ON DATABASE
FOR CREATE_TABLE
AS
...
Veri tabanı içinde herhangi bir DDL işlemini izlemek için ise,
DDL_DATABASE_LEVEL_EVENTS ifadesinden yararlanılabilir.
EVENTDATA:
Standart Trigger; veriler üzerinde işlem yapılmak için otomatik olarak inserted
ve deleted tablolarını oluşturur. Ancak DDL Trigger bu tabloları oluşturmaz. Bunun
yerine, bilgilere ulaşmak için eventdata fonksiyonu kullanılır.
Bu fonksiyon EVENT_INSTANCE_XML belgesi döndürür. Bu XML
dosyası içinde aşağıdaki elementler bulunur;
<PostTime>
Trigger'ın işlediği zaman.
<SPID>
Veri tabanı işlem numarası.
<EventType>
Bu Trigger işleminde uygulanan olay
Ayrıca uygulanan işleme göre birçok element içerir.
Eventdata fonksiyonu ile dönen değerleri yakalamak için query ifadesi
kullanılır.
Bir uygulama ile görelim;
UYGULAMA:
1) SQL Server içinden Ouery kısmına geçelim. Ardından aşağıdaki komutu
yazarak çalıştıralım.
CREATE TRİGGER tabloolusturr
ON DATABASE
FOR CREATE_TABLE
AS
Declare @verial XML
DECLARE @veritaban nvarchar(100)
SET @verial=eventdata()
SET @verial=Convert(nvarchar(100)),
@verial.query('data(//DatabaseName)'))
Select @verial, @veritaban
2) Test etmek için aşağıdaki ifadeyi yazalım;
create table denek
(
sno int,
ad varchar(10)
)
3) Çalıştırdıktan sonra aşağıdaki görüntü karşımıza gelir.
Burada tüm bilgilerin bulunduğu XML yapısı ve oluşturulan veri tabanı adı
görünmektedir.
XML yapısına tıkladığımızda tüm bilgiler şekildeki gibi karşımıza gelir.
4) Trigger'ı silmek için ise DROP ifadesinden yararlanılır.
DROP TRIGGER tabloolusturur
ON DATABASE
Aşağıdaki ifadeler ile Trigger'lar hakkında genel bilgi edinilebilir;
SELECT name FROM sys.triggers
SELECT definition FROM sys.sglmodules
Şimdi bu bilgileri bir tablo içinde depolamak için bir uygulama daha yapalım.
Burada da bilgileri value ile yakalayalım. Burada tüm DDL ifadeleri için genel bir
tanımlama olan
DDL_DATABASEJ-EVELJEVENTS iadesinden yararlanacağız.
UYGULAMA:
1) SQL Server içinden Query kısmına aşağıdaki ifadeleri yazarak, olay
günlüğünü tutacağımız tabloyu oluşturalım.
CREATE TABLE kaydet_trig
(zaman datetinte,
kullanan nvarchar(100),
olay nvarchar(100),
komut nvarchar(2000));
2) Olayları izlemek için aşağıdaki kodu yazıp çalıştırarak, Trigger'ı oluşturalım.
CREATE TRIGGER izle
ON DATABASE
FOR DLL_DATABASE_LEVEL_EVENTS
AS
DECLAPE @verial XML
SET @verial = EVENTDATA()
INSERT kaydet_trig (zaman, kullanan, olay, komut)
VALUES (GETDATE(), CONVERT(nvarchar(100), CURRENT_USER),
@verial.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)'),
@verial.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)'));
3) Test etmek için aşağıdaki komutları yazarak çalıştıralım.
CRSATS TABLE ogun2 (ad varchar(1O))
DROP TABLE ogun2
4) Aşağıdaki komut ile kaydet_trigger içindeki kayıtları görüntüleyelim.
Select * from kaydet_trig
5) Trigger'i silelim.
Drop trigger izle
ON DATABASE
UYGULAMA:
1) Bu uygulamamızda ise veri tabanında tablo oluşumunu
engelleyeceğiz. Bunun için aşağıdaki ifadeleri Query kısmına yazalım.
CREAT TRIGGER tabloengelle
ON DATABASE
FOR CREATE_TABLE
AS
PRINT 'CREAT TABLE ifadesi kullanılmaz.'
SELECT EVENDATA().value(
*(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
'nvarchar(max)')
RAISERROR ('Bu veri tabanında Tablo Oluşturulmaz',16,1)
ROLLBACK TRANSACTION;
2) Test için aşağıdaki ifadeyi yazarak, bir tablo oluşturmaya çalışalım.
creat table denem
(
Sno int,
Ad varchar(10)
)
3) Komutu çalıştırdığımızda şekildeki gibi, işlemin gerçekleşemeyeceğini
belirten mesajlar ile karşılaşırız.
4) Aşağıdaki ifadeyi yazarak Trigger'ımızı silelim.
DROP TRIGGER tabloengelle
ON DATABASE
EVENT NOTIFICATION:
SQL Server aktivitelerini izlemek için kullanacağımız seçeneklerden biri de yeni
bir yapı olan Event Notification'dır. SQL Server performansını mümkün olduğu
kadar aza düşürerek olayları izlememize olanak tanır. Trigger gibi DDL ifadelerini
izleyeceği gibi, bunun yanı sıra veri tabanları komutlarını oluşturan DML ifadelerini de
izleyebilir. Ayrıca SQL Profil yapısındaki izlemeyi de gerçekleştirebilir.
Bu yakaladığı bilgileri Service Broker servisine yollayarak, analiz
yapılmasını sağlar.
CREATE EVFNT NOTIFICATION:
Oluşturmak için CREATE EVENT NOTIFICATION ifadesi kullanılır.
Tüm kullanım şeklini verecek olursak;
CREATE EVENT NOTIFICATION event_notification_ad
ON { SERVER | DATABASE | QUEUE kuyruk_ad}
[ WITH FANJN ]
FOR { eventjp  event_grup] [ ,...n]
TO SERVİCE 'broker_service', {'brokerjnstance' | 'current database'}
Aşağıdaki yazılım Server üzerinde uygulanan UPDATE_STATISTICS ifadesini
istatisliklog isimli Broker servisine yollar.
CREATE EVENT NOTIFICATION istatislik_guncelle
ON SERVER
FOR UPDATE_STATISTICS
TO SERVICE 'istatistiklog','current database'
Aşağıdaki yazılım ise veri tabanında meydana gelen silme olaylarını izler.
CREATE EVENT NOTIFICATION tablo_silme
ON DATABASE
FOR DROP_TABLE
TO SERVICE 'tablosillog','current database'
Genel DDL ifadeleri için FOR DDL_DATABASE_LEVEL_EVENTS ve genel
DML ifadeleri için ise FOR DML_EVENTS kullanılabilir.
EVENT NOTIFICATION İÇİN SERVİCE BROKER:
SQL Server olaylarını tutmak için oluşturulacak Service Broker servisi için en
basit yöntem Stored Procedure ile gerçekleştirilebilir. Böylelikle Event Notification
tarafından gönderilen mesajlar; bu servisin kuyruğuna takılır.
Nasıl bağlantı kurulacağını adımlayarak inceleyelim;
1) Aşağıdaki ifade ile veri tabanımız içinde Service Broker servisi aktif
hale getirilir.
ALTER DATABASE ogun3 SET ENABLE_BROKER
2) Kuyruk yapısı için aşağıdaki ifade kullanılır.
CREATE QUEUE tablosilkuyruk
3) Bu kuyruk ile ilişkili servis tanımlanır.
CREATE SERVİCE tablosillog
CM CUEUE tablosilkuyruk
{[http://schemas.microsoft.com/SQL/Notifications/PostEventNotificatio
n]}
4) Oluşturulan servis işe ilişkili Route tanımlanır.
CREATE ROUTE silyolla1
WITH SERVİCE_NAME = 'tablosillog',
ADDRESS = 'LOCAL'
5) Notification oluşturularak; servis ile ilişki kurulur.
CREATE EVENT
NOTIFICATION
tablo_silme
ON
DATABASE
FOR
DROP_TABLE
TO SERVİCE 'tablosillog', 'curren database'
6) Kaba yapısı, aşağıdaki şekilde görüntülenebilir.
Select * FROM dbo.tablosilkuyruk
UYGULAMA:
1) SQL Server içinden Query kısmına geçip, aşağıdaki ifadeleri yazalım.
ALTER DATABASE ogun3 SET ENABLE_EROKER
GO
CREATE QUEUE tablosilkuyruk33
GO
CRSATE SERVİCE tablosillog33
ON QUEUE tablosilkuyruk33
(
[http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
)
GO
CREATE ROUTE silyolla33
WITH SERVICE_NAME = ' tablosillog33 ' ,
ADDRESS = 'LOCAL'
GO
2) Oluşturacağımız Notification servis ile bu yapıyı ilişkilendirelim.
CREATS EVENT NOTİFİCATİON tablo_silme33
ON
DATABASE
FOR
DROP_TABLE
TO SERVİCE 'tablosiilog33','current database'
3) Silme işlemlerini tutacak bir tablo oluşturalım.
CREATE TABLE gunluk_yakala33
(komut NVARCHAR(1000),
Zaman NVARCHAR(24),
hostad NVARCHAR(100),
loginad NVARCHAR(100)
)
4) Bir kaç tablo oluşturarak, onları silelim.
5) Ardından Query bölümüne aşağıdaki ifadeyi yazalım. Bu ifade bir Stored
Procedure içine yazılıp; kuyruk ile ilişkilendirilebilir.
DECLARE @mesajtipal NVARCHAR(256), @mesaj XML;
RECEIVE TIP(1)
@mesajtipal = message_type_name,
@mesaj = message_body
FROM dbo.tablosilkuyruk33;
IF @@ROWCOUNT = 0
RETURN
PRINT CONVERT (NVARCHAR(1000), @mesaj)
DECLARE @cmd NVARCHAR(1000)
DECLARE @posttime NVARCHAR(24)
DECLARE @hostname NVARCHAR(100)
DECLARE @loginname NVARCHAR(100)
SET @cmd = CONVERT(NVARCHAR(100),
@mesaj.query('data(//TSQLCommand//CommandText)'))
SET @posttime = CONVERT(NVARCHAR(24),
@mesaj.query('data(//PostTime)'))
SET @hostname = HOST_NAME()
SET @loginname = SYSTEM_USER
INSERT IN TO gunluk_yakala33(komut,zaman,hostad,loginad)
VALUES(@cmd, @posttime, @hostname, @loginname)
GO
SELECT * FROM gunluk_yakala33
Görüntü, aşağıdaki gibi olur;
UYGULAMA:
1) Bu uygulamada verileri depolamak için notification yapısında kuyruk ile
ilişkilendireceğimiz bir Stored procedure kullanalım. Bunun için ilk olarak günlükleri
görüntüleyeceğimiz tabloyu gunluk_yakala4 ismi ile aşağıdaki gibi tanımlayarak,
çalıştıralım.
CREATE TABLE gunluk_yakala4
(komut XML,
zaman NVARCHARC24)
)
2) Kuyruk ile ilişkilendireceğimiz izlebak_4 isimli stored procedure'ü aşağıdaki
gibi oluşturalım.
CREATE PROCEDURE dbo.izlebak_4
AS
DECLARE @message_body XML
;WAITFOR(
RECETIVE TOP(1)
@message_body-message_body
FROM kuyruk_3
}, TIMEOUT 2000 ;
IF @@ROWCOUNT=0
RETURN
DECLARE @zaman NVARCHAR(24)
SET @zaman = CONVERT(NVARCHAR(24),
@message_body.query('data(//PostTime)'))
INSERT INTO dbo.gunluk_yakala4(komut, zaman)
VALUES {@message_body, @zaman)
GO
3) Broker servisini aktif hale getirelim.
ALTER DATABASE ogun3 SET ENABLE_BROKER
4) Aşağıdaki gibi kuyruk tanımlaması yaparken bu sefer farklı olarak
oluşturduğumuz stored procedure ile ilişkilendiriyoruz.
CREATE QUEUE kuyruk_4
WITH STATUS = ON,ACTIVATION (
PROCEDURE_NAME = dbo.izlebak_4,
MAX_QUEUE_READERS = 5,
EXECUTE AS SELF)
GO
5) Sırası ile aşağıdaki komutları da uygulayalım.
CREATE SERVİCE servis_4
ON QUEUE kuyruk_4
([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification])
GO
CREATE ROUTE Route_4
WITH SERVICE_NAME = 'servis_4',
ADDRESS = 'LOCAL'
GO
6) Servisimizle ilişkili Notification yapısını oluşturalım.
CREATE EVENT NOTIFICATION Notification_4
ON DATABASE
FOR CREATE_TABLE
TO SERVICE 'servis_4','current database'
7) Test için aşağıdaki komutları yazalım.
Create table yuk4
(ad varchar(10))
drop table yuk4
8) Aşağıdaki komutu yazarak, test edelim. Sonra da oluşturduğumuz yapıları
silelim.
Select * from gunluk_yakala4
METADATA:
SQL Server 2008 iki türlü Metadata sorgulaması yapar. Bunlar; katalog
görüntülemeler için static metadata ve dinamik görüntüleme için dynamic
metadata. Bu bilgiler direkt olarak sistem tablolarından gelir.
STATİC METADATA:
SOL Server veri tabanı nesneleri hakkında bilgi almak için kullanılır. Bu bilgiler
<Database adı>ViewsSystem Views klasöründe bulunur. Biz bu bilgileri sys
namespaces'ini kullanarak görebiliriz.
Şimdi bunları birer örnek ile inceleyelim;
Tüm ifadeleri çalıştırmak için başına Select * from koyunuz.
Örneğin: Select name from sys.databases gibi.
sys.assemblies: Veri tabanı içinde kayıtlı assembly bilgisini döndürür.
Uygulanacak veri tabanı, aktif hale getirilmelidir.
sys.databases: Server içinde kayıtlı veri tabanlarının bilgisini döndürür.
sys.database files: Bir veri tabanının; veri tabanı dosyalarının bilgisini
döndürür. Dosyaları görüntülenecek veri tabanı aktif hale getirilmelidir.
sys.linkedjogins: Bağlantılı server login'lerini döndürür. Linked Server
yapısı olmalıdır.
sys.remotejogins: Bağlantılı server'larda uzaktaki server'ı döndürür. Linked
Server yapısı olmalıdır.
sys.servers: Yine bağlantılı server ve uzak server bilgisini birarada döndürür.
sys.coİumns: Belirli bir veri tabanı içinde oluşturulmuş tüm sütunları gösterir.
Eğer sadece belli bir tablo veya view için bu bilgiyi almak isterseniz, aşağıdaki
ifadeleri yazmanız gerekir. Bu da prestige tablosunun adını, dbo ise şema
ifadesini gösterir.
SELECT * FROM sya.columns
WHERE [object_id] = (SELECT [object_id] FROM sys.tables st
JOIN sys.schamas ss ON st.schama_id = ss.schama_id
WHERE st.name='prestige' AND ss.name = 'dbo')
sys.events: Veri tabanındaki Trigger ve Notification yapılarını gösterir
sys.indexes: Veri tabanındaki index bilgileri döner.
sys.tables: Veri tabanında bulunan tablo bilgileri döner.
sys.schemas: Veri tabanındaki şema bilgileri döner.
Diğer yapıları ise deneyiniz ve sonuçlarını gözlemleyiniz;
sys.views
sys.database_permissions
sys.database_principals
sys.database_role_members
sys.configurations
DYNAMIC METADATA:
Dinamik metadata komutları; eski versiyonda DBCC ile başlayan ifadelerin
daha gelişmiş bir şekilde kullanılmasını sağlar.
Örneğin: sys.dm_db_index_physical_stats, daha genel bilgi veren DBCC
SHOVVCONTIG yerine kullanılabilir.
declare @db_id smallint
declare @object_id int
set @db_id = DB_ID(N'ogun3')
set @object_id = OBJECT_ID(N'ogun3.dbo.prestige')
select * from
sys.dm_db_index_physical_states
(@db_id, @object_id, NULL, NULL, NULL)
Diğer sorgulama komutlarını da bir tablo halinde inceleyecek olursak;
Dynamic Management View Açıklama
sys.dm_db_partition_stats Veri tabanı içinde bulunan her bir
partition için sayfa ve satır sayısı
döndürür.

More Related Content

Similar to Konu anlatımı

Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Anar Godjaev
 
Veri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirmaVeri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirmaoktaygokgol
 
Database Vault / Verinin Güvenliği
Database Vault /  Verinin GüvenliğiDatabase Vault /  Verinin Güvenliği
Database Vault / Verinin GüvenliğiAnar Godjaev
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ BGA Cyber Security
 
Veri̇ tabani ve dosya yöneti̇mi̇
Veri̇ tabani ve dosya yöneti̇mi̇Veri̇ tabani ve dosya yöneti̇mi̇
Veri̇ tabani ve dosya yöneti̇mi̇oktaygokgol
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şoktaygokgol
 
NTFS ve ÖZELLİKLERİ
NTFS ve ÖZELLİKLERİNTFS ve ÖZELLİKLERİ
NTFS ve ÖZELLİKLERİSamet Özgen
 
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdanOrneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdanAnar Godjaev
 
Webcast - Failover Cluster Architecture
Webcast - Failover Cluster Architecture Webcast - Failover Cluster Architecture
Webcast - Failover Cluster Architecture Hakan Yüksel
 
Veritabanı kurulumu (1)
Veritabanı kurulumu (1)Veritabanı kurulumu (1)
Veritabanı kurulumu (1)alinizam99
 
Temel kullanici gruplari
Temel kullanici gruplariTemel kullanici gruplari
Temel kullanici gruplarimimarsinantl
 
DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02
DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02
DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02Önder Değer
 
SharePoint 2013 Güvenlik (10/13)
SharePoint 2013 Güvenlik (10/13)SharePoint 2013 Güvenlik (10/13)
SharePoint 2013 Güvenlik (10/13)Kerem Özen
 
Sql server 2008 Express & Sql Server management Studio 2008 express Kurulumu
Sql server 2008 Express & Sql Server management Studio 2008 express KurulumuSql server 2008 Express & Sql Server management Studio 2008 express Kurulumu
Sql server 2008 Express & Sql Server management Studio 2008 express KurulumuSercan Yemeni
 
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuVeri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuoktaygokgol
 
SQL Server 2008 Express & SQL Server Management Studio Kurulumu
SQL Server 2008 Express & SQL Server Management Studio KurulumuSQL Server 2008 Express & SQL Server Management Studio Kurulumu
SQL Server 2008 Express & SQL Server Management Studio KurulumuSercan Yemeni
 

Similar to Konu anlatımı (20)

Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
 
Veri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirmaVeri̇ tabani oluşturma ve yapilandirma
Veri̇ tabani oluşturma ve yapilandirma
 
Database Vault / Verinin Güvenliği
Database Vault /  Verinin GüvenliğiDatabase Vault /  Verinin Güvenliği
Database Vault / Verinin Güvenliği
 
Konu anlatım
Konu anlatımKonu anlatım
Konu anlatım
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
 
Veri̇ tabani ve dosya yöneti̇mi̇
Veri̇ tabani ve dosya yöneti̇mi̇Veri̇ tabani ve dosya yöneti̇mi̇
Veri̇ tabani ve dosya yöneti̇mi̇
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇ş
 
NTFS ve ÖZELLİKLERİ
NTFS ve ÖZELLİKLERİNTFS ve ÖZELLİKLERİ
NTFS ve ÖZELLİKLERİ
 
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdanOrneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
Orneklere Oracle 11gR2 ve Genel Kavramlar Isimli kitabdan
 
Webcast - Failover Cluster Architecture
Webcast - Failover Cluster Architecture Webcast - Failover Cluster Architecture
Webcast - Failover Cluster Architecture
 
Veritabanı kurulumu (1)
Veritabanı kurulumu (1)Veritabanı kurulumu (1)
Veritabanı kurulumu (1)
 
Sql Injection
Sql Injection Sql Injection
Sql Injection
 
Temel kullanici gruplari
Temel kullanici gruplariTemel kullanici gruplari
Temel kullanici gruplari
 
DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02
DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02
DP:900 Azure Data Fundamentals - Azure'da ilişkisel veriler-02
 
SharePoint 2013 Güvenlik (10/13)
SharePoint 2013 Güvenlik (10/13)SharePoint 2013 Güvenlik (10/13)
SharePoint 2013 Güvenlik (10/13)
 
Database drop
Database dropDatabase drop
Database drop
 
Sql server 2008 Express & Sql Server management Studio 2008 express Kurulumu
Sql server 2008 Express & Sql Server management Studio 2008 express KurulumuSql server 2008 Express & Sql Server management Studio 2008 express Kurulumu
Sql server 2008 Express & Sql Server management Studio 2008 express Kurulumu
 
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuVeri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
 
SQL Server 2008 Express & SQL Server Management Studio Kurulumu
SQL Server 2008 Express & SQL Server Management Studio KurulumuSQL Server 2008 Express & SQL Server Management Studio Kurulumu
SQL Server 2008 Express & SQL Server Management Studio Kurulumu
 
NTFS
NTFSNTFS
NTFS
 

More from oktaygokgol

Metin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olmaMetin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olmaoktaygokgol
 
Kullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsKullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsoktaygokgol
 
kullanıcı tanımlı fonksiyonlar
kullanıcı tanımlı fonksiyonlarkullanıcı tanımlı fonksiyonlar
kullanıcı tanımlı fonksiyonlaroktaygokgol
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomrukoktaygokgol
 
8.hafta yusuf dinçer
8.hafta yusuf dinçer8.hafta yusuf dinçer
8.hafta yusuf dinçeroktaygokgol
 
Sql serverda indexkavrami
Sql serverda indexkavramiSql serverda indexkavrami
Sql serverda indexkavramioktaygokgol
 
7.hafta kadir dikmen
7.hafta kadir dikmen7.hafta kadir dikmen
7.hafta kadir dikmenoktaygokgol
 
Sql server 2012 kurulum sunu
Sql server 2012 kurulum sunuSql server 2012 kurulum sunu
Sql server 2012 kurulum sunuoktaygokgol
 

More from oktaygokgol (15)

Metin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olmaMetin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olma
 
Sunu
SunuSunu
Sunu
 
Hayrettin kunuk
Hayrettin kunukHayrettin kunuk
Hayrettin kunuk
 
Ittodev
IttodevIttodev
Ittodev
 
Kullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsKullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yons
 
kullanıcı tanımlı fonksiyonlar
kullanıcı tanımlı fonksiyonlarkullanıcı tanımlı fonksiyonlar
kullanıcı tanımlı fonksiyonlar
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomruk
 
8.hafta
8.hafta8.hafta
8.hafta
 
8.hafta yusuf dinçer
8.hafta yusuf dinçer8.hafta yusuf dinçer
8.hafta yusuf dinçer
 
Sql serverda indexkavrami
Sql serverda indexkavramiSql serverda indexkavrami
Sql serverda indexkavrami
 
7.hafta kadir dikmen
7.hafta kadir dikmen7.hafta kadir dikmen
7.hafta kadir dikmen
 
Sunu
SunuSunu
Sunu
 
Sunu
SunuSunu
Sunu
 
Sql server 2012 kurulum sunu
Sql server 2012 kurulum sunuSql server 2012 kurulum sunu
Sql server 2012 kurulum sunu
 

Konu anlatımı

  • 1. İZİNLERİN(PERMISSIONS) YÖNETİMİ: Veri tabanı içindeki veri ve nesnelere erişebilmek için mutlaka gerekli izinlere sahip olmak gerekir. SQL Server Management Studio içinden yapılacağı gibi GRANT, REVOKE veya DENY ifadeleri ile de gerçekleştirilebilir. Etki alanı eski versiyonlarda olduğu gibidir. Yani; *** Verilen bir izin, ait olduğu yapının tüm üyeleri için geçerli olur. *** Verilen bir kısıtlama, yine tüm üyelere etki eder. *** DENY izni, GRANT iznine baskındır. Örneğin, bir kullanıcıya bir tablo için SELECT hakkı verilmiş ise ancak üye olduğu bir role'den dolayı aynı tablo için DENY hakkı da varsa, geçerli olan DENY hakkıdır. *** Bazı izinler yukarıdan aşağı doğru miras olarak geçer. SERVER PFRMISSION: Direkt Server yapısı üzerinde uygulanacak izinlerdir. Örneğin, veri tabanı oluşturmak, SQL Server özelliklerini değiştirmek gibi... SQL Server Management Studio kullanarak bu izin yapısını gerçekleştirmek için; 1) Security klasörü altındaki Logins klasörü içinde hesaplar bulunmaktadır. İzin verilecek hesap üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır. 2) Select a page kısmından Securables seçildikten sonra sag taraftaki Search butonuna tıklanır. Gelen Add Objects iletişim kutusundan The server... seçeneği ile server seçilerek OK butonuna basılır. 3) Permissions for.... Kısımından bu hesabın server genelinde sahip olacağı izinler ve kısıtlamalar seçilerek OK butonuna basılır.
  • 2. Transact-SQL ifadesi ile yetkilendirmek ise aşağıdaki gibidir. Bu yazılım mutlaka master veri tabanı aktif iken yazılmalıdır. GRANT { server_permission [ ,...n]} TO lagin[,...n] [ WITH GRANT OPTION ] [ AS { group / role} ] Örneğin; USE master GRANT ALTER ANY DATABASE TO [fb1inan] Server-scope içindeki securables; HTTP endpoints ve certificate gibi nesneler içerir. Server-scope içindeki securables üzerinde GRANT izini vermek için kullanılan yazılım şekli, aşağıdaki gibidir. GRANT { securable_permission [ ,...n]} ON securable_type:: securable_name TO login[,...n] [ WITH GRANT OPTION ] [ AS { group I role} ] Mutlaka master veri tabanı aktif iken yazılmalıdır. DATABASE PERMISSION: Veri tabanı içindeki nesnelere erişim için ve burada yapılacak görevler için sahip olması gereken izinleri içerir. SQL Server ile bağlantı gerçekleştikten sonra, burada bulunan veri tabanları üzerinde işlem yapmak için gerekli izinlerin verilmesi gerekir. Burada yapılacak.işlemler için gerekli izinlerin olup- olmadığı Master veri tabanı içindeki sysusers sistem tablosundan kontrol edilir. Bu kısımda, bu izinlerin nasıl verileceğini
  • 3. inceleyeceğiz. use ogun3 SELECT * FROM sys.sysusers Bu izinler; SQL Server Management Studio içinden veya Transact SQL ifadeleri ile verilebilir. SOL Server Management Studio içinden bu izinleri ayarlamak için; 1) Databases klasörünü açarak, izin yönetimi yapacağımız veri tabanı üzerinde sağ tuşa basıp Properties seçeneğine tıklayalım. 2) Permission sayfasına geçilerek Permissions for. izinler verilir (Grant) veya kısıtlanır(Deny). OK ile onaylanarak devreye sokulur.
  • 4. Aynı işlemin Transact-SQL ile yapılması durumunda kullanılacak biçim aşağıdaki gibidir. GRANT { database_permission [ ,...n ]} TO security_account [,...n] [ WITH GRANT OPTION ] [AS { group / role} ] Örneğin; USE ogun3 GRANT ALTER USER TO dogan Yukarıdaki örnekte ogun3 veri tabanı içinde dogan isimli hesaba herhangi bir kullanıcı hesabı için her türlü değişiklik hakkı verilmektedir. DATABASE-SCOPE SECURABLE PERMİSSİON: Database-scope içindeki securables; nesneleri içerir. Bu nesneler users, schemas, assemblies ve service broker nesneleri olabilir. Bunu Management Studio içinden yapmak için; 1) Server, Databases veya nesne tipi klasörü açılarak altındaki özel nesne üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır. 2) Permissions sayfasına geçilerek Permissions for <object> kısmından gerekli izin atamaları yapılır. Transact-SQL yazılım biçimi ise şöyledir; GRANT {database_permission [ , ...n]} ON security_type : : securable_name TO security_account [ ,...n ] [WITH GRANT OPTION] [AS {group / role} ]
  • 5. Aşağıdaki ifade ile ogun3 veri tabanında bulunan mudur şeması için dogan hesabında SELECT hakkı veriyoruz. Use ogun3 GRANT SELECT ON SCHEMA : : mudur TO dogan SCHEMA-SCOPE SECURABLE PERMISSION: Veri tabanı scope'ları içindeki securables nesneler; table, view, stored procedure ve type. Bunun Management Studio içinden yapılması; 1)Server, Databases veya nesne tipi klasörü açılarak altındaki özel nesne üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır. 2)Permissions sayfasına geçilerek Permissions for<object> kısmından gerekli izin atamaları yapılır. Transact-SQL yazılım biçimi ise şöyledir; GRANT {type_permission [ ,...n]} ON TYPE :: type_name TO security_account[ ,...n] [WITH GRANT OPTION] [AS {group | role}] Aşağıda bu örneklenmiştir; USE ogun3, GRANT EXECUTE ON TYPE :: adrestip1 TO gorkem Aşağıdaki yazılım ile mudur şemasının personel tablosu üzerinde SELECT hakkı alması görülmektedir. USE ogun3, GRANT EXECUTE ON mudurpersonel2 TO dogan
  • 6. UYGULAMA : 1) ogun3 veri tabanını altındaki Security klasörü altındaki Users klasörü altında bulunan dogan isimli kullanıcı adı üzerinde sağ tuşa basarak Properties seçeneğine tıklayalım. 2) Database role membership kısmından db_datareader kutucuğunu doldurarak OK butonuna basalım. Bu izin ile dogan isimli kullanıcının ogun3 isimli veri tabanı içindeki tüm kayıtları görme hakkı veriyoruz. Ancak bunun dışında bir hakkı yoktur. Yani ogun3 veri tabanı içinde herhangi bir nesne içindeki verileri silemez, değiştiremez ve yeni bir kayıt ekleyemez. Bunları yapması için listedeki diğer izinlerin kullanılması gerekir. 3) Database Engine seçeneğine tıklayalım.
  • 7. 4) Server name kısmından SQL Server adını seçelim. Authentication kısmından SQL Server Authentication'ı seçerek Login kısmına oluşturduğumuz kullanıcı adı olan dogan yazalım. Ardından New Query seçimini dogan veri tabanı için yapalım. 5) Daha önce çalıştıramadığımız SQL ifadesini Query Editör kısmına
  • 8. yazdığımızda; tüm kayıtların listelendiğini görebilirsiniz. Ancak herhangi bir tabloya kayıt girmek istediğinizde, yine hata mesajı ile karşılaşırsınız. NESNE BAZLI İZİNLER: Buraya kadar izlediğimiz izinler dışında, bir nesneye özel izin ve kısıtlamalar koyabiliriz. Hatta biraz daha ileriye giderek, nesne içinde bulunan sütun temelli izinler oluşturabiliriz. Burada oluşturulan izinler; diğer tüm güvenlik mekanizmalarının üzerindedir. Yani en baskın olan izindir. UYGULAMA: 1) OZATA kullanıcısı ile SQL Server'a bağlanalım. 2) ogun3 veri tabanı altında bulunan, prestige tablosu üzerinde sağ tuşa basarak, Properties seçeneğine tıklayalım. 3) Gelen ekrandan Permissions butonuna tıklayalım. 4) Search butonuna basarak dogan isimli kullanıcımızı ekleyelim. Ardından izinleri şekildeki gibi yapılandıralım. Burada sadece bu tablo için Insert hakkı yererek; yeni kayıt eklenilecek olan kullanıcıya ayrıca değişiklik yapması için Update kutucuğunu doldurduk. Üst raftan gelecek olası bir silme tehlikesine karşında Deny altındaki Delete kutucuğunu doldurduk. 5) Değişiklik yapmasına izin verdik de, bu değişikliği de sınırlayabiliriz. Bunun için Update butonu seçili iken Column Permissions butonuna tıklayalım. Gelen sütun izinleri penceresinde aşağıdaki kutucukları dolduralım. Böylelikle dogan isimli
  • 9. kullanıcıya sadece fiyat değişikliği izini verdik. Eğer kutulardan herhangi birini boş bırakırsak, yukarıdan gelen izinler geçerli olur. 6) dogan isimli kullanıcı adı ile SQL Server'a bağlanalım. Ardından Object Explorer'ı dogan isimli kullanıcı için bağlayalım. 7) Object Explorer kısmından prestige tablosunu açalım. Bu işlemin başarı ile gerçekleştiğini göreceksiniz. Yeni bir kayıt girelim. Burada da bir sorun olmayacaktır. 8) Var olan bir kayıdın fiyat sütununu değiştirmeye kalktığınızda da hata mesajı karşılaşmayacaksınız.
  • 10. 9) Ancak var olan bir kayıdın fiyat sütunu dışında bir sütununu değiştirmek istediğinizde veya bir satırı silmek istediğinizde; size bunu yapamayacağınızı bildiren mesaj ile karşılaşacaksınız. 10) Tekrar sa isimli kullanıcı ile bağlanalım. ROLES: İzinleri tek tek kullanıcılara vermek bazı durumlarda büyük karmaşıklığa yol açar. Onun için her zaman gruplara izin vermek doğru bir çözüm olacaktır. Aynı yetki içinde bulunacak kullanıcıları ilk önce bir gruba atamak, ardından bu gruba gerekli izin ataması yapmak gerekir. İşte SQL Server içindeki bu grup yapısına Role adı veriyoruz. Dört çeşit Role vardır; *** Hazır Server Role. *** Hazır Database Role. *** Kullanıcı Tanımlı Role. *** Application Role. Şimdi bu rolleri tek tek inceleyelim. HAZIR SERVER ROLE: Bu roller, Server düzeyli izinlerin belirlendiği rollerdir. Bu alana ulaşmak için Security klasörü altındaki Server Roles seçeneğine tıklamak yeterlidir.
  • 11. Birer cümle ile açıklayacak olursak; Rol İzin bulkadmin BULK INSERT komutlarını çalıştırır. dbcreator Veri tabanı oluşturur ve düzenler. diskadmin Disk dosyalarını yönetir. processadmin SQL Server işlem kademelerini yönetir. securıtyadmin Veri tabanı izinlerini düzenler ve kullanımları izler. serveradmin Server ayarlarını yapar. setupadmin Replikasyon kurulumu yapar. sysadmin Her şeyi yapar. En yetkili roldür. Varsayılan olarak sistem yöneticisi bu grubun üyesidir. Bir kullanıcıyı bu gruba üye yapmak için role üzerinde sağ tuşa basılarak Propertles seçeneğine girilir. Add butonu kullanılarak üye eklenir.
  • 12. HAZIR DATABASE ROLE: Her veri tabanı için ayrı olarak yapılandırılan rol şeklidir. Ulaşmak için, veri tabanı altındaki Roles seçeneğine tıklamak yeterlidir. Rol İzin db_accessadmin Veri tabanına kullanıcı, grup, rol ekler veya kaldırır. db_backupoperator Veri tabanının yedeğini alır. db_datareader Herhangi bir tablodan veri okur. db_datawriter Tabloların içindeki verilere ekleme yapar, siler, değiştirir. db_ddladmin Veri tabanına nesneleri ekler, siler, değiştirir. db_denydatareader Herhangi bir tablodan veri okuyamaz. db_denydatawriter Herhangi bir tabloda değişiklik yapamaz. db_owner Veri tabanıyla ilgili herhangi bir aktiviteyi gerçekleştirir. db_scurityadmin Nesnelerin izinlerini düzenler. public Bir veri tabanı içindeki kullanıcılar için, tüm yerleşik izinleridüzenler. Bir kullanıcıyı bir hazır veri tabanı grubuna dahil etmek için üzerinde sağ tuşa
  • 13. basılarak Properties seçeneğine tıklanır. Gelen ekrandan kullanıcı; Add butonu kullanılarak bu gruba dahil edilir. Her iki yapı için de üyelik, kullanıcının ilk oluşumu sırasında da belirlenebilir. KULLANICI TANIMLI ROLE: Sabit roller dışında, istersek özel roller de tanımlayabiliriz. Bunun için; veri tabanı altında bulunan Roles nesnesini kullanırız. Bu kendi oluşturduğumuz gruba üye veya başka bir grup ekleyebiliriz. Şimdi bir örnek ile bunu açıklayalım. 1) ogun3 veri tabanı altında bulunan Security/ Roles/ Database Roles klasörü üzerinde sağ tuşa basarak, New Database Role... seçeneğine tıklayalım.
  • 14. 2) Gelen ekranın Role name kısmına; vermek istediğimiz ismi yazalım ve Add butonunu kullanarak, üye etmek istediğimiz kullanıcıları ekleyelim. Yine buradan sahiplik yapacak şemalar belirlenebilir, izin atamaları için de Securables sayfası kullanılabilir. APPLICATION ROLE: Diğer bir rol seçimi de Application Role (Uygulama rolü)' dur. Bu yapıda oluşturulan rol'e herhangi bir kullanıcı dahil edilmez. Bunun yerine, bir şifre belirlenerek, kod kısmında sp_setapprole sistem stored procedure'ö çalıştırılıp, rolün uygulanması sağlanır. Bu rol ile bir kez bağlandıktan sonra başka bir işlem yapmak için, mutlaka bağlantıyı kesmek gerekir. Oturum süresince aktif kalır. Daha çok sistem dışı kullanıcıların sadece belli nesnelere erişmesi amacı ile kullanılabilir.
  • 15. UYGULAMA: 1) ogun3 veri tabanı altında bulunan Securitry Roles Application Roles klasörü üzerinde sağ tuşa basarak New Application Role... seçeneğine tıklayalım. 2) Role name kısmına rol için vereceğimiz ismi yazalım. Örneğimizde federer adı verdik. Ardından Password kısmına şifremizi yazalım. Biz örneğimizde 1 yazdık. 3) Securables sayfasına geçerek Search butonuna tıklayalım. Gelen iletişim kutusundan All objects of the types seçeneğini işaretleyip OK butonuna basınca; aşağıdaki şekil karşımıza gelir.
  • 16. Buradan Tables kutusunu doldurup OK butonuna bastığımızda tablolar aşağıdaki gibi karşımıza gelecektir. Prestige tablosunu seçerek Grant kısmından Select izini karşısındaki kutuyu dolduralım. Onaylayarak, iletişim kutularını kapatalım. 4) SOL Server Ouery Editörü açarak aşağıdaki kodu yazalım ve F5 ile çalıştıralım ve tüm kay.tların geldiğini gözlemleyelim. use ogun3 exec sp_setapprole 'federer','1' select * from prestige CERTIFICATES: SQL Server tarafından kullanılan dijital sertifikalar, SSL bağlantılar oluşturmak ve Service Broker'lar ile birarada anılırlar.
  • 17. SQL Server, X.509v3-compliant türü sertifikalar oluşturabilir. iki iletişim hattı arasında hareket eden mesajların şifrelenmesi ve/veya kimlik denetimine tabii tutulması için dijital sertifikalar kullanılabilir. Mesaj ile birlikte bu mesajın şifrelenmesi ve çözülmesi için gerekli anahtarları bünyesinde bulundurabilir. Public ve Private olmak üzere iki anahtar çifti temel yapısıdır. Public parçası seninle ilişki kuracak herhangi bir kimseye verilebilirken, Private parçası özel olmalı ve sadece sende bulunmalıdır. Ortak sertifika yayımlayıcılar ve sertifika server'lar yaygın olarak kullanılan yapılardır. Not: Sertifikalar ile ilgili geniş bilgiyi Windows 2003- 2008 Server kitabımızda bulabilirsiniz. SOL SERVER SERTİFİKA KULLANIMI: SQL Server; kimlik denetimi ve şifreleme amaçlı sertifika kullanımına destek verir. Bu sayede web senkronizasyonu için replikasyon yapılarında güvenlik sağlar. SQL Server bünyesinde sertifika oluşturup, tutabileceğimizden bir nevi sertifika sunucusu (Certificates Server) olarak davranır. Bir sertifika oluşturduğumuz zaman, aktif veri tabanı içinde tutulur. Bu yüzden veri tabanını başka bir yere taşıdığımız zaman bünyesindeki sertifikalar da beraber taşınır. İlişki içinde olan iki servis arasında kimlik denetimi ve güvenlik için Service Broker kullanılabilir. Aynı zamanda tam güvenlik yapısı için kullanılır ki uzaktaki kullanıcılar arasındaki mesajların şifrelenmesini sağlar. Transact-SOL ifadeleri kullanılarak, bir sertifika oluşturulabilir. Bunun vanısıra başka bir sertifika server yapısına dahil edilebileceği gibi, var olan bir sertifika başka bir ortama yollanabilir. Aşağıda genel yazılım biçimi görünmektedir; CBEATE CERTIFICATE sertifika_ad [AUTHORIZATION kullanıcı_ad] {FROM < sertifika_kaynağı > | < sertifika_seçenekleri > } [ACTIVE FOR BEGIN_DIALOG = { ON | OFF} ] <sertifika__kaynağı> ::= ASSEMBLY assembly_name |{ [ EXECUTABLE ] FILE = 'dosya_yolu'
  • 18. [ WITH PRİVATE KEY { <private_key_seçenekleri> ) ] } <sertifika_seçenekleri > ::= [ENCRYPTION BY PASSVVORD = 'passvrord'] WITH SUBJECT = 'certificate_adı' [, <tarih seçenekleri> [ ,...n ] ] <private_key_seçenekleri> ::= FİLE = 'private_key_yolu' [, DECRYPTION BY PASSVVORD = 'password' ] [, ENCRYPTION BY PASSVVORD = 'passvvord' ] <tarih seçenekleri> ::= START_DATE = 'mm/dd/yyyy' | EXPIRY_DATE = 'mm/dd/yyyy' Aşağıdaki örnek göksel veri tabanı için nasıl sertifika oluşturulacağını göstermektedir; USE ogun3 CREATE CERTIFICATE goksertifika ENCRYPTION BY PASSMORD = 'F@ner1907' WITH SUBJECT = 'oguneaitsertifika', EXPIRY_DATE = '12/21/2012'; Aşağıdaki yazılım ise sertifikayı oluşturur ve Service Broker ile başlatır. USE ogun3 CREATE CERTIFICATE goksertifİka2 ENCRYPTION BY PASSWORD = 'F@ner1907' WITH SUBJECT = 'oguneaitsertifika2' ACTIVE FOR BEGIN_DIALOG = ON ALTER CERTIFICATE ifadesi ile var olan bir sertifika üzerinde değişiklik yapılabilirken, BACKUP CERTIFICATE ifadesi ile var olan bir sertifikayı bir dosya olarak istediğimiz bir ortama yollayabiliriz.
  • 19. Aşağıdaki yazılımda C: sürücüsüne sertifika yollanmıştır. BACKUP CERTIFICATE goksertifika TO FILE = 'c:acil.cer' Silmek için ise DROP CERTIFICATE ifadesi kullanılır. DROP CERTIFICATE goksertifika STORED PROCEDURE ve VIEW İZİNLERİ: Her ne kadar daha Stored Procedure ve View yapılarını işlemiş olsak da, bu yapıların da güvenlik mekanizmalarına değinelim. Tablolar gibi, Stored Procedure ve View nesnelerine de izin uygulanabilir. Genelde bu izinlere tabii olacak objeler hazırlandığı için ve son kullanıcı; içindeki komutları göremeyeceği için, Public tabanlı izinler vermek daha mantıklıdır. Aşağıdaki örneğimiz, bu iki yapıya ait izinleri içermektedir. UYGULAMA: 1) SQL Server içinde son isimli yeni bir Login oluşturarak, ogun3 veri tabanı altındaki Users nesnesine ekleyelim.
  • 20. 2) ogun veri tabanı altındaki Views nesnesi üzerinde sağ tuşa basarak, New View seçeneğine tıklayalım. 3)Gelen ekranda prestige tablosunu seçerek Add butonuna basalım. Sonra Close butonu ile bu ekranı kapatalım. 4) Eklenen prestige tablosunda ilk iki kutuyu dolduralım ve prestigemini ismi ile kaydedelim kapatalım. 5) Query Editör içine aşağıdaki kodu yazarak çalıştıralım. Başarılı oluşum mesajını alınca Stored Procedure oluşmuş demektir. CREATE PROCEDURE nadal AS Select * from prestige GO 6) SQL Server Query Editor'e son isimli kullanıcı ile bağlanarak, aşağıdaki kodları yazalım.
  • 21. use ogun3 select * from prestige_mini use ogun3 exec nadal Her iki komutun da çalışmadığını göreceksiniz. Çünkü son isimli kullanıcının burada bir yetkisi yok. O zaman herkesin, dolayısı ile son isimli kullanıcının da bunu çalıştırması için; "Public" rolüne view için select ve Stored Procedure için exec hakkı vermek gerekiyor. Bu, SQL Server Management Studio içinden yapılabilir. Ancak bu sefer Transact- SQL ifadesi ile yapalım. 7) "sa" kullanıcısı ile SQL Server Query Editör'ü açalım. 8) Aşağıdaki ifadeleri yazalım. grant select on prestige_mini to son grant exec on nadal to son 9) Tekrar "son" isimli kullanıcı ile logon olduğumuz zaman 6. adımdaki komutları çalıştırdığımızda bu işlemin, başarı ile gerçekleştiğini izleyeceğiz. UYGULAMA: 1) ogun3 veri tabanında beykoz isimli yeni bir tabloyu şekildeki gibi tasarlayarak örnek kayıtlar girelim. 2) Yine aynı yerde sariyer isimli bir tasarlayarak örnek verileri içine girelim.
  • 22. 3) Şimdi Security dizinin içindeki Logins kısmında alit, belit, selit isimli üç adet yeni SQL Login hesabı oluşturalım. 4) SQL Query Editör içine aşağıdaki SQL komutlarını yazıp, F5 ile çalıştıralım. use ogun3 select * from beykoz Aynı işlemi sariyer tablosu için de yaptığınızda, hiçbir sorun olmadan eriştiğinizi görebilirsiniz. 5) İşlemi, grafiksel olarak test etmek için sıra ile beykoz ve sariyer tablosu üzerinde sağ tuşa basarak Edit Top... seçeneği ile yapalım.
  • 23. Her iki işlemde de hiçbir sorun olmadan verileri görebiliyoruz. 6) Connect/ Database Engine seçeneğine tıklayalım. 7) Gelen ekranda alit ile sisteme girelim. 8) 4. adımda yaptıklarımızı tekrarlayalım. Ne Oldu? (Eğer SQL Query Editör açılırken, kullanıcı adını sorarsa alit yazmayı unutmayınız!) Evet! SQL Server'ı açma yetkimiz var ancak bu, veri tabanı için bir izin olmadığından, her iki durumda da "alit" isimli kullanıcının bu veri tabanı için yetkili bir kullanıcı olmadığına dair mesaj ile karşılaşacaksınız. 9) O zaman bizim alit ve belit isimli kullanıcıları; bu veri tabanı için yetkili kullanıcı yapalım. Bunun için tekrar, sa isimli kullanıcı ile SQL Server'a bağlanalım. 10) ogun3 isimli veri tabanının altındaki Users nesnesi üzerinde, sağ tuşa basarak; New User seçeneğine tıklayalım. Sıra ile hem alit hem de belit isimli kullanıcıları ekleyelim 11) Tekrar "alit" ile SQL Server'a bağlanalım. 12) 4. adımda yaptıklarımızı tekrarlayalım. Ne Oldu?
  • 24. 13) Yine beceremedik ve bu sefer de veri tabanı nesnesi için gerekli izinin olmadığını belirten mesaj ile karşılaştık. OFFFF nasıl olacak bakalım. :) 14) Tekrar "sa" ile SQL Server'a bağlanalım. 15) ogun3 veri tabanı altında bulunan Roles Database Roles kısmını seçerek; db_datareader üzerinde sağ tuşa basıp, Properties seçeneğine tıklayalım. 16) Gelen ekranda Add butonunu kullanarak "alit" ve "belit" isimli kullanıcıları ekleyelim ve OK butonu ile onaylayalım. 17) Yine Roles kısmında bulunan db_datawriter'ın üzerinde sağ tuşa basıp, Properties seçeneğine tıklayalım ve Add butonunu kullanarak sadece "belit'i ekleyelim . 18) İlk önce alit" isimli kullanıcı ile SQL Server'a bağlanalım. 19) 4. adımda yaptıklarımızı tekrarlayalım. Artık hem sariyer, hem de personel tablosu içindeki tüm kayıtları görebiliyoruz. Demek ki buradan çıkacak sonuç: db_datareader yerleşik rolüne bir kullanıcıyı üye yaptığımız zaman, o veri tabanı içindeki tüm tabloları okuma hakkına sahip oluyor. 20) Şimdi sariyer veya beykoz tablosunu açarak içine; yeni kayıt
  • 25. girmeye çalışalım. Evet, şimdi de bunu yapamıyoruz! Çünkü alit sadece db_datareader hakkına sahip. 21) belit isimli kullanıcı ile SQL Server'a logon olalım. 22) 4. ve 20. adımdaki işlemleri yapmaya çalıştığımızda, hepsinin de gerçekleştiğini göreceğiz. Çünkü "belit" hem db_datareader, hem de db_datawriter rollerine üye olduğu için, okuma ve yazma hakkına sahip olmaktadır. AUDITING GÜVENLİK: Auditing ile SQL Server'ın bir instance'ının veya SQL Server'ın veri tabanının sistem üzerinde meydana gelen olaylarını izleyebiliriz. SQL Server için birkaç yöntem mümkündür. SQL Server 2008 içinde, SQL Server Auditing yapısı ile otomatik izleme gerçekleştirebiliriz. SOL SERVER PROFILER: Microsoft SQL Server Profiler; Database Engine veya Analysis Services yapılarını izlemek için kullanılan grafiksel bir ara yüzdür. Kullanımı; *** İlk olarak SQL Server izlemesi için gerekli tanımlama, SQL Server Profile kullanılarak yapılır. *** SQL Server Profile, bu verileri kaydetmeye başlar. *** ilgilendiğimiz bilgileri izleyebiliriz. Bu yapıya yardımcı olacak ise SQL Trace yapısıdır. *** Olaylarda meydana gelen kilitlenmelerin nasıl olduğunu grafiksel olarak izleyebilir. Sonuçları XML olarak kaydedebilir. *** Tüm sonuçları XML formatına kaydedeceği gibi, ANSI, Unicode ve OEM olarak da kaydedebilir. *** İzlemede seçilen anahtara göre gruplama yapabilir. Böylelikle izlenen
  • 26. olayların basitçe kaç kez meydana geldiği görülebilir. XML; her ortama rahatlıkla aktarılacak olan bir biçime sahip olduğu için, izlenen olay bilgilerini XML biçiminde kaydetmek doğru bir seçim olacaktır. Ardından bu veriler; analiz için özel bir uygulama yazılabileceği Excel programı gibi yaygın programlar bünyesine çağrılarak da kullanılabilir. Nasıl yapılır? 1) SQL Server 2008 programı içinden Tools menüsünden SQL Server Profiler seçeneğine tıklanır. 2) File menüsünden New Trace seçilir. 3) Gelen iletişim kutusunda izlenecek yer tespit edilerek Connect butonuna basılır. Bu Database Engine veya Analysis Services tipli olabilir.
  • 27. 4) General kısmından Trace name kısmına bir isim verilir. Ardından Event Selection sekmesine geçilerek olaylar belirlenir ve Run butonu ile izleme başlatılır.
  • 28. 5) Yapılan olaylar istediğiniz süre zarfında, şekildeki gibi kaydolur. Bunun için SQL Server içinde bir kaç işlem yapmanız, olayların artmasını gözlemeniz açısından yararlı olacaktır. 6) Şekildeki gibi, izleme devam eder. 7) File menüsünden Stop Trace seçeneğine tıklanarak izleme işlemi durdurulur. 8) XML olarak kaydetmek için File/ Save As altındaki Trace XML File... seçeneğine tıklanır.
  • 29. 9) isim verilerek, istenilen yere kaydedilir. 10) Excel programına getirmek için, bu program açılarak File/ Öpen seçeneğinden kaydedilmiş dosya seçilir. Gelen iletişim kutularından değişiklik yapılmadan onaylanır. Sonunda Excel süzme yapısının da içinde bulunduğu tüm bilgiler; şekildeki gibi karşımıza gelir. Burada olayları bulmak, oldukça pratik ve basit olacaktır.
  • 30. DDL TRİGGER: Veri tabanı içindeki nesne hareketlerini bildirmek için kullanılır. Bildiğimiz klasik Trigger gibi değildir, sadece verilerde bir değişiklik olduğu zaman bunları bize sunar. Örneğin; bir tablonun oluşturulması veya silinmesi gibi işlemleri izlememizi sağlar. SQL Server yapısını izlemek için, oldukça kullanışlı bir araçtır. Kullanılan DDL ifadelerinde CREATE TABLE, ALTER TABLE, DROP TABLE veya UPDATE STATICS devreye giren DDL Trigger ile yönetimsel işlerde takip edilebilir. Meydana gelen olaylar istenilirse ROOLBACK TRANSACTION ifadesi ile geri alınabilir. CREATE TRİGGER: Bir DDL Trigger oluşturmak için CREATE TRİGGER ifadesi kullanılır. Trigger oluşturulurken ilk yapılması gereken işlem, DDL Trigger yapısından bulunacak alan ve tip belirtilmelidir.
  • 31. Aşağıdaki örnek kod; bir kullanıcının veri tabanı üzerinde tablo oluşturmasını izleyen bir DDL Trigger oluşturur. Bu yapıda ON DATABASE yerine, duruma göre ON ALL SERVER ifadesi de kullanılabilir. CREATE TRİGGER tabloolustur ON DATABASE FOR CREATE_TABLE AS ... Veri tabanı içinde herhangi bir DDL işlemini izlemek için ise, DDL_DATABASE_LEVEL_EVENTS ifadesinden yararlanılabilir. EVENTDATA: Standart Trigger; veriler üzerinde işlem yapılmak için otomatik olarak inserted ve deleted tablolarını oluşturur. Ancak DDL Trigger bu tabloları oluşturmaz. Bunun yerine, bilgilere ulaşmak için eventdata fonksiyonu kullanılır. Bu fonksiyon EVENT_INSTANCE_XML belgesi döndürür. Bu XML dosyası içinde aşağıdaki elementler bulunur; <PostTime> Trigger'ın işlediği zaman. <SPID> Veri tabanı işlem numarası. <EventType> Bu Trigger işleminde uygulanan olay Ayrıca uygulanan işleme göre birçok element içerir. Eventdata fonksiyonu ile dönen değerleri yakalamak için query ifadesi kullanılır. Bir uygulama ile görelim;
  • 32. UYGULAMA: 1) SQL Server içinden Ouery kısmına geçelim. Ardından aşağıdaki komutu yazarak çalıştıralım. CREATE TRİGGER tabloolusturr ON DATABASE FOR CREATE_TABLE AS Declare @verial XML DECLARE @veritaban nvarchar(100) SET @verial=eventdata() SET @verial=Convert(nvarchar(100)), @verial.query('data(//DatabaseName)')) Select @verial, @veritaban 2) Test etmek için aşağıdaki ifadeyi yazalım; create table denek ( sno int, ad varchar(10) ) 3) Çalıştırdıktan sonra aşağıdaki görüntü karşımıza gelir. Burada tüm bilgilerin bulunduğu XML yapısı ve oluşturulan veri tabanı adı görünmektedir. XML yapısına tıkladığımızda tüm bilgiler şekildeki gibi karşımıza gelir.
  • 33. 4) Trigger'ı silmek için ise DROP ifadesinden yararlanılır. DROP TRIGGER tabloolusturur ON DATABASE Aşağıdaki ifadeler ile Trigger'lar hakkında genel bilgi edinilebilir; SELECT name FROM sys.triggers SELECT definition FROM sys.sglmodules
  • 34. Şimdi bu bilgileri bir tablo içinde depolamak için bir uygulama daha yapalım. Burada da bilgileri value ile yakalayalım. Burada tüm DDL ifadeleri için genel bir tanımlama olan DDL_DATABASEJ-EVELJEVENTS iadesinden yararlanacağız. UYGULAMA: 1) SQL Server içinden Query kısmına aşağıdaki ifadeleri yazarak, olay günlüğünü tutacağımız tabloyu oluşturalım. CREATE TABLE kaydet_trig (zaman datetinte, kullanan nvarchar(100), olay nvarchar(100), komut nvarchar(2000)); 2) Olayları izlemek için aşağıdaki kodu yazıp çalıştırarak, Trigger'ı oluşturalım. CREATE TRIGGER izle ON DATABASE FOR DLL_DATABASE_LEVEL_EVENTS AS DECLAPE @verial XML SET @verial = EVENTDATA() INSERT kaydet_trig (zaman, kullanan, olay, komut) VALUES (GETDATE(), CONVERT(nvarchar(100), CURRENT_USER), @verial.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)'), @verial.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)')); 3) Test etmek için aşağıdaki komutları yazarak çalıştıralım. CRSATS TABLE ogun2 (ad varchar(1O)) DROP TABLE ogun2 4) Aşağıdaki komut ile kaydet_trigger içindeki kayıtları görüntüleyelim.
  • 35. Select * from kaydet_trig 5) Trigger'i silelim. Drop trigger izle ON DATABASE UYGULAMA: 1) Bu uygulamamızda ise veri tabanında tablo oluşumunu engelleyeceğiz. Bunun için aşağıdaki ifadeleri Query kısmına yazalım. CREAT TRIGGER tabloengelle ON DATABASE FOR CREATE_TABLE AS PRINT 'CREAT TABLE ifadesi kullanılmaz.' SELECT EVENDATA().value( *(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'nvarchar(max)') RAISERROR ('Bu veri tabanında Tablo Oluşturulmaz',16,1) ROLLBACK TRANSACTION; 2) Test için aşağıdaki ifadeyi yazarak, bir tablo oluşturmaya çalışalım. creat table denem ( Sno int, Ad varchar(10) ) 3) Komutu çalıştırdığımızda şekildeki gibi, işlemin gerçekleşemeyeceğini belirten mesajlar ile karşılaşırız.
  • 36. 4) Aşağıdaki ifadeyi yazarak Trigger'ımızı silelim. DROP TRIGGER tabloengelle ON DATABASE EVENT NOTIFICATION: SQL Server aktivitelerini izlemek için kullanacağımız seçeneklerden biri de yeni bir yapı olan Event Notification'dır. SQL Server performansını mümkün olduğu kadar aza düşürerek olayları izlememize olanak tanır. Trigger gibi DDL ifadelerini izleyeceği gibi, bunun yanı sıra veri tabanları komutlarını oluşturan DML ifadelerini de izleyebilir. Ayrıca SQL Profil yapısındaki izlemeyi de gerçekleştirebilir. Bu yakaladığı bilgileri Service Broker servisine yollayarak, analiz yapılmasını sağlar. CREATE EVFNT NOTIFICATION: Oluşturmak için CREATE EVENT NOTIFICATION ifadesi kullanılır. Tüm kullanım şeklini verecek olursak; CREATE EVENT NOTIFICATION event_notification_ad ON { SERVER | DATABASE | QUEUE kuyruk_ad} [ WITH FANJN ] FOR { eventjp event_grup] [ ,...n] TO SERVİCE 'broker_service', {'brokerjnstance' | 'current database'} Aşağıdaki yazılım Server üzerinde uygulanan UPDATE_STATISTICS ifadesini istatisliklog isimli Broker servisine yollar. CREATE EVENT NOTIFICATION istatislik_guncelle ON SERVER FOR UPDATE_STATISTICS TO SERVICE 'istatistiklog','current database' Aşağıdaki yazılım ise veri tabanında meydana gelen silme olaylarını izler.
  • 37. CREATE EVENT NOTIFICATION tablo_silme ON DATABASE FOR DROP_TABLE TO SERVICE 'tablosillog','current database' Genel DDL ifadeleri için FOR DDL_DATABASE_LEVEL_EVENTS ve genel DML ifadeleri için ise FOR DML_EVENTS kullanılabilir. EVENT NOTIFICATION İÇİN SERVİCE BROKER: SQL Server olaylarını tutmak için oluşturulacak Service Broker servisi için en basit yöntem Stored Procedure ile gerçekleştirilebilir. Böylelikle Event Notification tarafından gönderilen mesajlar; bu servisin kuyruğuna takılır. Nasıl bağlantı kurulacağını adımlayarak inceleyelim; 1) Aşağıdaki ifade ile veri tabanımız içinde Service Broker servisi aktif hale getirilir. ALTER DATABASE ogun3 SET ENABLE_BROKER 2) Kuyruk yapısı için aşağıdaki ifade kullanılır. CREATE QUEUE tablosilkuyruk 3) Bu kuyruk ile ilişkili servis tanımlanır. CREATE SERVİCE tablosillog CM CUEUE tablosilkuyruk {[http://schemas.microsoft.com/SQL/Notifications/PostEventNotificatio n]} 4) Oluşturulan servis işe ilişkili Route tanımlanır. CREATE ROUTE silyolla1 WITH SERVİCE_NAME = 'tablosillog', ADDRESS = 'LOCAL' 5) Notification oluşturularak; servis ile ilişki kurulur. CREATE EVENT NOTIFICATION tablo_silme
  • 38. ON DATABASE FOR DROP_TABLE TO SERVİCE 'tablosillog', 'curren database' 6) Kaba yapısı, aşağıdaki şekilde görüntülenebilir. Select * FROM dbo.tablosilkuyruk
  • 39. UYGULAMA: 1) SQL Server içinden Query kısmına geçip, aşağıdaki ifadeleri yazalım. ALTER DATABASE ogun3 SET ENABLE_EROKER GO CREATE QUEUE tablosilkuyruk33 GO CRSATE SERVİCE tablosillog33 ON QUEUE tablosilkuyruk33 ( [http://schemas.microsoft.com/SQL/Notifications/PostEventNotification] ) GO CREATE ROUTE silyolla33 WITH SERVICE_NAME = ' tablosillog33 ' , ADDRESS = 'LOCAL' GO 2) Oluşturacağımız Notification servis ile bu yapıyı ilişkilendirelim. CREATS EVENT NOTİFİCATİON tablo_silme33 ON DATABASE FOR DROP_TABLE TO SERVİCE 'tablosiilog33','current database' 3) Silme işlemlerini tutacak bir tablo oluşturalım. CREATE TABLE gunluk_yakala33 (komut NVARCHAR(1000), Zaman NVARCHAR(24), hostad NVARCHAR(100), loginad NVARCHAR(100) ) 4) Bir kaç tablo oluşturarak, onları silelim.
  • 40. 5) Ardından Query bölümüne aşağıdaki ifadeyi yazalım. Bu ifade bir Stored Procedure içine yazılıp; kuyruk ile ilişkilendirilebilir. DECLARE @mesajtipal NVARCHAR(256), @mesaj XML; RECEIVE TIP(1) @mesajtipal = message_type_name, @mesaj = message_body FROM dbo.tablosilkuyruk33; IF @@ROWCOUNT = 0 RETURN PRINT CONVERT (NVARCHAR(1000), @mesaj) DECLARE @cmd NVARCHAR(1000) DECLARE @posttime NVARCHAR(24) DECLARE @hostname NVARCHAR(100) DECLARE @loginname NVARCHAR(100) SET @cmd = CONVERT(NVARCHAR(100), @mesaj.query('data(//TSQLCommand//CommandText)')) SET @posttime = CONVERT(NVARCHAR(24), @mesaj.query('data(//PostTime)')) SET @hostname = HOST_NAME() SET @loginname = SYSTEM_USER INSERT IN TO gunluk_yakala33(komut,zaman,hostad,loginad) VALUES(@cmd, @posttime, @hostname, @loginname) GO SELECT * FROM gunluk_yakala33 Görüntü, aşağıdaki gibi olur;
  • 41. UYGULAMA: 1) Bu uygulamada verileri depolamak için notification yapısında kuyruk ile ilişkilendireceğimiz bir Stored procedure kullanalım. Bunun için ilk olarak günlükleri görüntüleyeceğimiz tabloyu gunluk_yakala4 ismi ile aşağıdaki gibi tanımlayarak, çalıştıralım. CREATE TABLE gunluk_yakala4 (komut XML, zaman NVARCHARC24) ) 2) Kuyruk ile ilişkilendireceğimiz izlebak_4 isimli stored procedure'ü aşağıdaki gibi oluşturalım. CREATE PROCEDURE dbo.izlebak_4 AS DECLARE @message_body XML ;WAITFOR( RECETIVE TOP(1) @message_body-message_body FROM kuyruk_3 }, TIMEOUT 2000 ; IF @@ROWCOUNT=0 RETURN DECLARE @zaman NVARCHAR(24) SET @zaman = CONVERT(NVARCHAR(24), @message_body.query('data(//PostTime)')) INSERT INTO dbo.gunluk_yakala4(komut, zaman) VALUES {@message_body, @zaman) GO 3) Broker servisini aktif hale getirelim. ALTER DATABASE ogun3 SET ENABLE_BROKER 4) Aşağıdaki gibi kuyruk tanımlaması yaparken bu sefer farklı olarak oluşturduğumuz stored procedure ile ilişkilendiriyoruz. CREATE QUEUE kuyruk_4 WITH STATUS = ON,ACTIVATION ( PROCEDURE_NAME = dbo.izlebak_4, MAX_QUEUE_READERS = 5, EXECUTE AS SELF) GO 5) Sırası ile aşağıdaki komutları da uygulayalım.
  • 42. CREATE SERVİCE servis_4 ON QUEUE kuyruk_4 ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]) GO CREATE ROUTE Route_4 WITH SERVICE_NAME = 'servis_4', ADDRESS = 'LOCAL' GO 6) Servisimizle ilişkili Notification yapısını oluşturalım. CREATE EVENT NOTIFICATION Notification_4 ON DATABASE FOR CREATE_TABLE TO SERVICE 'servis_4','current database' 7) Test için aşağıdaki komutları yazalım. Create table yuk4 (ad varchar(10)) drop table yuk4 8) Aşağıdaki komutu yazarak, test edelim. Sonra da oluşturduğumuz yapıları silelim. Select * from gunluk_yakala4 METADATA: SQL Server 2008 iki türlü Metadata sorgulaması yapar. Bunlar; katalog görüntülemeler için static metadata ve dinamik görüntüleme için dynamic metadata. Bu bilgiler direkt olarak sistem tablolarından gelir. STATİC METADATA: SOL Server veri tabanı nesneleri hakkında bilgi almak için kullanılır. Bu bilgiler <Database adı>ViewsSystem Views klasöründe bulunur. Biz bu bilgileri sys namespaces'ini kullanarak görebiliriz. Şimdi bunları birer örnek ile inceleyelim;
  • 43. Tüm ifadeleri çalıştırmak için başına Select * from koyunuz. Örneğin: Select name from sys.databases gibi. sys.assemblies: Veri tabanı içinde kayıtlı assembly bilgisini döndürür. Uygulanacak veri tabanı, aktif hale getirilmelidir. sys.databases: Server içinde kayıtlı veri tabanlarının bilgisini döndürür. sys.database files: Bir veri tabanının; veri tabanı dosyalarının bilgisini döndürür. Dosyaları görüntülenecek veri tabanı aktif hale getirilmelidir. sys.linkedjogins: Bağlantılı server login'lerini döndürür. Linked Server yapısı olmalıdır.
  • 44. sys.remotejogins: Bağlantılı server'larda uzaktaki server'ı döndürür. Linked Server yapısı olmalıdır. sys.servers: Yine bağlantılı server ve uzak server bilgisini birarada döndürür. sys.coİumns: Belirli bir veri tabanı içinde oluşturulmuş tüm sütunları gösterir. Eğer sadece belli bir tablo veya view için bu bilgiyi almak isterseniz, aşağıdaki ifadeleri yazmanız gerekir. Bu da prestige tablosunun adını, dbo ise şema ifadesini gösterir. SELECT * FROM sya.columns WHERE [object_id] = (SELECT [object_id] FROM sys.tables st JOIN sys.schamas ss ON st.schama_id = ss.schama_id WHERE st.name='prestige' AND ss.name = 'dbo') sys.events: Veri tabanındaki Trigger ve Notification yapılarını gösterir sys.indexes: Veri tabanındaki index bilgileri döner. sys.tables: Veri tabanında bulunan tablo bilgileri döner. sys.schemas: Veri tabanındaki şema bilgileri döner.
  • 45. Diğer yapıları ise deneyiniz ve sonuçlarını gözlemleyiniz; sys.views sys.database_permissions sys.database_principals sys.database_role_members sys.configurations DYNAMIC METADATA: Dinamik metadata komutları; eski versiyonda DBCC ile başlayan ifadelerin daha gelişmiş bir şekilde kullanılmasını sağlar. Örneğin: sys.dm_db_index_physical_stats, daha genel bilgi veren DBCC SHOVVCONTIG yerine kullanılabilir. declare @db_id smallint declare @object_id int set @db_id = DB_ID(N'ogun3') set @object_id = OBJECT_ID(N'ogun3.dbo.prestige') select * from sys.dm_db_index_physical_states (@db_id, @object_id, NULL, NULL, NULL)
  • 46. Diğer sorgulama komutlarını da bir tablo halinde inceleyecek olursak; Dynamic Management View Açıklama sys.dm_db_partition_stats Veri tabanı içinde bulunan her bir partition için sayfa ve satır sayısı döndürür.