Örnekler, Rasgele Değer, Login işlemleri ve Yedekleme 13.DERS Örnekler, Rasgele Değer, Login işlemleri ve Yedekleme BUKET DOĞAN
Haftanın Hedefi SQL server da yedekleme, veritabanı taşıma ve login işlemlerinin nasıl gerçekleştirileceğini öğrenmek ve uygulama yapmak Daha önce öğrenilen SQL deyimlerini kullanabilme
TRY/CATCH derleme hatalarını yakalar mı. BEGIN TRY SELECT TRY/CATCH derleme hatalarını yakalar mı? BEGIN TRY SELECT * FROM OlmayanTablo; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS HataKodu, ERROR_MESSAGE() AS HataMesajı; END CATCH Çözüm:Dinamik SQL veya Saklı yordam kullanmak
BEGIN TRY PRINT 'İşleme Başla'; DECLARE @Sorgum NVARCHAR(2000) SET @Sorgum = 'SELECT * FROM OlmayanTablo;' EXEC sp_executesql @Sorgum END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS HataKodu, ERROR_MESSAGE() AS HataMesajı; END CATCH;
T-SQL Rastgele Sayi Üretmek için Rand Fonksiyonunun Kullanimi Sql Server tarafinda rastgele bir sayi üretmek istedigimiz zaman rand fonksiyonunu kullanabiliriz. Yazim Sekli: RAND ( [ seed ] ) Seed degiskeni int,smallint veya tinyint bir deger alir, Seed için bir deger girilmezse SQL Server rastgele bir seed degeri atar. Ayni seed degeri için SQL Database Engine her zaman ayni degeri üretir. Dönüs Degeri: Rand fonksiyonu float bir sayi döndürür. Bu sayi 0 ile 1 arasinda bir deger alir. 0.3231123312321 gibi Rand fonksiyonunu ard arda ayni seed degeri ile çagrilmasi sonucu hep ayni sayi olusur. Eger bir sql baglantisinda Rand fonksiyonu bir kez seed verilerek kullanilirsa, bu baglanti boyunca çalistirilacak tüm Rand fonksiyonlari sabit sonuç üretmeye baslarlar.
DECLARE @sayac int; SET @sayac = 1; WHILE @sayac < 4 BEGIN SELECT RAND() Rastgele_Sayi SET @sayac = @sayac + 1 END; Rand fonksiyonu kullanarak tam sayi üretmek: Rand fonksiyonu 0 ile 1 arasinda float sayilar üretir. Eger siz 1,5,100 vb gibi tam sayilar üretmek istiyorsaniz rand fonksiyonu sonucu dönen degeri bir tam sayi ile çarpip int e çevirmelisiniz. Örnegin 0 ile 100 arasi bir rastgele sayi üretmek istiyorsaniz; select CONVERT(int,rand()*100)
DECLARE @counter smallint; SET @counter = 1; WHILE @counter < 5 BEGIN SELECT round (RAND()*100,1) as Random_Number SET @counter = @counter + 1 END; GO
Yedekleme işlemi, veritabanı üzerinde yer alan tüm verilerin kaybolma ve bozulma riskine karşı bir örneğinin saklanmasıdır. Daha sonra bu yedeklenen veriler, ihtiyaç duyulduğunda geri yüklenerek olası veri kayıpları önlenmiş olur.
Yedekleme Türleri Yedek alma işlemine geçmeden önce Sql Server Backup tiplerini bilmek gerekir. Sql Server üzerinde 3 farklı backup çeşiti bulunmaktadır. Full Backup: Yedeklenme anı itibariyle veritabanındaki herşey yedeğin içine kopyalanır. Elimizde bulunan bir full backup dosyası ile başka bir şeye ihtiyaç duymadan yedeğin alındığı tarihe veritabanı geri yüklenebilir. Differential Backup: Çok fazla verinin bulunduğu büyük veritabanlarını sürekli full backup ile yedeklemek, hem uzun işlem süresi hem de gereksiz disk kullanımlarına neden olur. Böyle durumlarda sadece değişen kısımların yedeğinin alınması işlemidir. Transaction Log Backup: Transaction, ilgili veritabanında yapılan her işlemin bilgilerinin tutulduğu log dosyasıdır. Yedekleme sadece bu kayıtları kapsar.
1.Adım Backup Veritabanımızın üzerinde sağ tıklayarak Tasks–>Backup seçeneğine tıklıyoruz. Yedek alma işlemiyle ilgili ayarların yapıldığı aşağıdaki pencere açılacak. Pencere 3 ana bölüme ayrılmış durumda Source-Backup Settings-Destination.
2. Adım Restore Elimizde mevcut olan bir backup dosyası restore edildiğinde, aksi belirtilmediği sürece mevcut veritabanı üzerine yazılır. Daha önce oluşturduğumuz .bak uzantılı dosya ile veritabanımızı restore edelim. Öncelikle resimdeki gibi Database–>Restore Database seçeneğine tıklıyoruz.
Var olan Veritabanının SQL kodlarını oluşturma Veritabanı üzerinde sağ tuş Tasks/Generate Scripts ile gelen pencerede Next ile aşama aşama ilerlenir. Hangi öğelerin SQL kodlarının oluşturulacağı seçilir.
Script Bir sonraki ekrandaki Advanced kısmından eğer dosya içindeki veriler de dahil edilmek isteniyorsa Schema and Data seçeneği seçilir. Daha sonra ilerlenerek istenilen konuma sql uzatılı metin dosyasının oluşturulması sağlanır
Script
Server-Güvenlik -Security 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.
Server-Güvenlik -Security Server üzerinde sağ tuş ile Properties-Özellikler seçilir ve Security kısmından SQL server and Windows Authentication seçilir.
Server /Logins kısmında tanımlı login ler görülmektedir.
SQL Server'da Login nesnesi bir sunucuya giriş için, User ise sunucu altındaki bir veritabanına giriş için kullanılır. Windows kullanıcıları da login'e bağlanabilir.
SA-Server Admin
Logins
Özellikler-Güvenlik
LOGIN Yaratma SQL Server Authentication için: CREATE LOGIN loginAdı WITH PASSWORD = 'şifresi' MUST_CHANGE Windows Authentication için: CREATE LOGIN [domainAdı\loginAdı] FROM WINDOWS Opsiyonel olarak varsayılan veritabanı adı ve varsayılan dil seçilebilir: DEFAULT_DATABASE = yeniDB DEFAULT_LANGUAGE = Turkish
USER Yaratma Genel Kullanım: CREATE USER kullanıcıAdı FOR LOGIN loginAdı Kullanıcı yaratılırken varsayılan şema atanabilir: CREATE LOGIN Elif WITH PASSWORD = ‘123' CREATE USER Uelif FOR LOGIN Elif
Roller Rol, birçok yetkinin bir araya getirilmesi ile oluşan yetki gruplarına verilen isimdir. Kişilere tek tek yetkiler verildiğinde, sonradan yetkilerin değiştirilmesi gerekirse, yine tek tek o kişilere değişikliğin uygulanmasını gerektirecektir. Oysa ki kişilere bir rol verilirse, bu rolün yetkileri değiştirilince o role sahip olan tüm kişilerin yetkileri değiştirilmiş olur. SQL Server üzerindeki yetkili kullanıcılar için sabit sunucu rolleri, veritabanına erişim yetkisi olan kullanıcılar için ise sabit veritabanı rolleri mevcuttur.
Sabit Sunucu Rolleri Dış dosyalardan alınan verileri tablolara yerleştirebilme (BULK INSERT) VT oluşturma ve değiştirme VT yedek (backup) dosyalarını yönetme Sunucu işlemlerini kontrol etme (erişimleri sonlandırabilir) Genel kullanıcılar için en yetkisiz rol Login, Rol yaratma gibi güvenlik işleri Sunucu temelli ayarlamalar (veritabanını açıp, kapatabilme yetkisi) Birbirine bağlı sunucuların kurulumu ve idaresi (SQL Server Replication) Tüm işleri yapabilen en yetkili rol (sa kullanıcısı bu rolün üyesidir)
Sabit Veritabanı Rolleri Kullanıcı yaratır, yetki verir Yedek (backup) alır Tüm tablolardaki verileri sorgulayabilir Tüm tablolar üzerinde değişiklik (DML işlemleri) yapabilir Veritabanında DDL işlemleri yapabilir Hiçbir tabloyu sorgulayamaz Hiçbir tablo üzerinde değişiklik yapamaz Tüm yapılandırma ve bakım işlemlerini yapar Rol üyelikleri ve yetkilendirme işlemlerini yapar
Rol Yaratma Geçeli veritabanında bir rol yaratmak için: CREATE ROLE rol_adı [AUTHORIZATION kullanıcı_adı] Seçimlik olarak kullanılabilen AUTHORIZATION ile rolün sahibi olacak kullanıcı belirlenir. Eğer kullanılmazsa rolü yaratan kullanıcı sahibi olur. Rolü yaratacak olan kullanıcıda CREATE ROLE yetkisi veya db_securityadmin sabit veritabanı rolüne üyelik olması gereklidir.
Role Kullanıcı Ekleme Rollere kullanıcıları üye yapmak veya üyelikten çıkarmak için ALTER ROLE komutu kullanılır. CREATE ROLE yeniRol; ALTER ROLE yeniRol ADD MEMBER Elif; ALTER ROLE yeniRol DROP MEMBER Elif; Rollere üye olarak başka bir kullanıcı tanımlı veritabanı rolü de atanabilir (sabit veritabanı rolleri üye olarak atanamaz). ALTER ROLE public ADD MEMBER yeniRol; Yukarıdaki kod ile public rolünün sahip olduğu tüm yetkilere yeniRol de sahip olur. Dolayısıyla yeniRol'e üye olan herkes te public yetkilerine sahip olur.
Yetkiler Kullanıcı veya Rol yaratıldıktan sonra veritabanı üzerinde neleri yapıp neleri yapamayacaklarını belirlemek için yetkiler verilir. Bu işlemler için kullanılan aşağıdaki 3 komut DCL (Data Control Language) komutları olarak bilinir: GRANT komutu ile yetki verilir (kullanıcı veya rol üyelerinin yapabilecekleri belirlenir) DENY komutu ile kısıtlama tanımlanır (kullanıcı veya rol üyelerinin yapamayacakları belirlenir) REVOKE komutu ile verilen yetki ve tanımlanan kısıtlamalar geri alınır.
GRANT ile yetki verme Genel kullanım aşağıdaki gibidir: GRANT <yetki> ON <nesne> TO <user, login, rol> "yeniRol" rolüne tablo yaratma yetkisi verilmesi: GRANT CREATE TABLE TO yeniRol Nesneler üzerinde yetki verilirken ON kullanılır. Dersler tablosu üzerinde değişiklik yapabilme (DML işlemleri) yetkisinin Ali, Ahmet ve Mehmet kullanıcılarına verilmesi: GRANT INSERT, DELETE, UPDATE ON Dersler TO Ali, Ahmet, Mehmet Eğer bu 3 kişiye db_datawriter sabit rolünü verdiyseniz, zaten tüm tablolar üzerinde DML işlemleri yapabilirler.
DENY ile kısıtlama tanımlama Kullanıcının belirli bir role atanması ile üzerine aldığı yetkilerden bazılarını engellemek için DENY ile kısıtlama getirebiliriz. Kullanımı GRANT ile benzerdir: DENY CREATE TABLE TO Hasan, Ali Ali ve Mehmet'in Notlar tablosunu sorgulamasını engellemek için: DENY SELECT ON Notlar TO Ali, Mehmet
REVOKE ile yetkiyi geri alma Hem GRANT ile verilen yetkilerin, hem de DENY ile tanımlanan kısıtlamaların geri alınması için kullanılır. Kullanım olarak yine GRANT ve DENY'a benzer, fakat TO yerine FROM kullanılır: REVOKE CREATE TABLE FROM yeniRol REVOKE SELECT ON Hocalar FROM Altan