MySQL 8.0'da kök kullanıcıya tüm ayrıcalıklar nasıl verilir


131

Denenmiş

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

Başlarken

ERROR 1064 (42000): SQL sözdiziminizde bir hata var; 1. satırdaki 'IDENTIFIED BY' root 'WITH GRANT OPTION' yakınında kullanmak için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın.

Not: Aynısı, önceki sürümlerde denendiğinde çalışıyor.

Ayrıca denedim

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Başlarken

HATA 1410 (42000): GRANT ile kullanıcı oluşturmanıza izin verilmiyor

MySQL (8.0.11.0) kullanıcı adı / şifresi root / root'tur.


doğrudan mysql ile mi bağlanıyorsunuz yoksa ssh mi kullanıyorsunuz?
Harald

doğrudan komut isteminden kök kullanıcı olarak
Praveen


7
Ben de aynı konuya sıkıştım. Kullanarak mysql kabuğunu başlatıyorum mysql -u root -p, ardından root şifresini giriyorum. Sonra denedim GRANT GRANT OPTION ON *.* TO 'root'@'%';ve hatayı aldımERROR 1410 (42000): You are not allowed to create a user with GRANT
aiman

Yanıtlar:


223

MySQL 8 ile başlayarak artık GRANTkomutu kullanarak (örtük olarak) bir kullanıcı oluşturamazsınız . Kullanım CREATE USER ardından yerine VERME açıklamada:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Aşağıdakilerle ilgili güvenlik risklerine dikkat edin WITH GRANT OPTION:


3
Bu komut yeni bir kullanıcı yaratacaktır. Ancak mevcut kök kullanıcıya ayrıcalıklar vermek istiyorum. mysql> CREATE USER 'root' @ '%' 'root' TARAFINDAN TANIMLANMIŞTIR; Sorgu TAMAM, 0 satır etkilendi (0,31 saniye) mysql> TÜM AYRICALIKLARI AÇIK VERİN . GRANT SEÇENEĞİ İLE 'root' @ '%' Sorgu TAMAM, 0 satır etkilendi (0.16 sn) mysql> mysql.user'dan Kullanıcı SEÇ; + ------------------ + | Kullanıcı | + ------------------ + | kök | | mysql.infoschema | | mysql.session | | mysql.sys | | kök | + ------------------ + sette 5 sıra (0,00 sn)
Praveen

Şimdi kullanıcı tablosunda root ismine sahip iki kullanıcı var !! Ayrıca uzaktan bağlanamıyorum (kök kullanıcı). ------------- Ayrıntılar: Tür: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException SQL Durumu: 08001
Praveen

Tuhaf. Sorunuzdaki hata mesajı bu kullanıcının var olmadığını gösterir. İlk önce onu yaratmayı önermemin tek nedeni bu. Ve aynı kullanıcıya tek bir MySQL örneğinde iki kez sahip olmak imkansızdır. Ad veya ana bilgisayar bölümünde farklılık gösterirler.
Mike Lischke

2
Bu 2 kullanıcı farklı ana bilgisayarlardan bağlanır. Onun SELECT User, Host FROM mysql.user;yerine çalıştırın .
Mike Lischke

3
Bu hatayı ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
adi

41

Pek çok (yanlış) cevap görüyorum, bu kadar basit:

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

Not: Kendi oluşturduğunuz bir veritabanı yerine veritabanına bağlanmak için userkullanabilirsiniz root. Ancak, bir uygulamanın veritabanına bağlanmasına izin vermek için varsayılan kök hesabını kullanmak tercih edilen yol değildir.

Alternatif ayrıcalıklar (dikkatli olun ve en az ayrıcalık ilkesini unutmayın):

-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';

-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';

-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';

Bir şekilde aşağıdaki hatayla karşılaşırsanız:

HATA 1130 (HY000): '1.2.3.4' ana bilgisayarının bu MySQL sunucusuna bağlanmasına izin verilmiyor

Aşağıdaki iki satırı eklemeniz / değiştirmeniz /etc/mysql/my.cnfve mysql'yi yeniden başlatmanız gerekir:

bind-address           = 0.0.0.0
skip-networking

Sadece şikayet etmek yerine neden işe yaramadığını açıklar mısınız? Bu şekilde size yardımcı olabilir veya ek bilgiler gönderebilirim.
Nebulastik

Bu cevap, kök kullanıcı ayrıcalığı sorununu ele almıyor bile .
Joseph 8

Cevap buna göre güncellendi.
Nebulastik

1
En iyi cevap, şimdi GRANT ALL ONMySQL 8.0 için. Ayrıca, devre dışı bırakmak yerine herhangi bir komuta bind-addressbağlanıp 127.0.0.1dahil edebileceğinizi düşünüyorum --protocol=tcp. Uzun vadeli performans da olduğundan daha iyidir localhost.
Jesse Nickles

Burada benimkinin yanı sıra tüm cevapların kaçırdığı şey, OP'nin kullanıcının artık GRANT komutuyla neden yaratılamayacağını merak etmesi. GRANTAyrıcalıkların nasıl kullanılacağı asla sorulmadı . Ancak bir şekilde insanlar daha önce sorulan ve cevaplananları okumayı reddediyor.
Mike Lischke

34

1) Bu benim için çalıştı. İlk önce yeni bir kullanıcı oluşturun. Örnek: Kullanıcı fooşifre ilebar

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2) Aşağıdaki kodu 'foo' olan bir kullanıcı adıyla değiştirin.

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

Not: veritabanı_adı, ayrıcalıklara sahip olmak istediğiniz veritabanıdır . her şeye rağmen

3) foo kullanıcı olarak giriş yapın

mysql> mysql -u foo -p

Şifre: bar

4) Sequelize'den ilk bağlantınızın pw bar ile foo olarak ayarlandığından emin olun.


5
Bu soruya açık ara cevap vermiyor. Bu, genel izinlerle ilgilidir ve veritabanına özgü izinlerle ilgili değildir.
tmuecksch

4

Özelliklerim:

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

Benim için ne işe yaradı:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

Her iki sorguda da yanıt:

Query OK, O rows affected (0.10 sec*)

NB: Daha önce bir veritabanı (db_name) oluşturdum ve bir yerde okuduğum varsayılan kök kullanıcısını kullanmak yerine DB'deki tüm tablolara verilen tüm yetkilere sahip bir kullanıcı kimlik bilgisi oluşturuyordum en iyi uygulama.


4

Belirtilen kullanıcı MySQL'inizde mevcut değil (yani MySQL, sürüm 8'den önce olduğu gibi GRANT ile oluşturmaya çalışıyor, ancak bu sürümde getirilen sınırlamalarla başarısız oluyor).

MySQL bu noktada oldukça aptaldır, bu nedenle 'root' @ 'localhost'a sahipseniz ve' root '@'% 'için ayrıcalıklar vermeye çalışıyorsanız, bunları herhangi bir ana bilgisayardaki kök kullanıcı için genelleştirilmiş kavramdan ziyade farklı kullanıcılar olarak ele alır. localhost.

Hata mesajı da yanıltıcıdır.

Dolayısıyla, hata mesajını alıyorsanız, mevcut kullanıcılarınızı şunun gibi kontrol edin:

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

ve sonra eksik kullanıcıyı oluşturun (Mike'ın önerdiği gibi) veya GRANT komutunuzu mevcut mevcut kullanıcı spesifikasyonuna ayarlayın.


Bu benim için geçerli bir çözümdü! Kullanıcı @ satırını tam olarak yazmayı başaramamıştım. Önerilen diğer çözümleri denemeden önce bunu kontrol ettiğinizden emin olun. Benim için şu oldu: CREATE USER 'user'@'%domain.com' ve ardından başarısız GRANT ifadesini yayınladığımda, sözdizimim bir '.' Farkındaydı. HİBE gibi görünüyordu .... TO 'user'@'%.domain.com'. '.' Yazmayı unuttum. Create ifademde ve bu sorunu çözmede tüm farkı yarattı.
wallisds

3

Konuyla ilgili sadece 2 sentim. MySQL Workbench'ten bağlanmaya çalışırken aynı sorunu yaşıyordum. Geliştirme için yerel bir korumalı alan kurmak için bir bitnami-mysql sanal makine çalıştırıyorum.

Bitnami'nin öğreticisi 'Tüm Ayrıcalıkları Ver' komutunu çalıştırmayı söyledi:

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

Bu açıkça işe yaramadı, sonunda Mike Lischke'nin cevabını kullanarak çalışmasını sağladım.

Olduğunu düşündüğüm şey, root @% kullanıcısının kendisiyle ilişkili yanlış kimlik bilgilerine sahip olduğuydu. Bu nedenle, kullanıcının ayrıcalıklarını değiştirmeye çalıştıysanız ve hiç şansınız yoksa şunu deneyin:

  1. Kullanıcıyı düşürmek.
  2. Kullanıcıyı yeniden oluşturun.
  3. My.cnf yapılandırma dosyanız üzerinde doğru bağlamaya sahip olduğunuzdan emin olun. Benim durumumda, sadece bir sandbox ortamı için olduğu için çizgiyi yorumladım.

Mysql Konsolundan:

Kullanıcıları Listeleme (tüm kullanıcılarınızı görmenizde faydalıdır):

select user, host from mysql.user;

İstenen Kullanıcıyı Bırak:

drop user '{{ username }}'@'%';

Kullanıcı Oluşturun ve İzinleri Verin:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

Bu komutu çalıştırın:

FLUSH PRIVILEGES;

Mysql yapılandırma dosyanızı 'my.cnf' bulun ve şuna benzeyen bir satır arayın:

bind-address=127.0.0.1

ve '#' kullanarak yorum yapın:

#bind-address=127.0.0.1

Ardından mysql hizmetinizi yeniden başlatın.

Umarım bu, aynı sorunu yaşayan birine yardımcı olur!


2

Kullanıcı adınızı kontrol edin ve etki alanı daha önce oluşturulanla aynıdır. Mysql, kullanıcı tablosundaki iki sütuna göre hesap seçin, eğer farklıysa, mysql, 8.0 sürümünden sonra desteklenmeyen hibe ile yeni bir hesap oluşturmak istediğinizi düşünebilir.


Kullanıcıda bir yazım hatası vardı ve olan buydu!
Cerveser

1

Bu benim için çalıştı:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES

1

Özelliklerim:

mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

Benim için ne işe yaradı:

mysql> USE mysql;
mysql> UPDATE User SET Host='%' WHERE User='root' AND Host='localhost';

Özel durumunuzda işe yarayacak olsa da. Bu sql sözdizimi parçaları bir kullanıcıyı günceller ve bir kullanıcı hesabı belirlemez. Ayrıcalık da sağlamaz.
Nebulastic

0

Ben de aynı sorunu yaşadım. Rota '%' olsa bile uzaktan bağlanamadı. Şimdi, my.inidosyaya (windows'daki yapılandırma dosyası) bakıldığında bind-addressifade gözden kaçtı.

Yani ... Bunu bind-address = *sonrasına koydum [mysqld]ve servisi yeniden başlattım. Şimdi çalışıyor!


Bu aslında doğru cevaba en yakın olanıdır.
Joseph 8

0

1. ayrıcalıklar verin

mysql> TÜM AYRICALIKLARI VERİN. HİBE SEÇENEĞİ İLE 'root' @ '%' KADAR;

mysql> FLUSH AYRICALIKLARI

2. kullanıcı tablosunu kontrol edin:

mysql> mysql kullan

mysql> ana bilgisayar seçin, kullanıcıdan kullanıcı görüntü açıklamasını buraya girin

3. Yapılandırma dosyasını değiştirin

mysql default bind ip : 127.0.0.1, servisleri uzaktan ziyaret etmek istiyorsak, sadece yapılandırmayı silin

#Modify the configuration file
vi /usr/local/etc/my.cnf

#Comment out the ip-address option
[mysqld]
# Only allow connections from localhost
#bind-address = 127.0.0.1

4. nihayet hizmetleri yeniden başlatın

brew hizmetleri mysql'yi yeniden başlat


Bu işe yarayacak olsa da, belirli yetkileri verirken üretimde bir mysql örneğini asla yeniden başlatmam. Bunun yerine yıkama ayrıcalıklarını deneyin.
Nebulastik

-1

Bu işe yarayabilir:

grant all on dbtest.* to 'dbuser'@'%' identified by 'mysql_password';

1
Kodu atmak yerine neden uygun çözüm olduğunu da açıklayın. Amaç, sadece acil sorunu çözmek değil, OP'nin bir sonraki sefer ne yapacağını bilmesi için eğitmektir.
Teneke Adam

-1

Aynı sorunu yaşadım, bu da beni buraya getirdi. Özellikle yerel kalkınma için mysql -u root -ponsuz yapabilmek istedim sudo. Yeni bir kullanıcı oluşturmak istemiyorum. rootYerel bir PHP web uygulamasından kullanmak istiyorum .

Varsayılan kullanıcı ayrıcalıklarında herhangi bir sorun olmadığı için hata mesajı yanıltıcıdır 'root'@'%'.

Birkaç kişi diğer yanıtlar belirtildiği gibi yerine, çözüm sadece sete oldu bind-address=0.0.0.0yerine bind-address=127.0.0.1benim de /etc/mysql/mysql.conf.d/mysqld.cnfyapılandırma. Aksi takdirde hiçbir değişiklik gerekmedi.


Bu soruya tam olarak cevap bile vermiyor.
Nebulastik

-2

CentOS'ta da aynı sorunu yaşadım ve bu benim için çalıştı (sürüm: 8.0.11):

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'

ERROR 1064 (42000): SQL sözdiziminizde bir hata var; 'yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın. K 1. satırda 'root' @ '%'
GDefender

mysql> TÜM AYRICALIKLARI VERİN. K 'kök' @ '%'; ERROR 1064 (42000): SQL sözdiziminizde bir hata var; 'yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın. K 1. satırda 'root' @ '%' 'mysql>
PGOEL
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.