2008-02-26

T-SQL ile Kullanıcıya Yetki Verme

MS SQL Server'da yetkilendirme GRANT komutu yapılır. GRANT komutunun temel yapısı:

GRANT VerilecekYetkiler ON NesneAdi TO KullaniciAdi

Örnek : Mehmet kullanıcısına Kullanici tablosunda SELECT yetkisi verelim.
GRANT SELECT ON Kullanici TO Mehmet

Şayet yetkiyi Windows Authentication için verecekseniz domain ve kullanıcı adını iki köşeli parantez arasında yazmalısınız[]:

GRANT SELECT ON Kullanici TO [GUZEL\Mehmet]

Bir kullanıcıya birden çok yetki vereceksiniz yetkileri virgül(,) ile ayrıp dileğiniz kadar yetki çeşidini yazabilirsiniz:

GRANT SELECT, INSERT, DELETE, UPDATE ON Kullanici TO Mehmet

Bir kullanıcıya tüm yetkileri vermek için tek tek yetki isimleri yazmak yerine ALL deyimini kullanabilirsiniz:

GRANT ALL ON Kullanici TO Mehmet

Birden çok kullanıcıya aynı yetkileri vermek istiyorsanız aynı kodları her kullanıcı için tekrar yazmanıza gerek yok; sadece kullanıcılar arasına virgül(,) ekleyip dileğiniz kadar kullanıcıya yetki verebilirsiniz:

GRANT SELECT ON Kullanici TO Mehmet, Ahmet, Mustafa, Seyfettin


Merak edenler için GRANT komutunun söz dizimi:

GRANT [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO [ ,...n ]
[ WITH GRANT OPTION ]
[ AS ]
::=
ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ]
::=
Database_user
Database_role
Application_role
Database_user_mapped_to_Windows_User
Database_user_mapped_to_Windows_Group
Database_user_mapped_to_certificate
Database_user_mapped_to_asymmetric_key
Database_user_with_no_login

2008-02-23

SQL Eğitimleri Tamamlandı

Belbim A.Ş. OSM(Otomatik Satış Makineleri) Saha Ekibine iki grup şeklinde iki hafta boyunca verdiğim eğitimleri tamamladım. İtiraf etmek gerekirse eğitime katılım ve ilgi beklentimin üzerindeydi. Tüm arkadaşlar anlattığım konularla son derece ilgiliydiler. Benim için eğitim çok güzel geçti ve anlatmaktan çok zevk aldım. Her iki gruba da aşağıdaki konular aktarıldı:
  • Veritabanı Bilgileri
  • MS SQL Server 2005'in Kurulumu
  • Temel SQL Konuları
  • Replikasyon Teknolojisi ve Uygulama Alanları

2008-02-17

Trigger İle Insert, Update, Delete Yakalama

/*
Trigger içerisinde aşağıdaki T-SQL kod ile bir kaydın Insert, Update, Delete olduğunu yakalayabilirsiniz.
*/

DECLARE @IfDelete VARCHAR (1), @IfInsert VARCHAR (1)

SET @IfDelete =
(CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'O' -- (O)ld record in update
ELSE 'D' -- (D)eleted record
END)

SET @IfInsert =
(CASE WHEN EXISTS(SELECT * FROM deleted) THEN 'N' -- (N)ew record in update
ELSE 'I' -- (I)nserted record
END)

Seneler önce yazılan bu kodun daha optimize edilmiş hali değerli arkadaşım Levent YILDIZ'dan geldi:

if exists (select * from inserted) and exists (select * from deleted)
select @type = 'U'
else if exists (select * from inserted)
select @type = 'I'
else
select @type = 'D'

2008-02-15

SQL Server 2005'te CLR Enable

SQL Server 2005 e CLR default olarak OFF gelir. Aşağıdaki T-SQL kodu ile CLR'ı enable yapabilirsiniz:

EXEC sp_configure 'clr enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO


Aynı şekide CLR yetkisini tekrardan OFF konuma getirmek için aşağıdaki kodu kullanabilirsiniz:

EXEC sp_configure 'clr enabled', 0;
RECONFIGURE WITH OVERRIDE;
GO


Tüm bu değişiklikleri görsel olarak ta Başlat-> Programlar-> MS SQL 2005->Configuration Tools ->SQL Surface Area Configuration adımından da değiştirebilirsiniz(MSSQLServer->Database Engine->CLR Integration).

2008-02-14

Günlük Kardeşliği Anketi


Ankete ilgili gösteren herkese teşekkürlerimi sunuyorum. Günlük Kardeşliğime katılmak isteyenler kendi web sayfalarına günlüğümü ekledikten(Mehmet GÜZEL) sonra iletişim bölümündeki mail adresim aracılığıyla benimle irtibata geçebilirler.

2008-02-13

SQL'de Tarih Sorunlarını Gidermek

Bugüne kadar bir çok kişiden SQL Server 2005'te tarih ile ilgili sorunlarını dinledim ve sorunlarına bulduğum çözümleri sundum. Benden yardım isteyenlerin büyük kısmının istediği tarih formatlarından birisi de sadece yıl/ay/gün bilgisini alabilmek yada diğer bir ifadeyle zaman bilgisini sorgularında sıfırlamak(00:00:00) istemeleri. Yani bugünün tarihini şöyle almak istiyorlardı. 2008-02-13 00:00:00

Bu sonuca ulaşacak iki farklı SQL çözümüm var:

Çözüm-1:
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS SMALLDATETIME)

Çözüm-2:
SELECT CAST(CAST(GETDATE() AS VARCHAR(12)) AS SMALLDATETIME)

MS SQL Server 2005 karşılaşılan bu vb sorunları MS SQL Server 2008 de çözmüşler. Dileyenler konu ile ilgili yazmış olduğum MS SQL Server 2008 - Yeni Tarih Veri Tipleri'ni okuyabilir.

2008-02-12

Beyin Kontrolü






Luhn Algoritması

Kredi kartı numarası, sosyal güvenlik numarası gibi seri numaralar Luhn Algoritması ile oluşturuluyor. Bu numaralar bir süredir merak ettiğim bir konu idi. Benimle aynı merakı paylaşan arkadaşların merakını gidereyim dedim. Bu arada kontör kartı seri numalararı ve diğer seri numalararın hangi algoritmadan yola çıkılarak üretildiğini bilen arkadaşlar varsa bu bilgilerini paylaşırlarsa makbule geçer.

Luhn Algoritması ile ilgili işe yarar T-SQL kodlar:

CREATE FUNCTION dbo.fnIsLuhnValid
(
@Luhn VARCHAR(8000)
)
RETURNS BIT
AS

BEGIN
IF @Luhn LIKE '%[^0-9]%'
RETURN 0

DECLARE @Index SMALLINT,
@Multiplier TINYINT,
@Sum INT,
@Plus TINYINT

SELECT @Index = LEN(@Luhn),
@Multiplier = 1,
@Sum = 0

WHILE @Index >= 1
SELECT @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
@Multiplier = 3 - @Multiplier,
@Sum = @Sum + @Plus / 10 + @Plus % 10,
@Index = @Index - 1

RETURN CASE WHEN @Sum % 10 = 0 THEN 1 ELSE 0 END
END


CREATE FUNCTION dbo.fnGetLuhn
(
@Luhn VARCHAR(7999)
)
RETURNS VARCHAR(8000)
AS

BEGIN
IF @Luhn LIKE '%[^0-9]%'
RETURN @Luhn

DECLARE @Index SMALLINT,
@Multiplier TINYINT,
@Sum INT,
@Plus TINYINT

SELECT @Index = LEN(@Luhn),
@Multiplier = 2,
@Sum = 0

WHILE @Index >= 1
SELECT @Plus = @Multiplier * CAST(SUBSTRING(@Luhn, @Index, 1) AS TINYINT),
@Multiplier = 3 - @Multiplier,
@Sum = @Sum + @Plus / 10 + @Plus % 10,
@Index = @Index - 1

RETURN @Luhn + CASE WHEN @Sum % 10 = 0 THEN '0' ELSE CAST(10 - @Sum % 10 AS CHAR) END
END

Peter Larsson
Helsingborg, Sweden

Bir Hata ve Birkaç Öneri

Microsoft OLE DB Provider for SQL Server error '80004005'

The transaction log for database 'ceturkdb' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Hatalar:


  1. Hatada database ismi vermek güvenlik nedeniyle sakıncalı
  2. Database yada programsal hataların üyelere yansıtılması sakıncalı

Öneriler:

  1. Genel hatalar için error sayfaları düzenlenip kullanıcılara hatayla ilgili genel bilgiler verilebilir. Böylelikle hem hatayı gören kişiler sizi basite almamış olur hem de sisteminiz hakkında hatadan bir şey yakalama imkanı bulmaz.
  2. SQL Server ile ilgili Auto Shrink yapılabilir yada database boyu kısıtlı ise Transation Log a maximum size verilebilir. Yada tüm bunların yerine gecenin bir saatinde çalışan joblar düzenlenebilir. Bu joblar shrink te yapabilir yada dosya size ı belli bir seviyeye ulaşmışsa e-mail, cep telefonu vb iletişim aracılığıyla yönetici uyarılabilir. Bunu yapmadığınız zaman siz hatayı görene kadar saatler geçebilir sitenizi ziyaret eden ziyaretçiler çoktan sıkılmış ve kaçmış olabilir.

Hatayı bazen dostlar "post" eder, bazen yöneticiyi tanıyan üyeler. Tüm bu ücretsiz kaynaklarınız yoksa bilin ki bu size belli bir "cost" eder. Siz siz olun birileri tarafından hatalarınız için uyarılmayı beklemeyin; hatalarınızdan herkesten önce siz haberdar olun ve hemen müdahale edin. Hatta öyle bir zamanlama ve düzen ile müdahale edin ki kimsenin ruhu duymasın, sesi çıkmasın.

Hatalar hepimizin başına gelebilir fakat hatalardan ders alıp hatanın neresinden dönersek kardır. Siz siz olun hatalardan uzak durun. Hata sizi çok sıkıştırdığında; ha bre size yakınlaşmak istediğinde en fazla onu hata sayfasına yönlendirip hataya haddini bildirin! Hataya haddini bildiremiyorsanız bilin ki hata size haddinizi bildiriyordur.

2008-02-10

CETURK Forum Sorumluları Belirlendi

Merhaba Değerli Arkadaşlar,

Uzun süren bir görüşme trafiğinin ardından nihayet forum sorumlularını belirledim.
Forum Koordinatörlüğü görevini birkaç gün önce bıraktığım bir kısmınızın malumu. Artık malumu olmayanlar da bu vesile ile öğrenmiş oldular. CETURK Forum Koordinatörü iken üzerimde yük olarak duran bu son görevi de yerine getirmek istiyorum. Bu görevde iken
forumlarda beraber çalışmayı düşündüğüm arkadaşlar aşağıdaki gibidir:



Forum Adı


Sorumlu

ASP


Ali S. KAN


Genel- Güncel


Aycan AYHAN


Delphi / Kylix


Bahadır EKİCİ


Network


Barış İÇEN


PHP


Bünyamin KOPDUR


SQL Server


Emre ÇALIŞIR


Üniversitelerden


Hasan Erdem YANT


Diğer Programlama Dilleri


Hayriye TANYILDIZ


Proje Havuzu


Hüseyin Fatih KARAKOÇ


Diğer .NET Teknolojileri


İbrahim ERSOY


Windows


Kadir BOZKURTOĞLU


Visual Basic


Kurtman ÇELİK


MySQL


Levent MENEKŞE


Java


Mehmet ÖZCAN


XML - XHTML


Mehmet Zahir SOLAK


Pascal


Merve GENCER


Oyun Programlama


Mesut GÜLER


Diğer Veritabanları


Mustafa DEMİRBİLEK


Faydalı Linkler


Mustafa ŞAHİN


Elektronik / Donanım


Mustafa YAZAR


Photoshop-PaintshopPro-Fireworks


Mustafa ZENGİN


VB.NET


Nazmi DUMAN


HTML/ DHTML CSS Scripts


Nedim ŞAHİN


Güvenlik - Virüs


Olcay KÜK


C / C++

Oya ŞİMŞEK


CGI / PERL


Ömer GÖK


3D Modelleme / Animasyon


Özgür AL


C#


Sadullah KELEŞ


Yapay Zeka


Sedat GOLGİYAZ


Veri Madenciliği


Serdar GÖREGEN


Web Editörleri


Serkan ÖNCE


Oracle


Tonguç YILMAZ


Unix / Linux


Tutku DALMAZ


Flash


Yağmur MERAL


ASP.NET


Yavuz ÇOŞAR


Kariyer ve İnsan Kaynakları


Yıldırım ÖZSUBAŞI


Proje Tanıtımı


Yücel DAĞLAR


Multimedia


Yüksel Berk YAVUZ


Algoritma


Zafer YAVUZ


Şu an Forum Koordinatörlüğünü bıraktığım için bu arkadaşları ilgili forumlara atama yetkisi yeni kurulacak yönetimde olup bu seçtiğim ekibin de yeni yönetimle çalışıp çalışmayacağı kendi şahsi kararlarına bağlıdır.

Sevgi ve saygı ile duyurulur.

2008-02-08

Replikasyon İçin Olması Gereken Role?

Bir kullanıcının Replikasyon konfigürasyonunu yapabilmesi için minimum sysadmin server rolünde olması gerekir.

Replikasyon(Replication) için kullanılan Agent'larda ise minimum aşağıdaki roller olmalı:
Snapshot Agent: distrubition database, publication database için db_owner olmalı

Log Reader Agent: distrubition database, publication database için db_owner olmalı

Distribution Agent for a push subscription: distrubition database için db_owner olmalı, snapshot paylaşımına erişim yetkisi olmalı. Bunun yanında Subscriber a erişmek için en az db_owner olmalı

Distribution Agent for a pull subscription: subscription database için db_owner olmalı, snapshot paylaşımına erişim yetkisi olmalı.

Merge Agent for a push subscription: distrubition database için db_owner olmalı, snapshot paylaşımına erişim yetkisi olmalı

Merge Agent for a pull subscription: subscription database için db_owner olmalı, snapshot paylaşımına erişim yetkisi olmalı.

Queue Reader Agent : Distrubition, publication ve subscription databaseler için db_owner olmalı

.::YASAL UYARI::.

©2004-2023 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.