Ubuntu depolarından yüklenen mysql-sunucu paketlerine varsayılan olarak yüklenen 'debian-sys-maint' kullanıcısı tarafından birkaç kez ısırıldım.
Genellikle sorun giderme veya yeni geliştirme için üretim veritabanımızın (Debian/Ubuntu üzerinde çalışmayan) yeni bir kopyasını çekiyorum ve mysql.user tablosunu hariç tutmayı ve böylece debian-sys-maint kullanıcısını kaybetmeyi unutuyorum.
Herhangi bir nedenden dolayı yeni mysql kullanıcıları eklersek, bunları tabloyu kaplamak yerine geliştirme ortamımda 'birleştirmem' gerekir.
Kullanıcı olmadan sistemim hala işlevsel görünüyor, ancak aşağıdaki gibi hatalarla uğraştı:
Sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Düzenle
Ek soru - /etc/mysql/debian.cnf içindeki şifre zaten karma mı yoksa düz metin şifre mi? Kullanıcıyı yeniden oluşturduğunuzda önemlidir ve ilk denemede asla doğru şekilde görünmüyorum.
Teşekkürler
Debian-sys-maint ne için kullanılır?
Bunun için kullanılan önemli bir şey, sunucuya günlükleri yuvarlamasını söylemektir. En azından yeniden yükleme ve kapatma ayrıcalığına ihtiyaç duyuyor.
/etc/logrotate.d/mysql-server dosyasına bakın
Sunucunun durumunu almak için /etc/init.d/mysql
Komut dosyası tarafından kullanılır. Sunucuyu incelikle kapatmak/yeniden yüklemek için kullanılır.
İşte README'den alıntı.
* MYSQL WON'T START OR STOP?:
=============================
You may never ever delete the special mysql user "debian-sys-maint". This user
together with the credentials in /etc/mysql/debian.cnf are used by the init
scripts to stop the server as they would require knowledge of the mysql root
users password else.
Kaybolduktan sonra geri yüklemenin en kolay yolu nedir?
En iyi plan sadece kaybetmemek. Şifreyi gerçekten kaybederseniz, başka bir hesap kullanarak sıfırlayın. Mysql sunucusundaki tüm yönetici ayrıcalıklarını kaybettiyseniz, kök parolayı sıfırlamak için yönergeleri izleyin, ardından debian-sys-maint
'U onarın.
Hesabı yeniden oluşturmak için daha sonra kullanabileceğiniz bir SQL dosyası oluşturmak için böyle bir komut kullanabilirsiniz.
mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql
/Etc/mysql/debian.cnf içindeki şifre zaten karma mı?
Parola yüklendiğinde karma/şifrelenmez, ancak mysql'nin yeni sürümlerinin artık kimlik bilgilerini şifreleme yolu vardır (bkz: https://serverfault.com/a/75036 ).
debian-sys-maint kullanıcı varsayılan olarak a kök eşdeğeri şeklindedir. Debian sistemlerinde belirli bakım komut dosyaları tarafından kullanılır ve yan etki olarak, kutuda kök erişimine sahip kullanıcıların /etc/mysql/debian.cnf (iyi veya kötü?)
Kullanıcıyı şu yollarla yeniden oluşturabilirsiniz:
GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY 'your password' WITH GRANT OPTION;
Sadece şifrenin eşleştiğinden emin olun /etc/mysql/debian.cnf
Sadece yorum yapmak istedim, ama sanırım doğru sözdizimi kendi girişini hak ediyor. Bu, debian-sys-maint kullanıcıyı oluşturur:
mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
Hala /etc/mysql/debian.cnf dosyanız varsa, oradaki parolayı kullanmanız yeterlidir.
Daha fazlasını bulmaktan çekinmeyin paranoyak güvenli çözüm.
Ayrıca yapabilirdin:
Sudo dpkg-reconfigure mysql-server-5.0
Bu size debian-sys-maint kullanıcısını yeniden oluşturma seçeneği sunacaktır. Mevcut kullanıcılar ve veritabanları güvenlidir.
debian-sys-maint
kullanıcı sadece logrotate.d
amaçlar, değil hibe ALL PRIVILEGES
ya da GRANT OPTION
- Bu gereksiz bir dev güvenlik deliği. Bunun yerine, kullanıcıyı RELOAD
ayrıcalığına sahip olarak ekleyebilirsiniz (db'nize root
olarak eriştiğinizi varsayarsak ve xxxxxx'i şifrenizle değiştirirseniz)
# add the user with the reload right
GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx';
# reload the rights
FLUSH PRIVILEGES;
# double check
select * from mysql.user;
2019 Güncellemesi
Bu cevap güncel olmayabilir - lütfen aşağıdaki güçlü görüşlere bakın.
Diğer yanıtlar, debian-sys-maint kullanıcısı için gereken minimum izinler kümesi dışında her şeyi yeterince ele almıştır. Buradaki cevapların çoğu bu açıdan yanlış ve aslında tehlikelidir. Debian-sys-maint ayrıcalıklarını (hibe seçeneği dahil) aşağıdaki okuma ve anlamadan azaltmayın:
Debian bakıcısı kullanıcıya kaprisli bir şekilde tüm ayrıcalıkları vermedi. İşte gerekli olan, nerede ve neden. Bu ayrıcalıklardan bazıları başkalarının üst kümeleridir, ancak bir şeyleri özelleştirmek ve gereksinimlerini kaldırmak istiyorsanız bunları bağımsız olarak listeleyeceğim:
Sonuncusu, elbette, imtiyazlar için temel gereksinimdir. Mysql_upgrade için man sayfası şunu belirtir:
mysql_upgrade, MySQL Server'ın geçerli sürümüyle uyumsuzluk açısından tüm veritabanlarındaki tüm tabloları inceler. mysql_upgrade ayrıca eklenmiş olabilecek yeni ayrıcalıklardan veya özelliklerden yararlanabilmeniz için sistem tablolarını da yükseltir.
Mysql_upgrade bir tablonun olası bir uyumsuzluğa sahip olduğunu bulursa, bir tablo denetimi gerçekleştirir ve sorun bulunursa bir tablo onarımı dener.
WARNING debian-sys-maint'in sahip olduğu ayrıcalıkları azaltmaya karar verirseniz, gelecekteki debian güvenlik güncellemelerini elle işlemeye hazır olduğunuzdan emin olun ve/veya MySQL'e dokunan yükseltmeler. MySQL paketlerinde debian-sys-maint ayrıcalığına sahip bir güncelleme gerçekleştirirseniz ve mysql_upgrade sonuç olarak tamamlanamazsa, veritabanınızı tanımsız (okuma bozuk) durumda bırakabilir. Bir güncelleme gelinceye kadar ayrıcalıkların azaltılmasıyla ilgili herhangi bir günlük sorun olmayabilir, bu yüzden güvenli olduğunu düşünmek için zararlı etkileri olmayan ayrıcalıkları zaten azaltmış olmayın.
Onun yerine
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION; FLUSH PRIVILEGES;
Bence
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES;
parola karma olmadığı için ...?
MySQL 5.6+ kullanırken, mysql_config_editor
Komutunu kullanarak kullanıcı için 'debian-sys-maint'@'localhost'
İçin ilgili şifreyi kullanarak bir giriş oluşturun, yani şifrenin düz metin olarak saklanması gerekmez. sunucusu.
mysql_config_editor set --login-path=debian-sys-maint --Host=localhost --user=debian-sys-maint --password
Bundan sonra, debian'a özgü yapılandırma dosyası /etc/mysql/debian.cnf
Değiştirilebilir, böylece kullanıcı adı ve şifre bilgileri dosyada saklanmaz.
Son olarak, MySQL için logrotate dosyasını değiştirerek debian'a özgü dosya yerine ~/.mylogin.cnf
Dosyasında saklanan oturum açma bilgilerini kullanacak şekilde değiştirin.
/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf
ile
/usr/bin/mysqladmin --login-path=debian-sys-maint
Bu yardımcı olur umarım :)
Dave
Bunun bir yan notu olarak, debian'a özgü şeyleri devre dışı bırakmak isteyebileceğiniz nedenlerden dolayı bu mysql performans blog yazısı adresine bir göz atın.