Mysql.user adresinden anonim kullanıcı bırakılamaz


15

My mysql.users veritabanından anonim kullanıcıları DROP çalışıyorum. Ancak garip davranışlar yaşıyorum. Komutu girdiğimde:

DROP User ''@'WOPR';

Genel bir hata mesajı alıyordum. Böylece, makinemi yeniden başlattım ve tekrar denedim. Bu sefer yanıtı aldım

Query OK, 0 rows affected.

Ama içeri girdiğimde

SELECT User, Host, Password FROM mysql.user WHERE User='';

Dönüş:

+------+------+----------+
| User | Host | Password |
+------+------+----------+
|      | WOPR |          |
+------+------+----------+

(WOPR benim ana bilgisayar adım)

Komutu çalıştırıyorum

DROP User ''@'WOPR';

ve aynı sonucu elde edin.

Arch Linux, çekirdek sürüm 2.6.33 üzerinde yeni bir MySQL 5.5 kurulumu çalıştırıyorum.

Bu davranışa neyin sebep olabileceğini bilen var mı?


Lütfen DBA StackExchange bu tür sorular göndermek için kelime olsun !!!
RolandoMySQLDBA

Yanıtlar:


15
DELETE FROM mysql.user WHERE user='' AND host='WOPR';
FLUSH PRIVILEGES;

Bu sizin için yapmalı.

Bir şans ver !!!

UYARI

MySQL, mysql.user içine önceden kurulmuş bazı kullanıcılara sahiptir. Ayrıca, mysql.db, anonim erişime ve veritabanlarını sınamak için tam ayrıcalıklara sahip iki kullanıcı ile birlikte gelir.

Sadece bunu yap

SELECT * FROM mysql.db \G

ve teste bağlanan herkesin veya test_ ile başlayan herhangi bir veritabanının test veritabanındaki her şeyi yapabildiğini göreceksiniz. Herhangi bir test veritabanına tam erişimi olan bir kişi birkaç dakika içinde bir diski yiyebileceği için bu kötüdür.

Misal:

use test
CREATE TABLE junk (INT a) ENGINE=MyISAM;
INSERT INTO junk VALUES (1);

Tamam, önemli. 4 baytlık bir tablo yapar.

Şimdi bu SQL ifadesini 30 kez çalıştırmayı deneyin:

INSERT INTO junk SELECT * FROM junk;

Hey 1.073.741.824 satırlı bir anlık tablo (4GB + dosya) !!! Bir test veritabanında tam haklara sahip görüntüleme, burada bir diskte bu tür tahribatı kırabilirsin.

Size tavsiyem, test kullanıcı erişimini temizlemek için bunu çalıştırmaktır:

DELETE FROM mysql.db WHERE db LIKE 'tes%' AND user='';
FLUSH PRIVILEGES;

Daha fazla açıklama için MySQL gönderime bakın : Neden mysql.db dosyasında "test" girdileri var?

Şerefe !!!


Merhaba Rolando, Hile yaptı, teşekkürler! Aslında şu anda test veritabanı erişimimi düzeltiyorum.
SirTasty

drop userTemel mysql.usertabloyu doğrudan değiştirmek yerine sözdizimini kullanmanın bir yolu yok mu?
Pacerier

1
@Pacerier Lütfen orijinal soruya bakın. Asıl sorun, DROP USERkullanıcı alanı boş olduğunda (boş dize) sözdiziminin çalışmamasıdır. Cevabın belirttiği şekilde yapmalısınız.
RolandoMySQLDBA

@RolandoMySQLDBA, Masaya hacklemenin yanı sıra başka çözümler var mysql.usermı?
Pacerier

@Pacerier Son bağlantımı okursanız, MySQL'in (şimdi Oracle) mysql.dbanonim kullanıcıların test veritabanına erişmesine izin verecek şekilde doğrudan kurulum üzerine iki satırı yerleştirdiğini anlayacaksınız. İlginç bir şekilde, Percona Server kurulumunun kurulum tamamlanmadan önce bu satırları sildiği söylendi ( dba.stackexchange.com/questions/66584/… ). MySQL kullandığınız için, mysql_secure_installation komutunu çalıştırın veya bu iki satırı kendiniz silin.
RolandoMySQLDBA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.