MySQL db'de joker karakter (%) erişimine izin verilmesi, “'<user>' @ 'localhost' için erişim reddedildi” hatası alıyorum


17

Bir veritabanı ve kullanıcı oluşturdum ve aşağıdakiler aracılığıyla erişime izin verdim:

create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;

Ancak, MySQL bağlanmaya çalıştığınızda aşağıdaki hatayı alıyorum:

$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)

Joker karakter "%" ise, localhost'u da etkinleştirmez mi? Ancak, bir parola kullanmak istediğimi belirtmezsem, o zaman veritabanına iyi bir şekilde bağlanabilirim.

Yanıtlar:


17

İle bağlanmayı deneyin mysql -u someuser -p -h 127.0.0.1.

Parola olmadan bağlanabiliyorsanız, kimlik bilgilerini bir .my.cnf dosyasına kaydettiniz veya parola olmadan erişime izin veren bir hesap oluşturdunuz.


MySQL belgelerinden yapılan bu yorum da ilgili olabilir.

http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

Access'in neden reddedildiğini anlayamıyorsanız, joker karakterler içeren Ana Bilgisayar değerlerine sahip tüm girişleri ('%' veya '_' karakter içeren girişler) kaldırın. Çok yaygın bir hata, Host = '%' ve User = 'some_user' ile yeni bir giriş eklemektir, bunun aynı makineden bağlanmak için localhost belirtmenize izin verdiğini düşünür. Bunun çalışmamasının nedeni, varsayılan ayrıcalıkların Host = 'localhost' ve User = '' ile bir girdi içermesidir. Bu giriş, '%' den daha spesifik bir Host değerine 'localhost' sahip olduğundan, localhost'tan bağlanırken yeni girişe tercih edilir! Doğru prosedür Host = 'localhost' ve User = 'some_user' ile ikinci bir girdi eklemektir.


Ana bilgisayar tanımı ve ~ / .my.cnf referansı dahil +1
Andy

7

Aşağıdakilere ihtiyacınız olduğundan eminim:

hibe seçeneği ile somedb. * üzerindeki tüm ayrıcalıkları 'someuser' @ '%' a vermek;

GRANT ifadenizde bir ana bilgisayar adı bildirimi yok.


Bir konum belirtilmelidir:GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
tacotuesday

6

Mysql dosyasına bazı kullanıcı @ '%' kullanarak bağlanamıyorsanız, burada '%' ana bilgisayar adı için joker karakter ise, kullanıcı tablonuzda '' @ localhost girişi olmadığından emin olun. Aşağıdaki SQL ifadesini kullanarak onaylayın:

    mysql> SELECT * FROM user WHERE user='' AND host='localhost';

'' @Localhost varsa, aşağıdaki SQL deyimini vererek kaldırın:

    mysql> DELETE FROM user WHERE user='' AND host='localhost';

sonra son olarak

    FLUSH PRIVILEGES;

Şimdi someuser @ '%' veritabanına bağlanacak.


'Username' @ 'localhost' ayrıcalıklarının verilmesi, aynı kullanıcıya farklı bir konumdan verilen hibelerin çalışmamasına neden olmaz.
tacotuesday

bu nasıl alakalı? 'localhost' kullanıcısı ne işe yarar?
Steve Buzonas

1
@SteveBuzonas Bu kesinlikle alakalı. Zoredache'nin gönderdiği cevap için bir kod örneği sağlar. Localhost '%' den daha spesifiktir, bu nedenle localhost üzerinden yalnızca '%' erişimine sahip bir kullanıcıyla bağlanmaya çalışırsanız, localhost girişi daha spesifiktir, bu nedenle mysql localhost'ta oturum açmayı dener, ancak boş bir kullanıcı adı ve boş şifre. Bunlar sağlanan kimlik bilgileri olmadığından, erişim reddedildi hatasını alırsınız. Bu girişleri kaldırarak kullanıcılara '%' adresinden erişime izin verir.
bstakes

@ mysql istemcisinin varsayılan davranışı, siz belirtmezseniz kabuk kullanıcı adınızı kullanmaktır. sorunun örnekte ve hata iletisinde bir kullanıcı var. Ben bir '' kullanıcı adlandırılmış bir kullanıcı ile nasıl çakışma merak ediyordum. '' joker karakter mi?
Steve Buzonas

@SteveBuzonas '' localhost ile ilgili bir joker karakter gibi çalışıyor. MySQL Dokümanlarından yukarıda bahsettiğiniz varsayılana atıfta bulunarak yukarıdaki bir cevapta gösterilmektedir: "Bu giriş, '%' den daha spesifik bir Host değeri 'localhost' olduğundan, localhost'tan bağlanırken yeni girişe tercih edilir. ! Doğru prosedür Host = 'localhost' ve User = 'some_user' ile ikinci bir girdi eklemek veya Host = 'localhost' ve User = '' ile girişi silmek.
bstakes

4

Anlayışım ve bu konuda düzeltilmeye hazırım, MySQL'in localhost'a% olarak davranması. yani localhost joker karaktere dahil değildir.


Dev.mysql.com/doc/refman/5.1/en/connection-access.html dosyasında sağlanan örnekler , bunun doğru olmayabileceğine inanmamı sağlıyor. Aksi takdirde referanslarınız var mı?
Warner

Bu konudaki anlayışım, aynı sorunu hem yazılı hem de sözlü olarak bildiren ve "%" ve "localhost" kullanarak 2 kullanıcı oluşturarak çözen diğer kullanıcılara dayanıyor. Aslında resmi olarak belgelendiğini gördüğümü hatırlayamıyorum.
John Gardeniers

1
Bu en azından Ubuntu 12.04 LTS'de doğru gibi görünüyor
Dex

Bana olan şey, sahip olduğum user@%ve dahil edilene kadar işe yaramadığı user@localhost. Sonra stackoverflow.com/a/29421084/4850646 yanıtını gördüm ve ana bilgisayarla anonim bir kullanıcı olduğunu fark ettim localhost. Tüm anonim kullanıcıları kaldırdım ve kaldırdıktan sonra bile (ve sadece izin verdikten sonra)localhost o kullanıcı için erişebildim . Anlaşılan bir kullanıcı olsa bile , daha spesifik olduğu için öncelikle kullanıcıyı dener ! user@localhostuser@%localhost%localhost
Lucas Basquerotto

0

Yayınladığınız flush privileges;bir kullanıcı oluşturduktan sonra? Bunu yapmazsanız, kullanıcı / izinlerde yapılan değişiklikler sunucu yeniden başlatılana kadar sürmez.

Ardından, '%' @ 'localhost' girişinizin olmadığını kontrol edin.


4
'kullanıcı oluştur' ve 'ver' kullanıldığında ayrıcalıklar otomatik olarak temizlenir. Ayrıcalıkları yalnızca mysql veritabanını doğrudan işliyorsanız temizlemeniz gerekir.
Zoredache
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.