Rol tabanlı en az yetki modeli kur (CREATE ROLE, DEFAULT ROLE)
MySQLGüvenlikKomut
CREATE ROLE IF NOT EXISTS 'app_read', 'app_write';
GRANT SELECT ON shop.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON shop.* TO 'app_write';
-- Uygulama hesabi: ag araligi, TLS zorunlu, roller varsayilan aktif
CREATE USER 'svc_app'@'10.0.%' IDENTIFIED BY 'S3cure#App2024' DEFAULT ROLE 'app_read', 'app_write' REQUIRE SSL;
CREATE USER 'ana'@'%' IDENTIFIED BY 'An4#Report2024';
GRANT 'app_read' TO 'ana'@'%';
SET DEFAULT ROLE ALL TO 'ana'@'%';
-- Rollerin acilmis yetkileriyle birlikte goster
SHOW GRANTS FOR 'svc_app'@'10.0.%' USING 'app_read', 'app_write';
SELECT FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges;Ne yapar?
Yetkileri kullanıcılara tek tek değil rollere verir; hesaplar rol üyeliğiyle yetki alır. Yetki değişikliği tek noktadan yapılır, denetim ve offboarding kolaylaşır.
Ne zaman kullanılır?
Yeni uygulama / ekip hesabı açarken ve yetki karmaşası olan eski sunucuları toparlarken.
Dikkat
Rol varsayılan rol yapılmazsa oturumda aktif olmaz (CURRENT_ROLE() NONE) ve kullanıcı yetkisiz görünür; SET DEFAULT ROLE ALL veya activate_all_roles_on_login=ON. Rol de bir hesaptır (kilitli, parolasız) ve mysql.user'da görünür. Host'u '%' olan uygulama hesapları yerine ağ aralığı kullan. Uygulama hesabına ALL, SUPER, FILE, PROCESS, CONNECTION_ADMIN verme. Rolden yetki geri alındığında aktif oturumlar da etkilenir.