MySQL kullanıcıları için ana bilgisayar izinlerini değiştirme


43

Bir kullanıcı / veritabanı için aşağıdaki hibelerim var

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+

Veritabanına harici erişimi etkinleştirmek için localhost olarak değiştirmem gerekiyor %. Bunu yapmanın bir yolu REVOKEtüm izinler ve tekrar ayarlamak. Sorun şu ki, bilmediğim bir şifre seti var, bu yüzden izni iptal edersem geri ayarlayamam.

İzni iptal etmeden , ana bilgisayar adını localhostdeğiştirmenin %(ve tekrar) geri alma yolu var mı ?

Yanıtlar:


58

mysqlVeritabanına erişiminiz varsa, hibe tablolarını doğrudan değiştirebilirsiniz:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

... ve UPDATEonu değiştirmek için benzer bir açıklama.

Ayrıca, mysql.dbtabloda da değişiklik yapmanız gerekebilir :

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

Küçük bir düzeltme (mysql Sunucu sürümü: 5.7.5-m15 - MySQL Community Server): hem phpmyadmin'den hem de mysql komut isteminden - UPDATE mysql. userSET Host= 'localhost' NEREDE user. Host= '%' VE user. User= 'XXXdbusr';
Jadeye

1
Bir üretim veritabanı için% ile dikkatli olurdum, güvenlik riski olabilir. Birden fazla web sunucunuz varsa, '192.168.0.%' Veya ''% .example.com '' gibi joker karakterli ana bilgisayarları da kullanabilirsiniz. Diğer bir seçenek de, her bir ana bilgisayara aynı kullanıcıyı birden çok kez eklemek veya web sunucusu başına ayrı olarak adlandırılmış bir kullanıcı oluşturmaktır.
Fx32

Benim gibi, yerel bir test cihazında (benim durumumdaki RasPi) root erişimine izin vermeye çalıştıysa, bu MySQL 5.7'den beri işe yaramaz. Bu konuya
Raul Pinto

@RaulPinto: Bu konu phpMyAdmin ile ilgili gibi görünüyor, burada tamamen ilgili değil, ancak bunu kullanan insanlar için not alması iyi.
nickgrim

İyi belgelenmiş bir ifadeyi kullanmak daha iyi RENAME USER
Antonio Bardazzi

6

Kullanıcı ayrıcalıklarının hangi kopyasının kullanıldığını öneren Stackoverflow'taki en iyi cevap RENAME USER.

Veri Kontrol Dilini (GRANT, REVOKE, RENAME ve benzeri ifadeler) kullanmak, FLUSH PRIVILEGES;MyISAM tablolarının çoğaltılmadığı Galera veya Grup Çoğaltma gibi mimaride gerekli değildir ve gereklidir.


2

Buna da rastladım ve önerilen çözüm işe yaramadı, çünkü veritabanına özgü ayrıcalıklar da taşınmayacaktı. ben ne yaptım:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

Ve "o" işe yaradı mı?
Pierre.Vriens

1

Ayrıcalıkları değiştirmek için önce tüm izinleri kullanıcıya geri al

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

Bu tam olarak benim sorunum, şifre yüzünden izinleri iptal edemiyorum. Lütfen sorumu oku.
Fu86

Parola karma değerini bir güncelleme yoluyla eskisiyle aynı olacak şekilde ayarlayabilirsiniz. Bunu yapmak için gerçek şifreyi bilmeniz gerekmez.
drogart

0

Db'den (tablo veya sütun vb.) Başka bir ayrıcalıklarınız varsa, tabloların çoğunu kaçırmak. Kullanıcınızın neye sahip olduğuna bağlı olarak, tüm bu tabloları veya bazılarını güncellemeniz gerekebilir:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
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.