MySQL Kullanıcı Oluşturma ve Yetkilendirme İşlemleri
MySQL, web sitelerinde ve uygulamalarda verilerin saklanması, yönetilmesi ve sorgulanması için kullanılan ilişkisel bir veritabanı yönetim sistemidir. MySQL'de her uygulamanın veya kullanıcının bütün veritabanlarına erişmesi gerekmez. Bu nedenle kullanıcı hesapları oluşturmak ve bu hesaplara yalnızca ihtiyaç duydukları yetkileri vermek, veritabanı güvenliğinin önemli bir parçasıdır.
Bu rehberde MySQL kullanıcı oluşturma, şifre belirleme, veritabanına erişim izni verme, yetkileri görüntüleme ve kaldırma işlemleri örneklerle açıklanmaktadır.
1. MySQL Kullanıcı Sistemi Nedir?
MySQL'de kullanıcı hesapları, veritabanı sunucusuna bağlanmak ve belirli işlemleri gerçekleştirmek için kullanılır.
Bir MySQL hesabı iki temel bileşenden oluşur:
-
Kullanıcı adı: Veritabanına bağlanacak hesabın adıdır.
-
Host (bağlantı kaynağı): Kullanıcının hangi bilgisayardan veya sunucudan bağlanabileceğini belirtir.
Örneğin:
'forum_user'@'localhost'
Bu hesap, forum_user adlı kullanıcının MySQL sunucusuna yerel bağlantı üzerinden erişebilmesini ifade eder.
Aşağıdaki hesap ise farklıdır:
'forum_user'@'192.168.1.50'
Bu hesap yalnızca belirtilen IP adresinden bağlantı kurmak üzere tanımlanmıştır.
MySQL'de aynı kullanıcı adı, farklı host tanımlarıyla ayrı hesaplar olarak oluşturulabilir.
2. MySQL'e Yönetici Olarak Bağlanma
Kullanıcı oluşturma ve yetkilendirme işlemleri için gerekli yönetim izinlerine sahip bir MySQL hesabı kullanılmalıdır.
Linux sunucusunda terminal üzerinden bağlantı kurmak için:
mysql -u root -p
Komut çalıştırıldığında MySQL parolası istenir.
Bazı Linux sistemlerinde yerel yönetici bağlantısı şu komutla yapılabilir:
sudo mysql
Başarılı bağlantının ardından MySQL komut satırı açılır.
mysql>
Buradan SQL komutları çalıştırılabilir.
3. MySQL'de Yeni Kullanıcı Oluşturma
Yeni kullanıcı oluşturmak için CREATE USER komutu kullanılır.
Örnek:
CREATE USER 'forum_user'@'localhost'
IDENTIFIED BY 'GucluBirSifre_2026!';
Bu komutun yaptığı işlemler:
-
forum_useradında kullanıcı oluşturur. -
Kullanıcının yerel sunucudan bağlanmasına izin verir.
-
Kullanıcı için parola tanımlar.
Parolanın tahmin edilmesi zor, uzun ve benzersiz olması önerilir. Örnekteki parola gerçek sistemlerde kullanılmamalıdır.
Kullanıcı Zaten Varsa Hata Almamak
Kullanıcının daha önce oluşturulmuş olabileceği durumlarda:
CREATE USER IF NOT EXISTS 'forum_user'@'localhost'
IDENTIFIED BY 'GucluBirSifre_2026!';
Bu komut, kullanıcı mevcut değilse yeni hesap oluşturur.
Önemli: Kullanıcı zaten varsa IF NOT EXISTS mevcut parolasını değiştirmez.
4. MySQL Veritabanı Oluşturma
Yeni kullanıcıya yetki vermeden önce kullanılacak veritabanı oluşturulabilir.
CREATE DATABASE forum_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Burada:
-
forum_db: Veritabanının adıdır. -
utf8mb4: Türkçe karakterler ve Unicode karakterleri destekleyen karakter kümesidir. -
utf8mb4_unicode_ci: Metin karşılaştırmalarında kullanılan sıralama kuralıdır.
Veritabanının oluşturulup oluşturulmadığını kontrol etmek için:
SHOW DATABASES;
5. Kullanıcıya Veritabanı Yetkisi Verme
MySQL'de kullanıcıya erişim yetkisi vermek için GRANT komutu kullanılır.
Örneğin forum_user kullanıcısına forum_db veritabanı üzerinde temel veri işlemleri için izin verelim:
GRANT SELECT, INSERT, UPDATE, DELETE
ON forum_db.*
TO 'forum_user'@'localhost';
Bu komutla kullanıcı aşağıdaki işlemleri gerçekleştirebilir:
|
Yetki |
Açıklama |
|---|---|
|
SELECT |
Veritabanındaki kayıtları okuma |
|
INSERT |
Yeni kayıt ekleme |
|
UPDATE |
Mevcut kayıtları güncelleme |
|
DELETE |
Kayıtları silme |
Bu yetkiler, birçok web uygulamasının normal çalışma işlemleri için yeterlidir.
Ancak uygulamanın tablo oluşturması veya veritabanı yapısını değiştirmesi gerekiyorsa ek izinler gerekebilir.
6. MySQL'de Tüm Yetkileri Verme
Bir kullanıcıya belirli bir veritabanı üzerinde geniş kapsamlı izin vermek için:
GRANT ALL PRIVILEGES
ON forum_db.*
TO 'forum_user'@'localhost';
Bu komut, kullanıcının forum_db veritabanı üzerinde geniş işlem yetkilerine sahip olmasını sağlar.
Ancak bu işlem, bütün MySQL sunucusu üzerinde yönetici yetkisi vermez.
Ayrıca ALL PRIVILEGES, başka kullanıcılara yetki dağıtma hakkını otomatik olarak vermez.
Güvenlik açısından: Web uygulamalarında ihtiyaç duyulmayan yetkilerin verilmemesi önerilir. Özellikle üretim ortamında yalnızca gerekli izinler tanımlanmalıdır.
7. Belirli Bir Tabloya Yetki Verme
MySQL'de yetkilendirme yalnızca veritabanı seviyesinde yapılmaz. Belirli tablolara özel izinler de tanımlanabilir.
Örneğin forum_db veritabanında members adlı bir tablo bulunduğunu varsayalım.
Kullanıcının yalnızca bu tablodaki kayıtları okuyabilmesi için:
GRANT SELECT
ON forum_db.members
TO 'forum_user'@'localhost';
Kullanıcıya aynı tabloda kayıt ekleme izni vermek için:
GRANT INSERT
ON forum_db.members
TO 'forum_user'@'localhost';
Bu yöntem, farklı uygulamaların aynı veritabanını kullandığı sistemlerde erişimi sınırlandırmak için kullanılabilir.
8. MySQL Kullanıcı Yetkilerini Görüntüleme
Bir kullanıcıya verilmiş izinleri kontrol etmek için SHOW GRANTS komutu kullanılır.
SHOW GRANTS FOR 'forum_user'@'localhost';
Örnek çıktı:
GRANT USAGE ON *.* TO 'forum_user'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE
ON `forum_db`.*
TO 'forum_user'@'localhost';
Bu sonuç, kullanıcının forum_db üzerinde veri okuma, ekleme, güncelleme ve silme izinlerine sahip olduğunu gösterir.
USAGE, tek başına veritabanı tabloları üzerinde işlem yapma yetkisi vermez.
9. Kullanıcıdan Yetki Kaldırma
Kullanıcının artık ihtiyaç duymadığı izinler REVOKE komutuyla kaldırılabilir.
Örneğin kayıt silme yetkisini kaldırmak için:
REVOKE DELETE
ON forum_db.*
FROM 'forum_user'@'localhost';
Kullanıcının veritabanı düzeyinde verilmiş bütün izinlerini kaldırmak için:
REVOKE ALL PRIVILEGES
ON forum_db.*
FROM 'forum_user'@'localhost';
Bu komut yalnızca belirtilen veritabanı kapsamındaki izinleri kaldırır.
Kullanıcı hesabı silinmez.
Ayrıca farklı kapsamda verilmiş yetkiler varsa bunlar ayrı olarak değerlendirilmelidir.
10. MySQL Kullanıcı Şifresi Değiştirme
Mevcut bir kullanıcının parolasını değiştirmek için ALTER USER komutu kullanılabilir.
ALTER USER 'forum_user'@'localhost'
IDENTIFIED BY 'YeniGucluSifre_2026!';
Komut çalıştırıldıktan sonra yeni bağlantılarda güncellenmiş parola kullanılır.
Web uygulamasında eski parola kayıtlıysa bağlantı ayarlarının da güncellenmesi gerekir.
Örneğin PHP uygulamasının veritabanı bağlantı dosyasında eski parola bulunuyorsa yeni parola ile değiştirilmelidir.
11. MySQL Kullanıcılarını Listeleme
Sunucudaki kullanıcı hesaplarını görüntülemek için, gerekli sistem tablosu okuma yetkisine sahip bir hesapla şu sorgu çalıştırılabilir:
SELECT User, Host
FROM mysql.user;
Örnek sonuç:
|
User |
Host |
|---|---|
|
root |
localhost |
|
forum_user |
localhost |
|
backup_user |
192.168.1.50 |
Bu sorgu, kullanıcı adlarını ve tanımlandıkları bağlantı kaynaklarını gösterir.
Kullanıcıların parolaları bu sorguyla görüntülenmez.
12. MySQL Kullanıcısını Silme
Bir kullanıcı hesabını tamamen kaldırmak için DROP USER komutu kullanılır.
DROP USER 'forum_user'@'localhost';
Kullanıcı mevcut değilse hata oluşmasını önlemek için:
DROP USER IF EXISTS 'forum_user'@'localhost';
Bu işlem kullanıcı hesabını kaldırır ancak kullanıcının eriştiği veritabanını veya tabloları otomatik olarak silmez.
Hesap silinmeden önce uygulamaların bu hesabı kullanıp kullanmadığı kontrol edilmelidir.
13. cPanel Üzerinden MySQL Kullanıcı Oluşturma
cPanel sürümüne ve hosting sağlayıcısına göre bölüm adları değişebilir.
cPanel'de Kullanıcı Oluşturma Adımları
-
cPanel yönetim paneline giriş yapın.
-
MySQL Databases veya Manage My Databases bölümünü açın.
-
MySQL Users alanından yeni kullanıcı oluşturma bölümünü bulun.
-
Kullanıcı adını girin.
-
Güçlü bir parola belirleyin.
-
Kullanıcı oluşturma işlemini tamamlayın.
Kullanıcı oluşturulduktan sonra veritabanıyla ilişkilendirilmesi gerekir.
Kullanıcıyı Veritabanına Ekleme
cPanel'deki Add User To Database bölümünden kullanıcı ve veritabanı seçilir.
Ardından yetkilendirme ekranı açılır.
Bu ekranda kullanıcının sahip olacağı izinler belirlenebilir.
Örneğin:
-
SELECT
-
INSERT
-
UPDATE
-
DELETE
-
CREATE
-
ALTER
-
INDEX
Hosting sağlayıcısının sunduğu arayüze göre izin seçenekleri farklı görünebilir.
Önemli: Paylaşımlı cPanel hostinglerde kullanıcı ve veritabanı adlarına genellikle hesap ön eki eklenir.
Örneğin:
Veritabanı: hesapadi_forumdb
Kullanıcı: hesapadi_forumuser
PHP bağlantılarında bu tam adların kullanılması gerekir.
14. PHP ile MySQL Kullanıcısının Bağlantısını Test Etme
MySQL kullanıcısı oluşturulduktan ve gerekli izinler verildikten sonra PHP üzerinden bağlantı kontrol edilebilir.
PDO kullanılarak hazırlanmış örnek:
<?php
$host = 'localhost';
$dbname = 'forum_db';
$username = 'forum_user';
$password = 'BURAYA_GUVENLI_SIFRENIZ';
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$username,
$password,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
echo "MySQL bağlantısı başarılı.";
} catch (PDOException $e) {
error_log($e->getMessage());
http_response_code(500);
echo "Veritabanı bağlantısı kurulamadı.";
}
Bu örnekte:
-
PDO kullanılarak MySQL bağlantısı oluşturulur.
-
Veritabanı karakter kümesi
utf8mb4olarak belirlenir. -
Bağlantı hataları sunucunun hata günlüğüne yazılır.
-
Ayrıntılı hata bilgileri ziyaretçilere gösterilmez.
Bağlantı test dosyası yalnızca geliştirme sırasında kullanılmalı, işlem tamamlandıktan sonra erişime açık sunucudan kaldırılmalıdır.
Gerçek uygulamalarda veritabanı parolalarının herkese açık dosyalarda veya sürüm kontrol sistemlerinde tutulmaması gerekir.
15. MySQL Kullanıcı Yönetiminde Güvenlik Önerileri
MySQL kullanıcılarının doğru yapılandırılması, web uygulamalarının güvenliği açısından önemlidir.
Dikkat edilmesi gereken temel noktalar şunlardır:
Her uygulama için ayrı kullanıcı oluşturun. Birden fazla web sitesinin aynı MySQL hesabını kullanması, güvenlik sorunlarının etkisini artırabilir.
Gereksiz yetkiler vermeyin. Uygulamanın yalnızca kayıt okuması gerekiyorsa yazma veya silme yetkisi tanımlamayın.
Root hesabını web uygulamalarında kullanmayın. Yönetici hesabı yerine sınırlı yetkilere sahip ayrı bir kullanıcı tercih edin.
Güçlü ve benzersiz parolalar kullanın. Aynı parolanın farklı veritabanı hesaplarında tekrar kullanılmasından kaçının.
Uzak bağlantıları sınırlandırın. Uygulama ile MySQL aynı sunucudaysa localhost üzerinden bağlantı tercih edilebilir. Uzak erişim gerekiyorsa güvenilir IP adresleri ve şifreli bağlantılar kullanılmalıdır.
Kullanılmayan hesapları kaldırın. Eski projelerden kalan kullanıcılar düzenli olarak kontrol edilmelidir.
Yetkileri düzenli olarak inceleyin. SHOW GRANTS komutuyla kullanıcıların mevcut izinlerini denetleyin.
16. MySQL Kullanıcı İşlemlerinde Sık Karşılaşılan Hatalar
Access Denied for User Hatası
Örnek:
ERROR 1045 (28000):
Access denied for user 'forum_user'@'localhost'
Bu hata yanlış parola, yanlış host tanımı veya kimlik doğrulama sorunları nedeniyle oluşabilir.
Kullanıcı adının, parolanın ve bağlantı kaynağının doğru olduğundan emin olunmalıdır.
Access Denied to Database Hatası
Kullanıcı sunucuya bağlanabildiği hâlde belirli bir veritabanına erişemeyebilir.
Bu durumda yetkileri kontrol edin:
SHOW GRANTS FOR 'forum_user'@'localhost';
Gerekli izinler eksikse yetkili bir yönetici hesabıyla tanımlanmalıdır.
CREATE USER Command Denied Hatası
Bu hata, işlemi gerçekleştiren hesabın kullanıcı oluşturma yetkisine sahip olmadığını gösterebilir.
Paylaşımlı hostinglerde doğrudan SQL komutuyla kullanıcı oluşturmak kısıtlanmış olabilir.
Bu durumda hosting sağlayıcısının sunduğu cPanel kullanıcı yönetimi kullanılmalıdır.
Sonuç
MySQL'de kullanıcı oluşturma ve yetkilendirme işlemleri, veritabanlarının güvenli ve kontrollü biçimde kullanılmasını sağlar.
CREATE USER komutuyla yeni hesaplar oluşturulabilir, GRANT ile izinler tanımlanabilir, SHOW GRANTS ile mevcut yetkiler görüntülenebilir ve REVOKE ile gereksiz izinler kaldırılabilir.
Linux sunucularında bu işlemler SQL komutlarıyla gerçekleştirilebilirken cPanel hostinglerde yönetim paneli üzerinden de yapılabilmektedir.
Özellikle PHP ve MySQL kullanan forumlar, e-ticaret siteleri, içerik yönetim sistemleri ve özel web uygulamalarında her proje için ayrı kullanıcı oluşturmak ve en az yetki ilkesini uygulamak, veritabanı güvenliğinin temel adımlarındandır.








