SlideShare a Scribd company logo
1 of 32
TRANSACTİON
TRANSACTlON NEDİR?
Transaction: Birden çok işlemin bir arada yapıldığı durumlarda, eğer
parçayı oluşturan işlemlerden herhangi birinde sorun olursa, tüm
işlemleri iptal etmeyi sağlar.
Örneğin: Bir bankadan başka bir bankaya, 1000 Türk Lirası transfer
edeceksiniz. İlk bankadan 1000 TL eksilirken, diğer bankaya 1000 TL
ilave edilmesi gerekir. Burada iki adet Transact-SQL komutu işler.
Ancak ilki çalıştıktan sonra diğeri çalışmaz ise, ilk bankadan 1000 TL
eksilir ama ikinci bankaya 1000 TL ilave olmaz. İşte bu tür sorunlar
ile karşılaşmamak için; Transaction yapısını kullanmamız gerekir.
iki tür Transaction vardır. Bunlar;
Implicit Transaction: Her bir Transact-SQL komutu, transaction
gibi çalışır. INSERT, UPDATE, DELETE ifadeleri gibi. Buna geçiş
yapmak için SET IMPLICIT_TRANSACTIONS ON ifadesi kullanılır.
Explicit Transaction veya Kullanıcı Tanımlı Transaction:
Buradaki Transaction ifadeleri; BEGIN TRANSACTON ve COMMIT
TRANSACTİON cümlecikleri arasında bir grup şeklindedir.
Bir kullanıcı; bir kaydetme noktasını veya işaretini transaction içine
koyabilir. Bu sayede, sorun olduğu zaman nereden itibaren iptal işlemini
gerçekleştireceğini belirtebilir. Transaction; ya tamamlanmalı veya
Rollback ile iptal olmalıdır. İşte bu iptal noktası, konulan iz ile
belirlenebilir.
SQL Server içinde çeşitli Transaction kullanımları vardır;
BEGIN TRAN[SACTION]
[transaction_adı|@tran_adı_değeri[WlTH MARK['açıklama']]]
Burada eğer WITH MARK kullanılırsa, hata durumunda nereden
itibaren işlemlerin iptal edileceği belirlenir.
SAVE
TRAN[SACTION]{kaydetme_noktası|kaydetme_noktası_değerİ}
BEGIN DISTRIBUTED TRAN[SACTION]
[transaction_adı|@tran_adı_değeri]
COMMIT TRAN[SACTION]
[transaction_adı|@tran_adı_değeri]
ROLLBACK TRAN[SACTION]
[transaction_adı|@tran_adı_değeri|kaydetme_noktası|kaydetme_no
ktası _değeri]
@@trancount ifadesi ile ilişkili transaction'ların sayıları öğrenilebilir.
Global bir değişken gibi davranan @trancount, her BEGIN
ifadesinden sonra bir artar ve her Rollback ifadesinden sonra ise bir
azalır.
Devam eden bir transaction ile ilgili bilgiler edinmek için, DBCC
OPENTRAN ifadesi kullanılır.
Bir Transaction işlemi içine yazıldığında, aşağıdaki ifadelere benzer
bir çıktı olur;
Transaction Information fordatabase 'AYSEN'
Oldest active transaction:
SPID (sen/er process İD) : 52
UID (user İD): 1
Name : user_transaction
LSN : (23:334:1)
Start time : Jan 30 2004 1:21:29:553PM
Transaction yapısında diğer kullanacağımız bir özellik de LOCK, yani
kilitlenmedir.
Buradaki amaçlardan bazıları; Transaction işlemi boyunca okuma,
yeni kayıt, değişiklik ve silme yapılamamasıdır.
Bunun için SET TRANSACTİON ISOLATION LEVEL ifadesinden
sonra, çeşitli parametreler verilir.
Bunlar:
READ COMMITTED: Transaction işlemi sırasında değişikliğe uğrayan
ancak, henüz onaylanmamış kayıtların (dirty read) okunmasına izin
vermez.
READ UNCOMMITTED: Transaction işlemi sırasında değişikliğe
uğrayan ancak, henüz onaylanmamış kayıtların okunmasına izin verir. Bu
bazen sorunlara yol açabilir. En az bloklamaya sahip seçenektir. Ayrıca
sadece bu ifade ile snapshot devreye sokulabilir veya çıkarılabilir.
READ_COMMITTED_SNAPSHOT OFF veya ON.
REPEATABLE READ: Transaction sonuna kadar diğer kullanıcıların
kayıtları okumasına izin vermez. Ancak giriş yapılabilir.
SERIALIZABLE: Transaction sonuna kadar diğer kullanıcıların
kayıtları güncelleme ve yeni kayıt girmesine izin vermez. En kısıtlayıcı
seçenektir.
Yukarıdaki komutlardan sonra DBCC USEROPTIONS ile
SOL Server'daki meydana gelen değişiklikler öğrenilebilir.
Eğer Transaction içinde çeşitli sebeplerden dolayı, kodların çalışması
uzun süre alır ve bloklamadan dolayı işlem yapamazsa, ne yapacağız?
Bunun için; Transaction yapısına bir süre koyarız ve bu süre sonunda
ister bitsin, ister bitmesin bloklama ortadan kalkar.
Bunun için kullanılan komut; SET LOCK_TIMEOUT milisaniye_süre
Aşağıdaki yazılım ile 120 saniye sonra blok ortadan kalkar;
SET LOCK TIMEOUT 120000
Bunu görmek için de:
SELECT @@lock_timeout sistem fonksiyonu kullanılır.
Eğer bir blok yoksa -1 değerini döndürür.
Kilit bilgisi aşağıdaki ifade ile öğrenilebilir:
UYGULAMA :
1) Veri tabanımızın içinde "guvenbank" isimli yeni bir tablo
oluşturarak tabloyu aşağıdaki gibi tasarlayalım.
2) Aşağıdaki kayıtları girelim.
3) "kazanbank" isimli yeni bir tablo oluşturarak, tabloyu aşağıdaki
gibi tasarlayalım.
4)İçine aşağıdaki kayıtları girelim.
5) SQL Query Editör içine aşağıdaki kodu yazalım ve çalıştıralım.
begin tran transfer1
update guvenbank set mevduat=mevduat-800
where hesapno=1907
update kazanbank set g_mevduat=g_mevduat+800
where g_hesapno=2007
if not exists( select * from kazanbank where g_hesapno=2007 )
begin
raiserror ('işlem gerçekleşmedi',10,1)
rollback tran transfer1
end
else
begin
raiserror (' İşlem başarılı',16,1)
commit tran
end
Yukarıdaki kodu çalıştırdığımız zaman, hiçbir tabloda değişiklik
olmayacaktır. Çünkü koşulumuzda verilen hesap numarası; eğer
"kazanbank" içinde yoksa işlemi iptal et diyoruz.
2007 numaralı hesap numarası "kazanbank" içinde olmadığından, iik
SQL ifadesi doğru bile olsa, onu da iptal ederek hiçbir işlem
gerçekleşmiyor.
Şimdi doğrusunu yaparak, iki komutun da çalıştığını gözlemleyelim.
Bunun için, kodumuzu aşağıdaki gibi yazalım ve çalıştıralım.
Çalıştırdığımızda görüntü şekildeki gibi olacaktır.
Bunun sonucunda "guvenbank" içindeki 1907 numaralı hesaptan 800
TL azalacak ve "kazanbank" içindeki 1907 numaralı hesaba 800 TL ilave
olacaktır.
GÜVENLİK
SQL Server 2012'de daha önce olduğu gibi Windows ve SQL Server
güvenlik sistemi olmak üzere iki mekanizma bulunmaktadır.
Yeni sürümünde bunlara ek olarak SQL Server mekanizması için
policy uygulanabilmektedir.
Dört uygulama grubunda toplayacak olursak;
 Platform
 Kimlik Denetimi
 Nesneler
 Uygulamalar
Stored Procedure, Function gibi programlanabilir yapılar için
çalıştırma yetkisi CREATE ifadesi ile belirlenebilir.
Windows Server 2012 passvvord policy veya yerleşik SQL
Server passvvord policy kullanılarak karmaşık ve güvenli şifreleme
sağlanabilir.
AUTHENTİCATİON NEDİR?
SQL Server'a bağlanmak için yapılan kontrole; authentication (kimlik
denetimi) adı verilir. Bu mekanizma, iki şekilde işleyebilir. Windows
Authentication veya SOL Authentication.
Windows Authentication: SQL Server'a bağlanmak için bu
Authentication mekanizması seçilirse; kimlik denetimi Windows tarafından
yapılır.
Yani kullanıcı, SOL Server'a erişebilmek için Windows'a logon olduğu
kullanıcı adı ve şifre ile SQL Server'a bağlanır. Bundan dolayı bu
kullanıcının adının ve şifresinin, SQL Server içine eklenmesi gerekir.
Özellikle Active Directory yapısında çalışan SQL Server için, oldukça
kullanışlı bir seçenektir.
SOL Server Authentication:
Bu mekanizmada ise yetkili kullanıcı adı ve şifre, SOL Server sistem
yöneticisi tarafından SQL Server içinde tanımlanır. Windows yapısından
bağımsız olarak çalışır.
SOL Server içinde iki adet authentication (kimlik denetimi) mode
bulunmaktadır. Bunlar; Windows Authentication Mode ve Mixed
Authentication Mode.
Mixed Authentication; Active Directory içinden Windows Kimlik
Denetimini, Kerberos kimlik denetimi ile SOL Server girişini, hem de SOL
Server passvvord policy yapısını destekler.
SQL Server 2012 SQL Authentication ile Oturum Açılması
Sql server kurulum sırasında Windows Authentication modda kurulup
Mixed mod seçilmez ise sadece Windows Authentication modda oturum
açılabilmektedir. Bazı uygulamaların yazılım mimarisi gereği sadece Sql
Authentication ile çalışmak zorundadır. Bu nedenle bizde bu özelliği nasıl
aktif edeceğimizi ele alacağız.
Elimizde kurulu olan Sql Server 2012 ile Sql
Authentication modda oturum açmak istediğimizde aşağıdaki hata bizi
karşılamaktadir.
Bu nedenle Windows Authentication modda oturum açalım.
Windows Authentication modda sorunsuzca oturum açıldı.
Security altında yer alan logins kısmına baktığımızda kurulumun
Windows Authentication modda yapılmış olmasından dolayı varsayılanda
“sa” kullanıcısının disable olarak geldiğini görmekteyiz.
SQL Authentication modda oturum yapabilmek için instance üzerinde
sağ tıklayarak “properties“ menüsüne giriş yapalım.
Açılan ekranda “Sql Server and Windows Authentication mode”
seçimini yaparak hem Windows hem Sql Authentication oturum açabilir
duruma geleceğiz.
Yukarıdaki ekranı “OK” ile geçtikten sonra işlemin geçerli olabilmesi için
SQL Server servisini yeniden başlatmamız gerektiği bilgisi bize
aktarılmaktadır. “OK” tıklayarak bu ekranı geçelim.
Yukarıdaki işlemi tamamladıktan sonra “sa” kullanıcısını enable hale
getirmemiz gerekmektedir. Bu nedenle “sa” kullanıcısı üzerinde sağ
tıklayarak “properties” menüsünü açalım.
Açılan ekrandaki “General” tabında “sa” kullanıcımıza bir şifre verelim.
“Server Role” tabında ise “Login” kısmını “Enable” duruma getirelim ve
“OK” ile tamamlayalım.
Resimde de görüldüğü gibi “sa”kullanıcısı üzerindeki kırmızı ok kalktı ve
aktif hale geldi.
Şimdi tekrardan “SQL Authentication” modda oturum açmaya
çalıştığımızda yine hata almaktayız.
Yaptığımız işlemlerin tamamının aktif olabilmesi adına “SQL Server”
servisini yeniden başlatmamız gerekmektedir. Bu nedenle “SQL Server”
servisine sağ tıklayarak “Restart” edelim.
Şimdi tekrardan “SQL Authentication” modda oturum açmayı deneyelim.
Şu anda instance ekranında görüldüğü gibi “SQL
Authentication” modda “sa” kullanıcısı ile oturum açmış durumdayız.
Windows Authentication Mode'un Avantajları:
Birçok önemli özellik sağlar. Örneğin: Windows yapısı ile gelen
güvenlik mekanizması, izleme, şifre süresinin olması, en az şifre uzunluğu
gibi.
Tek bir kullanıcı hesabı gibi, bir Windows grubu eklenebilir. Böylelikle
birden fazla Windows kullanıcısı yönetilebilir.
Kullanıcılar SQL Server'ı oldukça hızlı açar. Bağlanırken şifreyi
hatırlamak gibi, bir sorunu olmaz.
Mixed Mode'un Avantajları:
Windows Client'ları dışındaki sistemlerin de SOL Server bünyesine
bağlanmasını sağlar. Hem karışık yapıdaki sistemler, hem de Internet
Client'ları için kullanılması gereken bir yapıdır.
Not: SQL Server; BULITINAdministrators ve sa hesapları adında
iki varsayılan yönetici hesaba sahiptir. Eğer Mixed Mode kullanıyorsanız
"sa" hesabının şifresini güvenlik gerekçesi ile boş bırakmayınız.
Varsayılan olarak bir SOL Server yapısı Windows authentication
yapısındadır. SOL Server login oluştursak bile bu hesap ile SOL Server
yapısına bağlanamayız. Bunun için SQL Server mutlaka SQL Server
Authentication and Windows Authentication olarak yapılandırılmalıdır.
PRINCIPALS:
SQL Server sistemi içinde kullanılan kimlik denetimi (Authenticate)
tanımlamalarına referans olan ifadeye principals adı verilir.
Principals; bir veri tabanı içinde herhangi bir nesneyi açmak için
gerekli olan izin için kimlik denetimi tanımlamasıdır.
Üç bölümden oluşur;
Bölüm Principals
Windows Windows lokal kullanıcı hesabı
Windows domain kullanıcı
hesabı
Windows groupSQL Server SQL Server login
SQL Server role
Database User
Database group
Application role
SECURABLES:
SQL Server içindeki nesneleri açmak için izin yetkilerini düzenlemeye
securables denir. Güvenlik modelinizi düzenlerken farklı securables
alanlarını bilmeniz gerekir. Kullanımı yukarıdaki gibidir.
Üç farklı alandan oluşur;
Alan İçerik
Server Logins
HTTP endpoints
Certificates
Event notifications
Databases
Database Users
Roles
Application Roles
Assemblies
Message types
Service contracts
Services
Full-text catalogs
DDL events
Schemas
Schema Tables
Views
Functions
Procedures
Queues
Types
Rules
Defaullts
Synonyms
Aggregates
PERMİSSİONS:
Bölümleri açıp yönetmek için gerekli olan kurallar dizisine permissions
adı verilir. Tabiki bu, Securables yapısına sahip Principals çerçevesinde
gerçekleşir. Bunlar birbirlerine bağlıdır.
SQL Server içindeki permissions, grant(yetki ver), revoke(yetkiyi sil)
ve deny(yasakla) olmak üzere üç temel yapıya sahiptir.
Aşağıdaki listede önemli izinlerin bir kısmı verilmiştir.
Securable Permission Açıklama
Server CONNECT_SQL
CREATE LOGİN
ALTER ANY LOGİN
CONTROL SERVER
Server'a bağlanma.
Hesap oluşturma.
Server içindeki hesap
değişikliği.
Tüm sistem yönetim
kontrolü.
Login ALTER
IMPERSONATE
Hesap değişikliği.
Genel hesaplar.
Database CREATE TABLE
ALTER ANY USER
CONTROL
Veri tabanı içinde tablo
oluşturma.
Veri tabanı içinde
kullanıcı değişikliği
Veri tabanı için tam
yetki.
User ALTER Özel kullanıcı
değişikliği.
Schema SELECT
ALTER
TAKE OWNERSHIP
Şema içindeki
nesnelere ait satır
seçimi.
Şema içindeki herhangi
bir nesnede
değişiklik.
Şema sahipliğini alma.
Table SELECT
ALTER
CONTROL
Tablo içindeki satır
seçimi.
Tablo değişikliği.
Tabloya ait tam yetki.
LOGIN AUTHENTICATION
Önceki sürümlerinde olduğu gibi SQL Server 2012 içinde de Windows
ve SQL Server login yapıları bulunmaktadır.
Server yapısında tanımlı rolleri görmek için SQL Server Management
Studio içinde bulunan Object Explorer kısmında Security klasörü altındaki
Logins klasörünü açmamız yeterlidir.
Şekilden de görülebileceği gibi hem Windows, hem de SQL Loginleri
burada bulunmaktadır.
Varsayılan olarak ilk kurulduğunda Administrator ve sa rolleri,
Windows ve SQL kimlik denetimleri için listede yer alır.
SQL Server Management Studio kullanılarak login oluşturmak için;
 Object Explorer kısmında Security klasörü altında bulunan
Logins
klasörü üzerinde sağ tuşa basılarak New Login seçeneğine tıklanır.
 Gelen iletişim kutusundan hangi güvenlik yapısı içinde oluşturmak
isterseniz onu seçip onaylayabilirsiniz. Oluşturacağınız hesap;
varsayılan olarak master veri tabanına eklenir.
Ancak daha yetki yoktur. Ayrıca burada açacağı veri tabanlarını,
izinleri ve yerleşik grup üyeliklerini de ayarlayabilirsiniz. Konumuz
ilerledikçe bu kavramların ne anlama geldiğini daha iyi
anlayacaksınız.
CREATE LOGIN kullanılarak login oluşturmak;
CRETAE LOGIN ifadesi eski sürümlerde bulunan sp_addlogin ve
sp_grantlogin sistem stored procedure'lerinin yerine kullanılır.
CRATE LOGIN ile kullanılabilecek tüm seçenekleri belirtecek olursak;
CREATE LOGIN login_ad
{ WITH seçenek_listesi1 | FROM kaynaklar}
kaynaklar ::=
WINDOWS [ WITH windows_seçenekleri[,...]]
| CERTIFICATE sertifikaad
| ASYMMETRIC KEY asym_key_ad
seçenek_listesi1 ::=
PASSWORD = şifre [ HASHED ]
[ MUST_CHANGE ] [, seçenek_listesi2 [,...]]
seçenek_listesi2 ::=
SID = sid
| DEFAULT_DATABASE = veri tabanı
| DEFAULT_LANGUAGE = dil
| CHECK_EXPIRATION = { ON | OFF }
| CHECK_POLICY = { ON | OFF }
[ CREDENTIAL = credential_ad]
windows_seçenekleri ::=
DEFAULT_DATABASE = veri tabanı
| DEFAULT_LANGUAGE = ad
Windows seçenekleri Windows authentication için kullanılırken,
seçeneklistesi1 ve 2 sadece SQL Server Authentication için kullanılabilir.
Şimdi burada bulunan özellikleri kısaca incelemeye çalışalım. Bu
özellikleri değiştirme işleminin SQL Server Management Studio içinden de
yapılabileceğini hatırlatmak isterim.
SEÇENEK AÇIKLAMA
HASHED Şifreyi karıştırarak daha
güvenli hale getirir.
MUST_CHANGE Kullanıcı ilk olarak SQL
Server'a bağlandığı zaman
mutlaka şifresini değiştirmeye
zorlar. Bu özellik kullanılacaksa
mutlaka CHECK_EXPIRATION ve
CHECK_P0LICY seçeneklerinin ON
olması gerekir.
CHECK_EXPIRATION ON (varsayılan ayar) olduğu
zaman şifre sonlanma zamanına
ait policy değeri aynen SQL
Server login içinde geçerli olur.
SQL Server Authentication için
geçerli olan bu ayar Windows
2000 Server üzerinde etkili olmaz.
CHECK POLICY Şifrenin güvenli olması için
karmaşık bir şekilde verilmesine
zorlar. Windovvs Server 2003 -
2008 üzerine kurulu SQL Server
için geçerli olup, Windovvs 2000
Server üzerine kurulu SQL Server
için ise Microsoft Security Baseline
Analyzer yapısını kullanır.
Şifre süresi dolduğu zaman hesap kilitlenecektir. Kilitli bir hesabı
açmak için yapısında uygulanacak değişiklik ALTER ifadesi ile
gerçekleştirilir.
ALTER LOGIN aysen
WITH PASSWORD = 'sifre1234' UNLOCK
Bir hesabı silmek için DROP ifadesinden yararlanılır.
DROP LOGIN aysen
Aynı zamanda Object Explorer içinden de silme yapılabilir.
WINDOWS AUTHENTICATİON:
Domain yapıları için tercih edilen bu yapı, Internet uygulamaları için
kullanılmamalıdır. Kapalı network yapılarında Windows Server güvenlik
mekanizmasının da devreye girmesi ve merkezi yönetim, en büyük
avantajlarındandır.
Burada atanacak kullanıcının mutlaka Domain içinde tanımlanması
gerekir. Eğer bir Workgroup içinde kullanacaksanız her bilgisayarda
burada oluşturulacak kullanıcının tanımlı olması gerekir.
Şimdi bir uygulama ile adım adım nasıl gerçekleştireceğimizi görelim.
Ben, kendi bağımsız bilgisayarınızda da test edebilmeniz için bir
Workgroup olarak örnekleyeceğim. Eğer Domain yapısında kullanacak
iseniz tek fark; burada tanımlanan kullanıcının Active Directory içinde
tanımlanmasıdır.
UYGULAMA:
 Bilgisayarımızda "aysen" isimli bir kullanıcı oluşturalım.
 My Computer üzerinde sağ tuşa basarak Manage seçeneğine
tıklayalım.
 Local Users and Groups altındaki Users klasörü üzerinde sağ
tuşa basarak New User seçeneğine tıklayalım.
 User name kısmına oluşturacağımız kullanıcı adını yazarak
Create butonuna basalım. Uygulamasının kolay olması için
şifre verilmemistir. Ancak güvenlik için siz her zaman şifre
vermelisiniz.
Bu kullanıcı ile Windows'a yeniden logon olarak, SQL Server'ı açmaya
çalışalım. Eğer registration problemi yaşarsanız, var olanı siliniz. Eğer
Database Engine görünmüyorsa, ilk olarak View menüsünden Registered
Servers seçeneğine tıklayalım.
Ardından sağ tuşa basarak, New Server Registration seçeneğine
tıklayalım.
 Gelen ekranın Server name kısmına; bağlanılacak Server adını
yazdıktan sonra Authentication bölümünden Windows
Authentication'ı seçerek Save butonuna basalım.
Bu işlemin sonunda, bağlantının gerçekleşmediğini göreceksiniz.
Bunun sebebi; bilgisayarda bu kullanıcı olmasına rağmen, SQL Server
içinde tanımlamamış olmamızdır.
 Bu işlemin başarılı olması için, kullanıcıyı SQL Server içindeki
Logins kısmında tanımlamamız gerekmektedir. Şimdi bunu
gerçekleştirelim.
Tekrar Administrator ile logon olarak SQL Server'ı açalım ve
Security klasörü altında bulunan Logins seçeneği üzerinde sağ
tuşa basarak, New Login seçeneğine tıklayalım.
 Gelen ekranda Login name kısmına bilgisayar(domain) adı ile
beraber kullanıcı adını yazarak onaylayalım. Kullanıcıyı Search
butonunu kullanarak da seçebilirsiniz.
 Artık bu kullanıcı ile logon olduğumuzda, SQL Server yapısına
erişebiliriz. Bunu test etmek için tekrar aysen kullanıcısı ile
logon olalım. SQL Server ile bağlantı sağladık. Ancak bazı
sistem nesneleri dışında, hiçbir kullanıcı tabanlı veri tabanlarına
erişemeyiz.
 Çünkü Authentication ile sadece SQL Server'a bağlantı
sağlanır. Yani; kapıyı açtık, ancak içinde işlem yapmak için,
henüz bir yetkimiz yok.
Burada bir kullanıcının Authentication yaptığı zaman, yetkisinin olup-
oimadığı Master veri tabanı içindeki syslogins tablosu kontrol edilerek
yapılır- Eğer ilgili kullanıcı varsa SQL Server'a bağlanır, yoksa reddedilir.
USER:
Bir önceki kısımda oluşturduğumuz LOGIN ile SQL Server sistemini
açabiliriz. Ancak veri tabanlarını açmak için User oluşturmak gerekir. Bu
CREATE USER ifadesi ile yapılacağı gibi, SQL Server Management Studio
içindeki Object Explorer kısmından veri tabanı içindeki Securıty
klasöründen de yapılabilir.
Burada daha önce Logins kısmında oluşturulmuş login adı seçildikten
sonra User name kısmına istenilen bir isim verilir. Bu isim Logın adı ile
aynı olabilir.
Varsayılan olarak tüm veri tabanları sysadmin sabit rolü ile ilişkili olan
dbo isimli kullanıcı adına sahiptir. Bu silinemez. Ayrıca guest isimli kullanıcı
master ve tempdb dışında herhangi bir veri tabanında kullanılmak üzere
aktif hale getirilebilir.
Ayrıca guest, sys ve INFORMATI0N_SCHEMA herhangi bir kullanıcı
hesabı ile ilişkilendirilmemiş loginlerdir.
Kullanılan tüm seçenekler;
CREATE USER user_ad
[ FOR {LOGIN login_ad
| CERTIFICATE cert_ad
| ASYMMETRIC KEY asym_Key_ad
}
]
( WITH DEFAULT_SCHEMA = şema_ad]
Değişiklik için ALTER USER ifadesi kullanılır. Silmek için ise DROP
USER ifadesi kullanılır.
EXECUTE AS:
Bir stored procedure veya fonksiyon içinde EXECUTE AS ifadesi
kullanılarak güvenlik için bir kullanıcı tanımlaması yapılabilir. Kullanım
şekli aşağıdaki gibidir;
EXECUTE AS { CALLER | ŞELF | OWNER | kullanıcı_ad }
Burada kullanılan seçenekler;
CALLER: Varsayılan ayar olup, kullanıcı tanımlaması için kullanılır.
SELF: Stored procedure veya fonksiyonu oluşturan
kullanıcı tanımlaması.
OWNER: Fonksiyonun sahibinin tanımlanması.
Kullanıcı_ad: Kullanıcı adıdır. Bu kullanıcı mutlaka sysadmin sabit
server rolünün veya db_owner sabit veri tabanı rolünün üyesi olmalıdır.
Ayrıca server üzerinde CONTROL SERVER, veri tabanı üzerinde
CONTROL veya login üzerinde IMPERSONATE izinine sahip olmalıdır.
CREAT PROCEDURE element33
WİTH EXECUTE AS SELF
AS
SELECT * FROM mudur.personel2
UYGULAMA:
1) Bir önceki uygulamada oluşturduğumuz aysen isimli kullanıcı ile bu
uygulamayı gerçekleştireceğiz. Object Explorer kısmından Connect açılır
listesi altından Database Engine seçeneğine tıklayalım.
2) 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ıni yazalim.
3) Bu sadece SQL Server içindeki aysen veri tabanına erişimi sağlar.
Bunu test etmek için bir önceki uygulamada yazdığımız ifadeyi tekrar
yazalım.
4) Ancak aysen veri tabanı içinde bir nesneye erişmek istediğimizde
yine hata mesajı ile karşılaşırız. Bunun için Nesne erişim hakkının olması
gerekir.

More Related Content

Viewers also liked

7.hafta kadir dikmen
7.hafta kadir dikmen7.hafta kadir dikmen
7.hafta kadir dikmenoktaygokgol
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 
Sql serverda indexkavrami
Sql serverda indexkavramiSql serverda indexkavrami
Sql serverda indexkavramioktaygokgol
 
Kullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsKullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsoktaygokgol
 
Sosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişimSosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişimSadullah M. Bağ
 
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuVeri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuoktaygokgol
 
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler Ayda Eris
 
Ms sql server architecture
Ms sql server architectureMs sql server architecture
Ms sql server architectureAjeet Singh
 

Viewers also liked (14)

7.hafta kadir dikmen
7.hafta kadir dikmen7.hafta kadir dikmen
7.hafta kadir dikmen
 
Hayrettin kunuk
Hayrettin kunukHayrettin kunuk
Hayrettin kunuk
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Sql serverda indexkavrami
Sql serverda indexkavramiSql serverda indexkavrami
Sql serverda indexkavrami
 
Sunu
SunuSunu
Sunu
 
Sunu
SunuSunu
Sunu
 
Kullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsKullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yons
 
8.hafta
8.hafta8.hafta
8.hafta
 
Sosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişimSosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişim
 
Konu anlatımı
Konu anlatımıKonu anlatımı
Konu anlatımı
 
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuVeri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
 
Konu anlatım
Konu anlatımKonu anlatım
Konu anlatım
 
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
 
Ms sql server architecture
Ms sql server architectureMs sql server architecture
Ms sql server architecture
 

Similar to Ittodev

İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16Cihan Özhan
 
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
 
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
 
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18Cihan Özhan
 
SQL Injection - Web siteniz tehdit altında mı?
SQL Injection - Web siteniz tehdit altında mı?SQL Injection - Web siteniz tehdit altında mı?
SQL Injection - Web siteniz tehdit altında mı?Dr. Kerem Koseoglu
 
Sql server 2012 kurulum sunu
Sql server 2012 kurulum sunuSql server 2012 kurulum sunu
Sql server 2012 kurulum sunuoktaygokgol
 
Exchange 2003ten Exchange 2010a GeçIş
Exchange 2003ten Exchange 2010a GeçIşExchange 2003ten Exchange 2010a GeçIş
Exchange 2003ten Exchange 2010a GeçIşofficeblogu
 
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
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şoktaygokgol
 
MSSQL Server Güvenlik (Security)
MSSQL Server Güvenlik (Security)MSSQL Server Güvenlik (Security)
MSSQL Server Güvenlik (Security)Abdülkadir BARLIK
 
Veritabani Programlama - Oracle Kurulumu
Veritabani Programlama - Oracle KurulumuVeritabani Programlama - Oracle Kurulumu
Veritabani Programlama - Oracle KurulumuSevdanur Genc
 

Similar to Ittodev (16)

İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 16
 
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
 
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
 
Pivot Unpivot
Pivot UnpivotPivot Unpivot
Pivot Unpivot
 
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 18
 
SQL Injection - Web siteniz tehdit altında mı?
SQL Injection - Web siteniz tehdit altında mı?SQL Injection - Web siteniz tehdit altında mı?
SQL Injection - Web siteniz tehdit altında mı?
 
Sql server 2012 kurulum sunu
Sql server 2012 kurulum sunuSql server 2012 kurulum sunu
Sql server 2012 kurulum sunu
 
Sunuuuuu
SunuuuuuSunuuuuu
Sunuuuuu
 
Sunuuuuu
SunuuuuuSunuuuuu
Sunuuuuu
 
Exchange 2003ten Exchange 2010a GeçIş
Exchange 2003ten Exchange 2010a GeçIşExchange 2003ten Exchange 2010a GeçIş
Exchange 2003ten Exchange 2010a GeçIş
 
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̇
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇ş
 
MSSQL Server Güvenlik (Security)
MSSQL Server Güvenlik (Security)MSSQL Server Güvenlik (Security)
MSSQL Server Güvenlik (Security)
 
Recep rapor 3 sunu
Recep rapor 3 sunuRecep rapor 3 sunu
Recep rapor 3 sunu
 
Recep rapor 3 sunu
Recep rapor 3 sunuRecep rapor 3 sunu
Recep rapor 3 sunu
 
Veritabani Programlama - Oracle Kurulumu
Veritabani Programlama - Oracle KurulumuVeritabani Programlama - Oracle Kurulumu
Veritabani Programlama - Oracle Kurulumu
 

Ittodev

  • 1. TRANSACTİON TRANSACTlON NEDİR? Transaction: Birden çok işlemin bir arada yapıldığı durumlarda, eğer parçayı oluşturan işlemlerden herhangi birinde sorun olursa, tüm işlemleri iptal etmeyi sağlar. Örneğin: Bir bankadan başka bir bankaya, 1000 Türk Lirası transfer edeceksiniz. İlk bankadan 1000 TL eksilirken, diğer bankaya 1000 TL ilave edilmesi gerekir. Burada iki adet Transact-SQL komutu işler. Ancak ilki çalıştıktan sonra diğeri çalışmaz ise, ilk bankadan 1000 TL eksilir ama ikinci bankaya 1000 TL ilave olmaz. İşte bu tür sorunlar ile karşılaşmamak için; Transaction yapısını kullanmamız gerekir. iki tür Transaction vardır. Bunlar; Implicit Transaction: Her bir Transact-SQL komutu, transaction gibi çalışır. INSERT, UPDATE, DELETE ifadeleri gibi. Buna geçiş yapmak için SET IMPLICIT_TRANSACTIONS ON ifadesi kullanılır. Explicit Transaction veya Kullanıcı Tanımlı Transaction: Buradaki Transaction ifadeleri; BEGIN TRANSACTON ve COMMIT TRANSACTİON cümlecikleri arasında bir grup şeklindedir. Bir kullanıcı; bir kaydetme noktasını veya işaretini transaction içine koyabilir. Bu sayede, sorun olduğu zaman nereden itibaren iptal işlemini gerçekleştireceğini belirtebilir. Transaction; ya tamamlanmalı veya Rollback ile iptal olmalıdır. İşte bu iptal noktası, konulan iz ile belirlenebilir. SQL Server içinde çeşitli Transaction kullanımları vardır;
  • 2. BEGIN TRAN[SACTION] [transaction_adı|@tran_adı_değeri[WlTH MARK['açıklama']]] Burada eğer WITH MARK kullanılırsa, hata durumunda nereden itibaren işlemlerin iptal edileceği belirlenir. SAVE TRAN[SACTION]{kaydetme_noktası|kaydetme_noktası_değerİ} BEGIN DISTRIBUTED TRAN[SACTION] [transaction_adı|@tran_adı_değeri] COMMIT TRAN[SACTION] [transaction_adı|@tran_adı_değeri] ROLLBACK TRAN[SACTION] [transaction_adı|@tran_adı_değeri|kaydetme_noktası|kaydetme_no ktası _değeri] @@trancount ifadesi ile ilişkili transaction'ların sayıları öğrenilebilir. Global bir değişken gibi davranan @trancount, her BEGIN ifadesinden sonra bir artar ve her Rollback ifadesinden sonra ise bir azalır. Devam eden bir transaction ile ilgili bilgiler edinmek için, DBCC OPENTRAN ifadesi kullanılır. Bir Transaction işlemi içine yazıldığında, aşağıdaki ifadelere benzer bir çıktı olur; Transaction Information fordatabase 'AYSEN' Oldest active transaction: SPID (sen/er process İD) : 52 UID (user İD): 1 Name : user_transaction LSN : (23:334:1) Start time : Jan 30 2004 1:21:29:553PM
  • 3. Transaction yapısında diğer kullanacağımız bir özellik de LOCK, yani kilitlenmedir. Buradaki amaçlardan bazıları; Transaction işlemi boyunca okuma, yeni kayıt, değişiklik ve silme yapılamamasıdır. Bunun için SET TRANSACTİON ISOLATION LEVEL ifadesinden sonra, çeşitli parametreler verilir. Bunlar: READ COMMITTED: Transaction işlemi sırasında değişikliğe uğrayan ancak, henüz onaylanmamış kayıtların (dirty read) okunmasına izin vermez. READ UNCOMMITTED: Transaction işlemi sırasında değişikliğe uğrayan ancak, henüz onaylanmamış kayıtların okunmasına izin verir. Bu bazen sorunlara yol açabilir. En az bloklamaya sahip seçenektir. Ayrıca sadece bu ifade ile snapshot devreye sokulabilir veya çıkarılabilir. READ_COMMITTED_SNAPSHOT OFF veya ON. REPEATABLE READ: Transaction sonuna kadar diğer kullanıcıların kayıtları okumasına izin vermez. Ancak giriş yapılabilir. SERIALIZABLE: Transaction sonuna kadar diğer kullanıcıların kayıtları güncelleme ve yeni kayıt girmesine izin vermez. En kısıtlayıcı seçenektir. Yukarıdaki komutlardan sonra DBCC USEROPTIONS ile SOL Server'daki meydana gelen değişiklikler öğrenilebilir.
  • 4. Eğer Transaction içinde çeşitli sebeplerden dolayı, kodların çalışması uzun süre alır ve bloklamadan dolayı işlem yapamazsa, ne yapacağız? Bunun için; Transaction yapısına bir süre koyarız ve bu süre sonunda ister bitsin, ister bitmesin bloklama ortadan kalkar. Bunun için kullanılan komut; SET LOCK_TIMEOUT milisaniye_süre Aşağıdaki yazılım ile 120 saniye sonra blok ortadan kalkar; SET LOCK TIMEOUT 120000 Bunu görmek için de: SELECT @@lock_timeout sistem fonksiyonu kullanılır. Eğer bir blok yoksa -1 değerini döndürür. Kilit bilgisi aşağıdaki ifade ile öğrenilebilir:
  • 5. UYGULAMA : 1) Veri tabanımızın içinde "guvenbank" isimli yeni bir tablo oluşturarak tabloyu aşağıdaki gibi tasarlayalım. 2) Aşağıdaki kayıtları girelim. 3) "kazanbank" isimli yeni bir tablo oluşturarak, tabloyu aşağıdaki gibi tasarlayalım.
  • 6. 4)İçine aşağıdaki kayıtları girelim. 5) SQL Query Editör içine aşağıdaki kodu yazalım ve çalıştıralım. begin tran transfer1 update guvenbank set mevduat=mevduat-800 where hesapno=1907 update kazanbank set g_mevduat=g_mevduat+800 where g_hesapno=2007 if not exists( select * from kazanbank where g_hesapno=2007 ) begin raiserror ('işlem gerçekleşmedi',10,1) rollback tran transfer1 end else begin raiserror (' İşlem başarılı',16,1) commit tran end Yukarıdaki kodu çalıştırdığımız zaman, hiçbir tabloda değişiklik olmayacaktır. Çünkü koşulumuzda verilen hesap numarası; eğer "kazanbank" içinde yoksa işlemi iptal et diyoruz. 2007 numaralı hesap numarası "kazanbank" içinde olmadığından, iik SQL ifadesi doğru bile olsa, onu da iptal ederek hiçbir işlem gerçekleşmiyor.
  • 7. Şimdi doğrusunu yaparak, iki komutun da çalıştığını gözlemleyelim. Bunun için, kodumuzu aşağıdaki gibi yazalım ve çalıştıralım. Çalıştırdığımızda görüntü şekildeki gibi olacaktır. Bunun sonucunda "guvenbank" içindeki 1907 numaralı hesaptan 800 TL azalacak ve "kazanbank" içindeki 1907 numaralı hesaba 800 TL ilave olacaktır.
  • 8. GÜVENLİK SQL Server 2012'de daha önce olduğu gibi Windows ve SQL Server güvenlik sistemi olmak üzere iki mekanizma bulunmaktadır. Yeni sürümünde bunlara ek olarak SQL Server mekanizması için policy uygulanabilmektedir. Dört uygulama grubunda toplayacak olursak;  Platform  Kimlik Denetimi  Nesneler  Uygulamalar Stored Procedure, Function gibi programlanabilir yapılar için çalıştırma yetkisi CREATE ifadesi ile belirlenebilir. Windows Server 2012 passvvord policy veya yerleşik SQL Server passvvord policy kullanılarak karmaşık ve güvenli şifreleme sağlanabilir. AUTHENTİCATİON NEDİR? SQL Server'a bağlanmak için yapılan kontrole; authentication (kimlik denetimi) adı verilir. Bu mekanizma, iki şekilde işleyebilir. Windows Authentication veya SOL Authentication. Windows Authentication: SQL Server'a bağlanmak için bu Authentication mekanizması seçilirse; kimlik denetimi Windows tarafından yapılır. Yani kullanıcı, SOL Server'a erişebilmek için Windows'a logon olduğu kullanıcı adı ve şifre ile SQL Server'a bağlanır. Bundan dolayı bu kullanıcının adının ve şifresinin, SQL Server içine eklenmesi gerekir. Özellikle Active Directory yapısında çalışan SQL Server için, oldukça kullanışlı bir seçenektir.
  • 9. SOL Server Authentication: Bu mekanizmada ise yetkili kullanıcı adı ve şifre, SOL Server sistem yöneticisi tarafından SQL Server içinde tanımlanır. Windows yapısından bağımsız olarak çalışır. SOL Server içinde iki adet authentication (kimlik denetimi) mode bulunmaktadır. Bunlar; Windows Authentication Mode ve Mixed Authentication Mode. Mixed Authentication; Active Directory içinden Windows Kimlik Denetimini, Kerberos kimlik denetimi ile SOL Server girişini, hem de SOL Server passvvord policy yapısını destekler. SQL Server 2012 SQL Authentication ile Oturum Açılması Sql server kurulum sırasında Windows Authentication modda kurulup Mixed mod seçilmez ise sadece Windows Authentication modda oturum açılabilmektedir. Bazı uygulamaların yazılım mimarisi gereği sadece Sql Authentication ile çalışmak zorundadır. Bu nedenle bizde bu özelliği nasıl aktif edeceğimizi ele alacağız. Elimizde kurulu olan Sql Server 2012 ile Sql Authentication modda oturum açmak istediğimizde aşağıdaki hata bizi karşılamaktadir. Bu nedenle Windows Authentication modda oturum açalım.
  • 10. Windows Authentication modda sorunsuzca oturum açıldı. Security altında yer alan logins kısmına baktığımızda kurulumun Windows Authentication modda yapılmış olmasından dolayı varsayılanda “sa” kullanıcısının disable olarak geldiğini görmekteyiz.
  • 11. SQL Authentication modda oturum yapabilmek için instance üzerinde sağ tıklayarak “properties“ menüsüne giriş yapalım. Açılan ekranda “Sql Server and Windows Authentication mode” seçimini yaparak hem Windows hem Sql Authentication oturum açabilir duruma geleceğiz.
  • 12. Yukarıdaki ekranı “OK” ile geçtikten sonra işlemin geçerli olabilmesi için SQL Server servisini yeniden başlatmamız gerektiği bilgisi bize aktarılmaktadır. “OK” tıklayarak bu ekranı geçelim. Yukarıdaki işlemi tamamladıktan sonra “sa” kullanıcısını enable hale getirmemiz gerekmektedir. Bu nedenle “sa” kullanıcısı üzerinde sağ tıklayarak “properties” menüsünü açalım.
  • 13. Açılan ekrandaki “General” tabında “sa” kullanıcımıza bir şifre verelim. “Server Role” tabında ise “Login” kısmını “Enable” duruma getirelim ve “OK” ile tamamlayalım.
  • 14. Resimde de görüldüğü gibi “sa”kullanıcısı üzerindeki kırmızı ok kalktı ve aktif hale geldi.
  • 15. Şimdi tekrardan “SQL Authentication” modda oturum açmaya çalıştığımızda yine hata almaktayız. Yaptığımız işlemlerin tamamının aktif olabilmesi adına “SQL Server” servisini yeniden başlatmamız gerekmektedir. Bu nedenle “SQL Server” servisine sağ tıklayarak “Restart” edelim.
  • 16. Şimdi tekrardan “SQL Authentication” modda oturum açmayı deneyelim. Şu anda instance ekranında görüldüğü gibi “SQL Authentication” modda “sa” kullanıcısı ile oturum açmış durumdayız.
  • 17. Windows Authentication Mode'un Avantajları: Birçok önemli özellik sağlar. Örneğin: Windows yapısı ile gelen güvenlik mekanizması, izleme, şifre süresinin olması, en az şifre uzunluğu gibi. Tek bir kullanıcı hesabı gibi, bir Windows grubu eklenebilir. Böylelikle birden fazla Windows kullanıcısı yönetilebilir. Kullanıcılar SQL Server'ı oldukça hızlı açar. Bağlanırken şifreyi hatırlamak gibi, bir sorunu olmaz. Mixed Mode'un Avantajları: Windows Client'ları dışındaki sistemlerin de SOL Server bünyesine bağlanmasını sağlar. Hem karışık yapıdaki sistemler, hem de Internet Client'ları için kullanılması gereken bir yapıdır. Not: SQL Server; BULITINAdministrators ve sa hesapları adında iki varsayılan yönetici hesaba sahiptir. Eğer Mixed Mode kullanıyorsanız "sa" hesabının şifresini güvenlik gerekçesi ile boş bırakmayınız. Varsayılan olarak bir SOL Server yapısı Windows authentication yapısındadır. SOL Server login oluştursak bile bu hesap ile SOL Server yapısına bağlanamayız. Bunun için SQL Server mutlaka SQL Server
  • 18. Authentication and Windows Authentication olarak yapılandırılmalıdır. PRINCIPALS: SQL Server sistemi içinde kullanılan kimlik denetimi (Authenticate) tanımlamalarına referans olan ifadeye principals adı verilir. Principals; bir veri tabanı içinde herhangi bir nesneyi açmak için gerekli olan izin için kimlik denetimi tanımlamasıdır. Üç bölümden oluşur; Bölüm Principals Windows Windows lokal kullanıcı hesabı Windows domain kullanıcı hesabı Windows groupSQL Server SQL Server login SQL Server role Database User Database group Application role SECURABLES: SQL Server içindeki nesneleri açmak için izin yetkilerini düzenlemeye securables denir. Güvenlik modelinizi düzenlerken farklı securables alanlarını bilmeniz gerekir. Kullanımı yukarıdaki gibidir. Üç farklı alandan oluşur; Alan İçerik Server Logins HTTP endpoints Certificates Event notifications Databases Database Users Roles Application Roles Assemblies Message types Service contracts Services Full-text catalogs DDL events
  • 19. Schemas Schema Tables Views Functions Procedures Queues Types Rules Defaullts Synonyms Aggregates PERMİSSİONS: Bölümleri açıp yönetmek için gerekli olan kurallar dizisine permissions adı verilir. Tabiki bu, Securables yapısına sahip Principals çerçevesinde gerçekleşir. Bunlar birbirlerine bağlıdır. SQL Server içindeki permissions, grant(yetki ver), revoke(yetkiyi sil) ve deny(yasakla) olmak üzere üç temel yapıya sahiptir. Aşağıdaki listede önemli izinlerin bir kısmı verilmiştir. Securable Permission Açıklama Server CONNECT_SQL CREATE LOGİN ALTER ANY LOGİN CONTROL SERVER Server'a bağlanma. Hesap oluşturma. Server içindeki hesap değişikliği. Tüm sistem yönetim kontrolü. Login ALTER IMPERSONATE Hesap değişikliği. Genel hesaplar. Database CREATE TABLE ALTER ANY USER CONTROL Veri tabanı içinde tablo oluşturma. Veri tabanı içinde kullanıcı değişikliği Veri tabanı için tam yetki. User ALTER Özel kullanıcı değişikliği.
  • 20. Schema SELECT ALTER TAKE OWNERSHIP Şema içindeki nesnelere ait satır seçimi. Şema içindeki herhangi bir nesnede değişiklik. Şema sahipliğini alma. Table SELECT ALTER CONTROL Tablo içindeki satır seçimi. Tablo değişikliği. Tabloya ait tam yetki. LOGIN AUTHENTICATION Önceki sürümlerinde olduğu gibi SQL Server 2012 içinde de Windows ve SQL Server login yapıları bulunmaktadır. Server yapısında tanımlı rolleri görmek için SQL Server Management Studio içinde bulunan Object Explorer kısmında Security klasörü altındaki Logins klasörünü açmamız yeterlidir. Şekilden de görülebileceği gibi hem Windows, hem de SQL Loginleri burada bulunmaktadır. Varsayılan olarak ilk kurulduğunda Administrator ve sa rolleri, Windows ve SQL kimlik denetimleri için listede yer alır.
  • 21. SQL Server Management Studio kullanılarak login oluşturmak için;  Object Explorer kısmında Security klasörü altında bulunan Logins klasörü üzerinde sağ tuşa basılarak New Login seçeneğine tıklanır.  Gelen iletişim kutusundan hangi güvenlik yapısı içinde oluşturmak isterseniz onu seçip onaylayabilirsiniz. Oluşturacağınız hesap; varsayılan olarak master veri tabanına eklenir. Ancak daha yetki yoktur. Ayrıca burada açacağı veri tabanlarını, izinleri ve yerleşik grup üyeliklerini de ayarlayabilirsiniz. Konumuz ilerledikçe bu kavramların ne anlama geldiğini daha iyi anlayacaksınız.
  • 22. CREATE LOGIN kullanılarak login oluşturmak; CRETAE LOGIN ifadesi eski sürümlerde bulunan sp_addlogin ve sp_grantlogin sistem stored procedure'lerinin yerine kullanılır. CRATE LOGIN ile kullanılabilecek tüm seçenekleri belirtecek olursak; CREATE LOGIN login_ad { WITH seçenek_listesi1 | FROM kaynaklar} kaynaklar ::= WINDOWS [ WITH windows_seçenekleri[,...]] | CERTIFICATE sertifikaad
  • 23. | ASYMMETRIC KEY asym_key_ad seçenek_listesi1 ::= PASSWORD = şifre [ HASHED ] [ MUST_CHANGE ] [, seçenek_listesi2 [,...]] seçenek_listesi2 ::= SID = sid | DEFAULT_DATABASE = veri tabanı | DEFAULT_LANGUAGE = dil | CHECK_EXPIRATION = { ON | OFF } | CHECK_POLICY = { ON | OFF } [ CREDENTIAL = credential_ad] windows_seçenekleri ::= DEFAULT_DATABASE = veri tabanı | DEFAULT_LANGUAGE = ad Windows seçenekleri Windows authentication için kullanılırken, seçeneklistesi1 ve 2 sadece SQL Server Authentication için kullanılabilir. Şimdi burada bulunan özellikleri kısaca incelemeye çalışalım. Bu özellikleri değiştirme işleminin SQL Server Management Studio içinden de yapılabileceğini hatırlatmak isterim. SEÇENEK AÇIKLAMA HASHED Şifreyi karıştırarak daha güvenli hale getirir. MUST_CHANGE Kullanıcı ilk olarak SQL Server'a bağlandığı zaman mutlaka şifresini değiştirmeye zorlar. Bu özellik kullanılacaksa mutlaka CHECK_EXPIRATION ve CHECK_P0LICY seçeneklerinin ON olması gerekir. CHECK_EXPIRATION ON (varsayılan ayar) olduğu zaman şifre sonlanma zamanına ait policy değeri aynen SQL Server login içinde geçerli olur. SQL Server Authentication için
  • 24. geçerli olan bu ayar Windows 2000 Server üzerinde etkili olmaz. CHECK POLICY Şifrenin güvenli olması için karmaşık bir şekilde verilmesine zorlar. Windovvs Server 2003 - 2008 üzerine kurulu SQL Server için geçerli olup, Windovvs 2000 Server üzerine kurulu SQL Server için ise Microsoft Security Baseline Analyzer yapısını kullanır. Şifre süresi dolduğu zaman hesap kilitlenecektir. Kilitli bir hesabı açmak için yapısında uygulanacak değişiklik ALTER ifadesi ile gerçekleştirilir. ALTER LOGIN aysen WITH PASSWORD = 'sifre1234' UNLOCK Bir hesabı silmek için DROP ifadesinden yararlanılır. DROP LOGIN aysen Aynı zamanda Object Explorer içinden de silme yapılabilir. WINDOWS AUTHENTICATİON: Domain yapıları için tercih edilen bu yapı, Internet uygulamaları için kullanılmamalıdır. Kapalı network yapılarında Windows Server güvenlik mekanizmasının da devreye girmesi ve merkezi yönetim, en büyük avantajlarındandır.
  • 25. Burada atanacak kullanıcının mutlaka Domain içinde tanımlanması gerekir. Eğer bir Workgroup içinde kullanacaksanız her bilgisayarda burada oluşturulacak kullanıcının tanımlı olması gerekir. Şimdi bir uygulama ile adım adım nasıl gerçekleştireceğimizi görelim. Ben, kendi bağımsız bilgisayarınızda da test edebilmeniz için bir Workgroup olarak örnekleyeceğim. Eğer Domain yapısında kullanacak iseniz tek fark; burada tanımlanan kullanıcının Active Directory içinde tanımlanmasıdır. UYGULAMA:  Bilgisayarımızda "aysen" isimli bir kullanıcı oluşturalım.  My Computer üzerinde sağ tuşa basarak Manage seçeneğine tıklayalım.  Local Users and Groups altındaki Users klasörü üzerinde sağ tuşa basarak New User seçeneğine tıklayalım.
  • 26.  User name kısmına oluşturacağımız kullanıcı adını yazarak Create butonuna basalım. Uygulamasının kolay olması için şifre verilmemistir. Ancak güvenlik için siz her zaman şifre vermelisiniz.
  • 27. Bu kullanıcı ile Windows'a yeniden logon olarak, SQL Server'ı açmaya çalışalım. Eğer registration problemi yaşarsanız, var olanı siliniz. Eğer Database Engine görünmüyorsa, ilk olarak View menüsünden Registered Servers seçeneğine tıklayalım. Ardından sağ tuşa basarak, New Server Registration seçeneğine tıklayalım.  Gelen ekranın Server name kısmına; bağlanılacak Server adını yazdıktan sonra Authentication bölümünden Windows Authentication'ı seçerek Save butonuna basalım. Bu işlemin sonunda, bağlantının gerçekleşmediğini göreceksiniz. Bunun sebebi; bilgisayarda bu kullanıcı olmasına rağmen, SQL Server içinde tanımlamamış olmamızdır.  Bu işlemin başarılı olması için, kullanıcıyı SQL Server içindeki Logins kısmında tanımlamamız gerekmektedir. Şimdi bunu
  • 28. gerçekleştirelim. Tekrar Administrator ile logon olarak SQL Server'ı açalım ve Security klasörü altında bulunan Logins seçeneği üzerinde sağ tuşa basarak, New Login seçeneğine tıklayalım.  Gelen ekranda Login name kısmına bilgisayar(domain) adı ile beraber kullanıcı adını yazarak onaylayalım. Kullanıcıyı Search butonunu kullanarak da seçebilirsiniz.  Artık bu kullanıcı ile logon olduğumuzda, SQL Server yapısına erişebiliriz. Bunu test etmek için tekrar aysen kullanıcısı ile logon olalım. SQL Server ile bağlantı sağladık. Ancak bazı sistem nesneleri dışında, hiçbir kullanıcı tabanlı veri tabanlarına erişemeyiz.
  • 29.  Çünkü Authentication ile sadece SQL Server'a bağlantı sağlanır. Yani; kapıyı açtık, ancak içinde işlem yapmak için, henüz bir yetkimiz yok. Burada bir kullanıcının Authentication yaptığı zaman, yetkisinin olup- oimadığı Master veri tabanı içindeki syslogins tablosu kontrol edilerek yapılır- Eğer ilgili kullanıcı varsa SQL Server'a bağlanır, yoksa reddedilir. USER: Bir önceki kısımda oluşturduğumuz LOGIN ile SQL Server sistemini açabiliriz. Ancak veri tabanlarını açmak için User oluşturmak gerekir. Bu CREATE USER ifadesi ile yapılacağı gibi, SQL Server Management Studio içindeki Object Explorer kısmından veri tabanı içindeki Securıty klasöründen de yapılabilir. Burada daha önce Logins kısmında oluşturulmuş login adı seçildikten sonra User name kısmına istenilen bir isim verilir. Bu isim Logın adı ile aynı olabilir. Varsayılan olarak tüm veri tabanları sysadmin sabit rolü ile ilişkili olan dbo isimli kullanıcı adına sahiptir. Bu silinemez. Ayrıca guest isimli kullanıcı
  • 30. master ve tempdb dışında herhangi bir veri tabanında kullanılmak üzere aktif hale getirilebilir. Ayrıca guest, sys ve INFORMATI0N_SCHEMA herhangi bir kullanıcı hesabı ile ilişkilendirilmemiş loginlerdir. Kullanılan tüm seçenekler; CREATE USER user_ad [ FOR {LOGIN login_ad | CERTIFICATE cert_ad | ASYMMETRIC KEY asym_Key_ad } ] ( WITH DEFAULT_SCHEMA = şema_ad] Değişiklik için ALTER USER ifadesi kullanılır. Silmek için ise DROP USER ifadesi kullanılır. EXECUTE AS: Bir stored procedure veya fonksiyon içinde EXECUTE AS ifadesi kullanılarak güvenlik için bir kullanıcı tanımlaması yapılabilir. Kullanım şekli aşağıdaki gibidir; EXECUTE AS { CALLER | ŞELF | OWNER | kullanıcı_ad } Burada kullanılan seçenekler; CALLER: Varsayılan ayar olup, kullanıcı tanımlaması için kullanılır. SELF: Stored procedure veya fonksiyonu oluşturan kullanıcı tanımlaması. OWNER: Fonksiyonun sahibinin tanımlanması.
  • 31. Kullanıcı_ad: Kullanıcı adıdır. Bu kullanıcı mutlaka sysadmin sabit server rolünün veya db_owner sabit veri tabanı rolünün üyesi olmalıdır. Ayrıca server üzerinde CONTROL SERVER, veri tabanı üzerinde CONTROL veya login üzerinde IMPERSONATE izinine sahip olmalıdır. CREAT PROCEDURE element33 WİTH EXECUTE AS SELF AS SELECT * FROM mudur.personel2 UYGULAMA: 1) Bir önceki uygulamada oluşturduğumuz aysen isimli kullanıcı ile bu uygulamayı gerçekleştireceğiz. Object Explorer kısmından Connect açılır listesi altından Database Engine seçeneğine tıklayalım. 2) 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ıni yazalim. 3) Bu sadece SQL Server içindeki aysen veri tabanına erişimi sağlar. Bunu test etmek için bir önceki uygulamada yazdığımız ifadeyi tekrar yazalım.
  • 32. 4) Ancak aysen veri tabanı içinde bir nesneye erişmek istediğimizde yine hata mesajı ile karşılaşırız. Bunun için Nesne erişim hakkının olması gerekir.