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

5 yorum:

Adsız dedi ki...

Peki bir veritabanına sadece select yetkisi vermek istersek nasıl bir komut yazmalıyız. Veritabanında 250 civarında table var. Tek tek yetki vermek baya bir uzun sürecek.

Mehmet GÜZEL dedi ki...

@İsimsiz

Bir veritabanındaki tüm tabloları okumak için datareader role yeterlidir. Bu role için aşağıdaki syntaxı kullanabilirsiniz:

USE Veritabaniniz
GO

EXEC sp_addrolemember N'db_datareader', YetkiVermekIstediginizKullaniciAdi

E-EVET dedi ki...

Değerli bilgileriniz için çok teşekkürler. Benim bir sorum var: Bir kullanıcıya sadece kendi istediğim veritabanına erişme izni vermek istiyorum. Tabi ki o VT'nin tüm tabloları üstünde Select,Update,Delete işlemleri yapabilecek. Bunu nasıl ayarlayabilirim?

Mehmet GÜZEL dedi ki...

Bir kullanıcının herhangi bir veritabanına erişimi için ilgili veritabanında user olarak açmanız yeterli oluyor:

use VeritabaniAdi
go
create user UserAdi For Login LoginAdi

Select, Update, Delete işlemlerine ek olarak Insert hakkı da vereyim deseydiniz ilgili kullanıcıyı DataReader ve DataWriter rollerine ekletmeniz yeterli olacaktı fakat insert olmadığı için tüm tablolar için genel bir script oluşturmanız gerekecek. Eğer kullandığınız SQL Server 2005 yada üstü ise aşağıdaki kod yardımıyla tüm tablolara select, update, delete yetkilerini verebilirsiniz:

select 'grant select, update, delete on [' + object_schema_name(object_id) + '].[' + name + '] to KullaniciAdiniz' from sys.tables

Bu sorgunun sonucunda dönecek kodu çalıştırırsanız dilediğiniz olur.

minikkus dedi ki...

Selam Mehmet Bey,
Junior DBA olarak yapmamın istendigi bir task var. Nette cok arastırdım fakat detaylı bilgiye rastlayamadım. Çok acil bu işi yetiştirmem gerekiyor:( Belki bana yardımcı olabilirsiniz diye düşündüm..

Birkac veritabanından oluşan bir SQL instance var.
- Bu instance üzerinde bir kullanıcı yaratılacak (sistemdeki windows kullanıcısı icin sql icerisinde login yaratılacak, böylece windows authentication ile direk giris yapabilecek)
- bu kullanıcı, tüm dbler üzerinde bulunan tüm tablolar ve viewlere select, insert, update yapabilecek.
- dbler üzerinde hicbir sekilde delete yapamayacak. tüm delete yetkileri ve db_owner yetkileri elinden alınacak.
- sp_execute yapabilecek.
Bu yetkilendirme işlemi, çoklu kullanıcılı sistemlerdeki guvenlik problemini en aza indirmek icin isteniyor.
Bu konuda bana yardımcı olabilir misiniz?
Cevabınız icin şimdiden cok tesekkur ederim.

.::YASAL UYARI::.

©2004-2016 Mehmet GÜZEL, http://www.mehmetguzel.net/ & http://www.mehmetguzel.com/

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