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.