MySQL için Kullanıcı Oluşturma ve Doğru Yetkilendirme

MySQL için aceleyle yapacağınız “kullanıcı oluşturma ve yetkilendirme” işlemleri başınıza bela olabilir.

Eğer sunucu üzerindeki MySQL servisinin kontrolü sizdeyse (klasik bir hosting kullanıyorsanız sizde değildir) yetkilendirmeleri doğru şekilde yapmakta fayda vardır.

Bu yazıda genel olarak kullanıcı oluşturma, yetkilendirme, silme ve kullanıcıları görüntüleme ile yetkileri görüntüleme gibi MySQL komutları mevcut olacak.

MySQL’de Yeni Kullanıcı Oluşturma

CREATE USER 'korsan';

Yukarıdaki gibi şifre belirtmeden bir kullanıcı oluşturursanız, herhangi biri ‘korsan’ kullanıcısı üzerinden şifre belirtmeksizin MySQL’e erişebilir durumda olacaktır.

Bu kullanıcıya henüz herhangi bir veri tabanı üzerinde yetki verilmedi. Dolayısıyla MySQL’e bağlanmış olsa bile veri tabanları üzerinde işlem yapamayacaktır. Bu kullanıcıya şifre vermeyi unuttuktan sonra, bir veri tabanı üzerinde yetki verirseniz sonuçlar kötü olabilir.

MySQL’de oluşturacağınız kullanıcılar için host parametresi de verebilirsiniz. Bu ayar “kullanıcı nereden (hosttan) bağlanabilir” sorusunun cevabıdır.

  • Localhost: Sadece MySQL’in bulunduğu makineden erişilir.
  • %: Sadece dışarıdan erişilir.
  • IP: Sadece sizin belirlediğiniz IP’lerden erişilir.

Sadece MySQL’in bulunduğu makineden MySQL’e giriş yapabilen bir kullanıcı oluşturalım:

CREATE USER 'korsan'@'localhost' IDENTIFIED BY 'powerful_password';

Kullanıcıyı yukarıdaki gibi oluşturursanız Navicat, Workbench gibi programlar kullanarak MySQL’e dışardan erişemezsiniz. Sadece o makineden MySQL’e erişebilirsiniz.

Sadece dışarıdan MySQL’e erişebilen bir kullanıcı oluşturalım:

CREATE USER 'korsan'@'%' IDENTIFIED BY 'another_password';

Gördüğünüz üzere, kullanıcı adları aynı olan şifreleri farklı olan 2 farklı kullanıcı oluşturduk. Birisi “powerful_password” şifresi ile sadece içeriden, diğeri ise “another_password” şifresi ile sadece dışarıdan erişebilir durumdadır.

MySQL’de Kullanıcıları Listeleme

Oluşturduğunuz kullanıcıları şu sorgu ile görüntüleyebilirsiniz:

SELECT host, user FROM mysql.user;

Detaylı bilgi için burayı inceleyebilirsiniz.

MySQL’de Kullanıcı Silme

Oluşturduğunuz kullanıcıları silmek için 2 farklı yol kullanabilirsiniz:

DROP USER korsan;

Kullanıcıyı drop ederseniz sadece % ile oluşturulan kullanıcıyı silmiş olursunuz. Aşağıdaki gibi bir kullanım daha sağlıklı olacaktır.

DROP USER 'korsan'@'localhost';
DROP USER 'korsan'@'%';

DROP yerine DELETE’de kullanabilirsiniz. Lakin bu tavsiye edilen bir yol değil. Zaten bir kullanıcıyı DELETE edip tekrar aynı isimle yaratmaya çalıştığınızda hata oluşuyor.

DELETE FROM mysql.user WHERE user='korsan'
-- veya
DELETE FROM mysql.user WHERE user='korsan' AND host='localhost';
DELETE FROM mysql.user WHERE user='korsan' AND host='%';

MySQL’de Kullanıcı Yetkilendirme

Kullanıcı oluşturduktan sonra, hangi kullanıcınının hangi veri tabanı ve tablolar üzerinde hangi yetkilere sahip olacaklarını belirlememiz gerekiyor.

Kullanıcı oluştururken yaptığımız gibi yine hosta göre yetkilendirme yapabiliyoruz.

GRANT ALL PRIVILEGES ON korsanDB.* TO 'korsan'@'localhost';

Yukarıdaki syntax ile “korsan” kullanıcısı “local makineden bağlanarak”, “korsanDB” veri tabanının tüm tablolarında (korsanDB.* ile ifade ediliyor) tüm işlemleri yapabilir.

GRANT SELECT, INSERT, UPDATE, DELETE ON korsanDB.users TO 'korsan'@'%';

Bu syntax ile “korsan” kullanıcısı “dışarıdaki bir makineden bağlanarak”, “korsanDB” veri tabanının tüm users tablosunda (korsanDB.users) sadece “SELECT, INSERT, UPDATE, DELETE” işlemlerini yapabilir.

Yetkilendirme işlemlerini yaparken kullanıcının şifresi yoksa aşağıdaki gibi şifre de oluşturabilirsiniz.

GRANT ALL PRIVILEGES ON korsanDB.* TO 'korsan'@'localhost' IDENTIFIED BY 'password';

Ayrıca, bir kullanıcıya atanmış tüm yetkileri görüntülemek için aşağıdaki syntaxı kullanabilirsiniz.

SHOW GRANTS FOR 'korsan'@'localhost';
SHOW GRANTS FOR 'korsan'@'%';

Sonuç – Özet

MySQL’de yeni bir kullanıcı oluştururken veya yetkilendirirken şifresini belirlemeyi unutmayınız. Hostlara göre farklı şifreler veriniz. Hostlara göre farklı yetkiler belirleyiniz. Bu ufak bir detay olarak görünür fakat veri tabanına erişmek isteyen kötü niyetli insanları caydırabilir.

Son olarak, en hızlı şekilde bir kullanıcı oluşturmak ve düzgün bir şekilde yetkilendirmek için aşağıdaki syntax işinize yarayabilir.

CREATE USER 'korsan'@'%';
GRANT ALL PRIVILEGES ON korsanDB.* TO 'korsan'@'%' IDENTIFIED BY 'password';

Umarım yazdıklarım birilerine faydalı oluyordur, olmuştur.

Benzer Yazılar

Yorumlar

  • Nazan Ö. , 04 Mart 2014 - 04:12:01

    Cem Bey, ellerinize sağlık çok güzel anlatmışsınız.Devamını bekliyoruz.

    Cevapla
  • ahmet , 18 Nisan 2014 - 02:15:46

    elinize sağlık bir öğretmen olarak muhtevası iyi bir ders olur

    Cevapla
  • felsefeci , 09 Kasım 2014 - 23:07:34

    Mükemmel bir anlatım olmuş.
    Sayenizde sunucuma rouncube kurulumu için kullanıcı oluşturmayı becerdim. :) Ancak veritabanı ekleme ve kullanıcıya veritabanında izin vermek gerektiği için başka kaynaktan da yardım almak zorunda kaldım. Yazının altına tablo, veritabanı nasıl oluşturulur konusunda da ekleme yaparsanız kusursuz olur diye düşünüyorum.
    Başarılar dilerim..

    Cevapla
  • Mehmet Dursun , 11 Ocak 2015 - 19:33:07

    Merhabalar, hosting değiştirdim, hem scriptin hem de veritabanının tam yedeğini yeni hostinge yükledim (scripti http içine, veritabanını da phpmyadminle içeaktardım başarılı şekilde işlemin tamamlandığını gösteren mesajları aldım.)
    sonra bağlan.php yi yeni oluşturulan veritabanı adı, şifresi, ip sini girerek güncelledim.
    ama buna rağmen hata alıyorum.
    Aldığım hata mesajı:

    ****
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in …/webspace/ … /settings.php on line 6
    No database selectedselect yetki from user where nick = ”
    ****

    şeklinde.

    forumlara aratınca veritabanı seçilmediği veya yetkilendirme yapılmadığını söylüyorlar.
    veritabanı seçmek demek değil mi zaten bağlan.php ayarlarının yapılması ki bunu da doğru yaptığımdan kesinlikle eminim.

    yeni veritabanında scriptin açılabilmesi için settings.php içinde tanımlı user’i nasıl bulabilirim yardımcı olabilir misiniz? sanırım o useri bulup veritabanında yetkilendirirsem sorun çözülür ve script çalışır yanılıyor muyum?
    Teşekkürler

    Cevapla
    • Cem Demir , 12 Ocak 2015 - 17:17:22

      Aldığınız veri tabanı yedeğini açın ve üstlere bir yere

      use veritabanıadı;
      (yeni oluşturduğunuz veri tabanı adını) ekleyin.

      Cevapla
  • sahibinden ilan ver , 11 Mart 2015 - 01:30:42

    Hocam aldığımız yedeği başka bir sitede başka bir amaçla kullanabiliyor muyuz? Mesela benim sitem ilan sitesi ama ben alıp bir forum sitesinde veritabında müşterileri kullanabiliyor muyum acaba?

    Cevapla
  • raf , 04 Nisan 2015 - 23:26:57

    Başarılı bir anlatım ustad , bu yetkilendirme hep sıkıntı olmuştur zaten

    Cevapla
  • netwebo , 18 Ağustos 2015 - 10:41:11

    süper bir anlatım teşekkürler.

    Cevapla
  • Semih , 15 Ocak 2016 - 05:02:23

    Tüm mysql komutlarını paylaşmanız mümkün mü?

    Cevapla
  • mehmet , 24 Şubat 2016 - 23:08:46

    merhaba ben bu konuda yeniyim programlama yı okuldaders olarak alıyorum ve veri tabanı olan bir site yapacagım hocanın verdigi bir proje yalnız ben wordpressle tasarlamayı düşünüyorum ama wordpress hakkında pek bi bilgim yok oturum acmaya calıstı ama veri tabanım olmadıgı için yani mysql kullanıcı adı şifrem olmadıgı için burda takıldım sorum su bu gösterdiginiz kodları nerede ve hangi ekranda yazacagız ve wordpressle daha fazla bilgi bulabilecegim bir site veya blog biliyorsanız paylasabilirmisiniz.

    Cevapla
  • pioneerclup , 11 Haziran 2016 - 23:19:15

    hocam Bir site kurmak istiyorum joomlamı onarcade mi wordpress mi bunlardan hangisini tercih etmeliyim sizin öneriniz nedir ?

    Cevapla

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla