MySQL Şifreleme Türleri
MySQL, veri güvenliğini sağlamak için bir dizi şifreleme yöntemi sunar. İki ana şifreleme türü, TLS/SSL bağlantı şifrelemesi ve InnoDB data-at-rest şifrelemesidir. TLS/SSL, verilerin ağ üzerinden güvenli bir şekilde iletilmesi amacıyla kullanılırken, InnoDB data-at-rest şifrelemesi, verilerin disk üzerindeki depolama alanında korunmasını sağlar. Her iki yöntem de verilerin güvenliğini artırarak yetkisiz erişim ve veri hırsızlığı gibi tehlikeleri azaltmaktadır.
TLS/SSL ile Bağlantı Şifrelemesi
MySQL’de TLS/SSL şifrelemesi, istemci ve sunucu arasındaki bağlantının güvenliğini sağlamak için kullanılır. TLS, ağa bağlı cihazların kimlik doğrulaması ve iletilen verilerin şifrelenmesi için standart bir protokoldür. MySQL’in TLS/SSL desteği mevcut olup, bu desteği etkin hale getirmek için belirli adımlar izlenmelidir.
Öncelikle, bir SSL sertifikası ve anahtarı oluşturulmalıdır. MySQL, kendi kendine imzalanmış bir sertifika kullanmayı destekler. Sertifika ve anahtar oluşturmak için OpenSSL gibi bir araç kullanılabilir. Aşağıdaki komutlar, gerekli dosyaların oluşturulmasına yardımcı olur:
“`
openssl req -newkey rsa:2048 -days 365 -nodes -x509 -keyout server-key.pem -out server-cert.pem
“`
Bu komut, `server-key.pem` ve `server-cert.pem` adında iki dosya oluşturur. Elde edilen dosyaların doğru dizinlerde saklanması gerekmektedir.
Ardından, MySQL yapılandırma dosyası olan `my.cnf` veya `my.ini` dosyasına aşağıdaki ayarlar eklenmelidir:
“`
[mysqld]
ssl-ca=ca-cert.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem
“`
Sunucu başlatıldığında, TLS/SSL etkinleştirilmiş olacaktır. İstemci tarafında da TLS/SSL kullanmak için `mysql` komut satırı aracına `–ssl` bayrağı eklenmelidir.
InnoDB Data-at-Rest Şifrelemesi
InnoDB data-at-rest şifrelemesi, veritabanı dosyalarının disk üzerinde şifrelenmesini sağlar. Bu özellik, verilerin yetkisiz erişime karşı korunmasını sağlamak amacıyla MySQL 5.7.11 sürümünden itibaren kullanılabilmektedir. Data-at-rest şifrelemesi etkinleştirmek için aşağıdaki adımlar izlenmelidir:
Öncelikle, MySQL yapılandırma dosyasını açarak aşağıdaki ayarların eklenmesi gerekmektedir:
“`
[mysqld]
innodb_encrypt_tables=ON
innodb_encrypt_log=ON
innodb_encryption_threads=4
“`
Bu ayarlar, veritabanındaki tüm tablolar ve günlük dosyalarının şifrelenmesini sağlar. `innodb_encryption_threads`, şifreleme işlemleri için kullanılacak iş parçacığı sayısını belirlemektedir.
Daha sonra, InnoDB tablosunun şifrelenmesi için şu şekilde bir tablo oluşturulmalıdır:
“`sql
CREATE TABLE my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(255) NOT NULL
) ENCRYPTION=’Y’;
“`
Mevcut bir InnoDB tablosunu şifrelemek için `ALTER TABLE` komutunu kullanmak mümkündür:
“`sql
ALTER TABLE my_table ENCRYPTION=’Y’;
“`
Verilerin şifrelenmesi için MySQL otomatik olarak AES ile şifreleme gerçekleştirecektir. Şifreleme anahtarı, MySQL sunucusu tarafından yönetilmektedir ve bu anahtar `innodb_encryption_aes_key_size` ile yapılandırılabilir.
Şifreleme Anahtar Yönetimi
MySQL’de şifreleme anahtarlarını yönetmek için bir anahtar yönetim sistemi (KMS) veya MySQL’in kendi anahtar yönetimi işlevselliği kullanılabilir. Anahtarların güvenli bir şekilde saklanması, şifrelenmiş verilere erişim sağlamak için kritik öneme sahiptir. MySQL 8.0 ve sonraki sürümler, anahtar yönetimi için daha kapsamlı seçenekler sunmaktadır.
Anahtar yönetimi için yapılandırma dosyasına aşağıdaki satırlar eklenebilir:
“`
[mysqld]
keyring-file-data=/path/to/keyring
“`
Bu ayarlar, şifreleme anahtarlarının depolanacağı dosya yolunu belirtir. Anahtarlar, MySQL hizmeti başlatıldığında otomatik olarak yüklenecektir.
Sonuç
MySQL’de şifreleme, veri güvenliğini artırmak için önemli bir araçtır. Kullanıcıların TLS/SSL ile bağlantılarını güvenli hale getirmeleri ve InnoDB data-at-rest şifrelemesini etkinleştirmeleri, yetkisiz erişim ve veri ihlalleri riskini minimize etmeye yardımcı olur. Şifreleme anahtarlarının yönetimi de güvenliğin sağlanmasında kritik rol oynamaktadır. Bu nedenle, MySQL şifreleme yöntemlerinin dikkatli ve bilinçli bir şekilde yapılandırılması ve uygulanması gereklidir.

