MySQL Server
MySQL Server

MySQL, kullanıcıların verileri depolamasına, düzenlemesine ve daha sonra almasına yardımcı olan açık kaynaklı bir veritabanı yönetim yazılımıdır. Tablolar ve veritabanları içinde belirli kullanıcılara nüanslı izinler vermek için çeşitli seçeneklere sahiptir; bu blog yazımızda, birçok seçenekten birkaçına değinmeye çalışacağız.

Yeni Bir Kullanıcı Nasıl Oluşturulur?

MySQL shell’de yeni bir kullanıcı oluşturarak başlayalım:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Not: Bu blog yazımızda MySQL shell üzerinden kullanıcı eklerken, sunucunun IP adresini değil, kullanıcının ana bilgisayarını localhost olarak belirleyeceğiz. localhost, “bu bilgisayar” anlamına gelen bir ana bilgisayar adıdır ve MySQL bu belirli ana bilgisayar adını özel olarak ele alır: bu ana bilgisayara sahip bir kullanıcı oturum açtığında, bir Unix soket dosyası kullanarak yerel sunucuya bağlanmaya çalışır.

Bu noktada yeni kullanıcının veritabanları ile herhangi bir işlem yapma izni yoktur. Aslında, yeni kullanıcı (şifre ile) giriş yapmaya çalışsa bile, shell’e ulaşamayacaktır.

Bu nedenle yapılacak ilk şey, kullanıcının ihtiyaç duyacağı yetkileri vererek erişimini sağlamak olacaktır.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Bu komuttaki yıldızlar, erişebilecekleri veritabanına ve tabloya (sırasıyla) atıfta bulunur; bu özel komut, kullanıcının tüm veritabanları ve tablolardaki tüm görevleri okumasına, düzenlemesine, yürütmesine ve gerçekleştirmesine olanak tanır.

Lütfen bu örnekte yeni kullanıcıya veritabanımızdaki her şeye tam kök erişimi verdiğimizi unutmayın. Bu, bazı MySQL kavramlarını açıklamak için yararlı olsa da, çoğu kullanım durumu için pratik olmayabilir ve veritabanınızın güvenliğini yüksek riske atabilir. Yazının devamında daha ayrıntılı yetkilendirmeyi nasıl yapacağınızı bulabilirsiniz.

Yeni kullanıcılarınız için ayarlamak istediğiniz izinleri sonlandırdıktan sonra, her zaman tüm ayrıcalıkları yeniden yüklediğinizden emin olun.

FLUSH PRIVILEGES;

Yapmış olduğunuz değişiklikler aktif olmuş olacaktır.

Farklı Kullanıcı Yekileri Nasıl Verilir?

İşte kullanıcıların yararlanabileceği diğer olası izinlerin kısa bir listesi.

  • ALL PRIVILEGES– daha önce gördüğümüz gibi, bu bir MySQL kullanıcısının belirlenmiş bir veritabanına tam erişime (veya herhangi bir veritabanı seçilmemişse, sistem genelinde küresel erişime) izin verir.
  • CREATE– yeni tablolar veya veritabanları oluşturmalarına olanak tanır
  • DROP– tabloları veya veritabanlarını silmelerine izin verir
  • DELETE– tablolardan satır silmelerine izin verir
  • INSERT– tablolara satır eklemelerine izin verir
  • SELECT– veritabanlarını okumak için SELECT komutunu kullanmalarına izin verir
  • UPDATE– tablo satırlarını güncellemelerine izin ver
  • GRANT OPTION– diğer kullanıcılara ayrıcalıklarını vermelerine veya kaldırmalarına izin verir

Belirli bir kullanıcıya izin vermek için bu çerçeveyi kullanabilirsiniz:

GRANT yetki_tipi ON database_name.table_name TO 'username'@'localhost';

Kullanıcılara herhangi bir veritabanına veya herhangi bir tabloya erişim izni vermek istiyorsanız, veritabanı adı veya tablo adı yerine yıldız işareti (*) koyduğunuzdan emin olun.

Bir izni her güncellediğinizde veya değiştirdiğinizde, Flush Privileges komutunu kullandığınızdan emin olun.

Bir izni iptal etmeniz gerekiyorsa, komut onu vermek için kullandığınız ile hemen hemen aynıdır:

REVOKE yetki_tipi ON database_name.table_name FROM 'username'@'localhost';

İzinleri iptal ederken, sözdiziminin, izin verirken kullandığımız gibi TO yerine FROM kullanmanızı gerektirdiğini unutmayın.

Aşağıdakileri çalıştırarak bir kullanıcının mevcut izinlerini inceleyebilirsiniz:

SHOW GRANTS FOR 'username'@'localhost';

Kullanıcı Nasıl Silinir?

DROP ile veritabanlarını silebildiğiniz gibi, bir kullanıcıyı tamamen silmek için DROP’u kullanabilirsiniz:

DROP USER 'username'@'localhost';

Yeni kullanıcınızı test etmek için şunu yazarak çıkış yapın:

quit

ve terminalde bu komutla tekrar oturum açın:

mysql -u [username] -p

Blog yazımız burada sona eriyor. Bir blog yazısı ile tüm detayları aktarmamız mümkün olmadığı için sizlere altta çeşitli linkler veriyor olacağız. Bu linkler üzerinden daha ayrıntılı bilgiler ve dökümantasyonlara erişim sağlayabilirsiniz.

Docker üzerinde kolayca MySQL sunucu ayağa kaldırarak, vermiş olduğumuz komutları kolayca deneyebilirsiniz. Docker ile ilgili bilgi için aşağıdaki yazımıza göz atabilirsiniz:

https://blog.narweb.net/docker-nedir-ve-narwebden-aldigim-sunucuma-docker-nasil-kurarim/

Narweb üzerinden VPS veya VDS sunucular kiralayarak hemen kendi sunucunuzu oluşturabilirsiniz.

https://narweb.net/tr/server/vps-hosting.html

https://narweb.net/tr/server/vds-hosting.html

Konu ile ilgili daha fazla bilgi için;

https://dev.mysql.com/doc/refman/8.0/en/

https://dev.mysql.com/doc/refman/5.7/en/

https://www.w3schools.com/mysql/

https://github.com/shlomi-noach/awesome-mysql