ข้อผิดพลาด 1044 (42000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ '' @ 'localhost' ไปยังฐานข้อมูล 'db'


164

ฉันต้องการเริ่มเขียนแบบสอบถามใน MySQL

show grants แสดงให้เห็นว่า:

+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+

ฉันไม่มี user-id ใด ๆ แต่เมื่อฉันต้องการสร้างผู้ใช้ฉันไม่มีสิทธิ์พิเศษฉันยังไม่รู้วิธีการใช้สิทธิ์แม้เมื่อฉันไม่มีผู้ใช้คนเดียว!

mysql> CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'parsa';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER pr
ivilege(s) for this operation

ฉันพยายามลงชื่อเข้าใช้ด้วยการรูท:

mysql> mysql -u root -p;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
 -u root -p' at line 1
mysql> mysql -u root -p root;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
 -u root -p root' at line 1

3
คุณต้องเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ อย่างน้อยrootควรสร้างเมื่อคุณติดตั้ง MySQL
Derobert

ระหว่างการติดตั้งบอกให้ฉันตั้งรหัสผ่านและฉันตั้งค่าเป็นรูทตอนนี้ฉันต้องทำอย่างไร
Nickool

9
mysql -u root -pคุณจำเป็นต้องเข้าสู่ระบบเป็นรากเช่นโดยการทำงาน จากนั้นคุณจะมีสิทธิ์อย่างเต็มที่ในเซิร์ฟเวอร์ฐานข้อมูลและคุณสามารถสร้างผู้ใช้รายอื่นได้
Derobert

เมื่อคุณเข้าสู่ระบบโดยใช้บรรทัดคำสั่งให้ทำดังต่อไปนี้เพื่อเข้าสู่ระบบในฐานะ root: mysql -u root -p
Travis

1
@nikparsa: ไม่คุณต้องเรียกใช้งานแทน 'mysql' - จาก shell prompt ไม่ใช่ที่ mysql prompt
Derobert

คำตอบ:


219

ไม่คุณควรรันmysql -u root -pด้วย bash ไม่ใช่ที่บรรทัดคำสั่ง MySQL ถ้าคุณอยู่ใน MySQL, คุณสามารถออกจากการพิมพ์ทางออก


ฉันจะไปทุบตีได้อย่างไรฉันมีปัญหาในการติดตั้ง mysql ดูที่นี่superuser.com/questions/377679/ …ฉันเพิ่งรู้ว่า abt ในบรรทัดคำสั่ง
Nickool

6
ใช้ 'เลิก' เพื่อออกจาก mysql แล้วคุณจะถูกทุบตี
Nowhy

23
FYI โดยค่าเริ่มต้นรหัสผ่านจะว่างเปล่า
bigpotato

ถ้าฉันใช้หน้าต่างล่ะ
PHPFan

ออกจากหรือเลิกไม่ทำงานสำหรับฉันโปรดระบุวิธีอื่น ฉันใช้ windows 10
Metin Dagcilar

46

คุณอาจต้องตั้งค่าบัญชีรูทสำหรับฐานข้อมูล MySQL ของคุณ:

ในประเภทอาคาร:

mysqladmin -u root password 'root password goes here'

จากนั้นให้เรียกใช้ไคลเอนต์ MySQL:

mysql -h localhost -u root -p

1
อันนี้ใช้ได้สำหรับฉันมันใช้ได้ดีในตอนแรกและจากนั้นก็หยุดทำงานในวันหนึ่ง ความคิดใด ๆ ทำไมสิ่งนี้เกิดขึ้นตั้งแต่แรก?
mu 無

@soleshoe im ได้รับข้อผิดพลาด: sudo: mysqladmin: ไม่พบคำสั่งโปรดช่วยฉันฉันจะทำอย่างไร ?? mysql ยังทำงานอยู่ในการตั้งค่าระบบ
Hitarth

29

ฉันถูกนำมาที่นี่ด้วยปัญหาที่แตกต่าง เมื่อใดก็ตามที่ฉันพยายามที่จะเข้าสู่ระบบฉันได้รับข้อความนั้นเพราะแทนที่จะรับรองความถูกต้องอย่างถูกต้องฉันเข้าสู่ระบบในฐานะผู้ใช้ที่ไม่ระบุชื่อ ทางออกสำหรับปัญหาของฉันคือ:

หากต้องการดูว่าคุณเป็นผู้ใช้รายใดและคุณมีสิทธิ์อนุญาตใด

select user(), current_user();

วิธีลบผู้ใช้นิรนามที่น่ารำคาญ:

drop user ''@'localhost';

1
วิธีนี้แก้ไขปัญหาสำหรับฉันแม้ว่าฉันจะใช้ "mysql -u ชื่อผู้ใช้ -p" แปลกมาก: user () เป็นชื่อผู้ใช้ของฉัน แต่ current_user () เป็น localhost ... ไม่รู้ทำไมหรือ
ethanpil

2
@Lftftis สวัสดี .. ฉันได้รับข้อผิดพลาดนี้: การเข้าถึงถูกปฏิเสธ; คุณต้องการ (อย่างน้อยหนึ่งใน) สิทธิ์ผู้ใช้ CREATE USER สำหรับการดำเนินการนี้เมื่อฉันพยายามที่จะวางผู้ใช้ '' @ 'localhost';
Hitarth

15

นี่คือสิ่งที่จะทำอย่างไรกับสิทธิ์ผู้ใช้ การให้ทุนที่เหมาะสมจะช่วยแก้ปัญหานี้ได้

ขั้นตอน [1]: เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งนี้

$ mysql -uroot -p

เอาท์พุท [1]: นี่จะให้ mysql ที่แสดงด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนที่ 2]:

mysql> CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'your_password';
mysql> grant all privileges on *.* to 'parsa'@'localhost';

ไวยากรณ์:

mysql> grant all privileges on `database_name`.`table_name` to 'user_name'@'hostname';

บันทึก:

  • ชื่อโฮสต์สามารถเป็นที่อยู่ IP, localhost, 127.0.0.1
  • ในdatabase_name/ table_name, * หมายถึงฐานข้อมูลทั้งหมด
  • ในhostnameการระบุโฮสต์ทั้งหมดใช้ '%'

ขั้นตอน [3]: รับออกจาก MySQL ปัจจุบันพรอมต์โดยทั้งเข้าquit/ คำสั่งหรือกดexitCtrl+D

ขั้นตอน [4]: ​​ลงชื่อเข้าใช้ผู้ใช้ใหม่ของคุณ

$ mysql -uparsa -pyour_password

ขั้นตอน [5]: สร้างฐานข้อมูล

mysql> create database `database_name`;

เมื่อฉันCREATE USER 'parsa'@'localhost' IDENTIFIED BY 'your_password';ได้รับข้อผิดพลาด: ข้อผิดพลาด 1227 (42000): การเข้าถึงถูกปฏิเสธ; คุณต้องการ (อย่างน้อยหนึ่งใน) สิทธิ์ผู้ใช้ CREATE สำหรับการดำเนินการนี้
เครื่องบิน

คุณลงชื่อเข้าใช้ไคลเอนต์ mysql โดยใช้ผู้ใช้รูท
theBuzzyCoder

9

คุณอาจต้องการลองคำสั่งเข้าสู่ระบบแบบเต็ม:

mysql -h host -u root -p 

เจ้าภาพจะอยู่127.0.0.1ที่ไหน

ทำสิ่งนี้เพียงเพื่อให้แน่ใจว่าความร่วมมือนั้นมีอยู่

การใช้mysql -u root -pช่วยให้ฉันค้นหาฐานข้อมูลได้จำนวนมาก แต่ปฏิเสธการสร้างฐานข้อมูลใด ๆ เนื่องจากการตั้งค่าเส้นทาง


6

ก่อนอื่นถ้าคุณไม่คุ้นเคยกับบรรทัดคำสั่งให้ลองใช้ phpmyadmin จากเว็บเบราว์เซอร์ของคุณ สิ่งนี้จะทำให้แน่ใจว่าคุณได้สร้างฐานข้อมูล mysql และชื่อผู้ใช้จริง

นี่คือวิธีที่คุณเชื่อมต่อจากบรรทัดคำสั่ง (bash):

mysql -h hostname -u username -p database_name

ตัวอย่างเช่น:

fabio@crunchbang ~ $ mysql -h 127.0.0.1 -u fabio -p fabiodb

1
-pเป็นรหัสผ่านและคุณใช้เพื่อส่งชื่อฐานข้อมูล นอกจากนี้สำหรับรหัสผ่านไม่ควรมีช่องว่าง b / w -pและรหัสผ่านจริง ใช้-Dเพื่อเชื่อมต่อกับฐานข้อมูลเฉพาะ
sv

5

หากคุณอยู่ในMySQLเชลล์ให้ออกโดยพิมพ์exitซึ่งจะนำคุณกลับไปที่พรอมต์คำสั่ง

ตอนนี้เริ่มต้นMySQLโดยใช้คำสั่งต่อไปนี้:

sudo mysql -u root -p

หากชื่อผู้ใช้ของคุณเป็นอย่างอื่นที่ไม่ใช่รูทให้แทนที่ 'รูท' ในคำสั่งด้านบนด้วยชื่อผู้ใช้ของคุณ:

sudo mysql -u <your-user-name> -p

จากนั้นจะขอให้คุณMySQLบัญชี / รหัสผ่านและคุณMySQLจะไม่แสดงปัญหาสิทธิ์การเข้าถึงใด ๆ แล้ว


หลังจากป้อนรหัสผ่านฉันได้รับ "sudo: mysql: ไม่พบคำสั่ง" โปรดช่วยฉันออกจากที่นี่
Hitarth

ไม่ควรเป็น "sudo:" ควรเป็น "sudo" ... หากไม่ใช่การพิมพ์ผิดฉันคิดว่านี่เป็นปัญหา
Kshitij Mittal

2

@Nickparsa ... คุณมี 2 ประเด็น:

1) mysql -uroot -p ควรพิมพ์ด้วย bash (หรือเรียกอีกอย่างว่าเทอร์มินัลของคุณ) ไม่ใช่ในคำสั่ง MySQL คุณแก้ไขข้อผิดพลาดนี้โดยการพิมพ์

exit

ใน MySQL command-line ของคุณ ตอนนี้คุณกลับมาที่ bash / terminal command-line แล้ว

2) คุณมีข้อผิดพลาดทางไวยากรณ์:

mysql -uroot -p; 

อัฒภาคที่อยู่ด้านหน้า -p จำเป็นต้องไป ไวยากรณ์ที่ถูกต้องคือ:

mysql -uroot -p

พิมพ์ไวยากรณ์ที่ถูกต้องใน bash commandline ของคุณ ป้อนรหัสผ่านหากคุณตั้งค่าไว้ อื่นเพียงแค่กดปุ่ม Enter คุณควรได้รับคำตอบที่คล้ายกับสิ่งนี้: ป้อนคำอธิบายรูปภาพที่นี่

หวังว่านี่จะช่วยได้!


สวัสดีฉันได้รับหน้าจอ abow direcly หลังจากไฟนี้ยกย่อง / usr / local / mysql / bin / mysql แต่หลังจากนั้นเมื่อฉันพยายามสร้างฐานข้อมูลโดยใช้หนังสือ "CREATE DATABASE;" ฉันได้รับข้อผิดพลาด: ข้อผิดพลาด 1,044 (42000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ '' @ 'localhost' ไปยังฐานข้อมูล ' หนังสือ 'โปรดช่วยฉัน
Hitarth

0

นักพัฒนาซอฟต์แวร์ส่วนใหญ่เข้าสู่ระบบเซิร์ฟเวอร์ (ฉันถือว่าคุณมีชื่อผู้ใช้และรหัสผ่านสำหรับฐานข้อมูล mysql) จาก Bash พวกเขาเปลี่ยนไปmysql> promptใช้คำสั่งด้านล่าง (ซึ่งไม่ทำงาน

mysql -h localhost -u root -p

สิ่งที่ต้องทำคือใช้คำสั่งดังกล่าวใน bash prompt -> ในการทำเช่นนั้นมันจะถามรหัสผ่านหากได้รับมันจะนำไปที่ mysql พร้อมรับคำสั่งและ

จากนั้นฐานข้อมูลสามารถสร้างตารางทีละตาราง

ฉันเผชิญหน้ากับการหยุดชะงักที่คล้ายกันดังนั้นการแบ่งปันประสบการณ์


0

ฉันมีคำสั่งที่ถูกต้องต่อคำตอบข้างต้นสิ่งที่ฉันพลาดคือใน Workbench ที่เราพูดถึง 'จำกัด การเชื่อมต่อจากโฮสต์' สำหรับผู้ใช้มันเริ่มต้นที่ "%" - เปลี่ยนเป็น "localhost" และเชื่อมต่อได้ดีหลังจากนั้น!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.