การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' ในขณะที่พยายามให้สิทธิ์ ฉันจะให้สิทธิ์พิเศษได้อย่างไร


166

ฉันดูคำถามที่คล้ายกันจำนวนหนึ่งดังนั้นฉันจึงแสดงให้เห็นว่าฉันได้ตรวจสอบข้อมูลเบื้องต้นแล้ว แม้ว่าแน่นอนว่านั่นไม่ได้หมายความว่าฉันไม่ได้พลาดบางสิ่งบางอย่างที่ชัดเจนโดยสิ้นเชิง :-)

คำถามของฉันคือ: เหตุใดฉันจึงปฏิเสธการเข้าถึงผู้ใช้ที่มีสิทธิ์ในการทำสิ่งที่ฉันพยายามทำและที่ฉันได้พิมพ์รหัสผ่านและได้รับสิทธิ์การเข้าถึงแล้ว? (เพื่อความสมบูรณ์ฉันพยายามพิมพ์รหัสผ่านผิดเพื่อให้แน่ใจว่าไคลเอนต์ MySQL จะปฏิเสธไม่ให้ฉันเข้าถึงเมื่อเริ่มต้นโปรแกรม)

พื้นหลัง:

ล็อกอินเข้าสู่เชลล์ของเครื่องที่รันเซิร์ฟเวอร์ MySQL ผ่าน ssh ฉันเข้าสู่ระบบด้วยรูท:

[myname@host ~]$ mysql -u root -p -hlocalhost
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

น่ากลัว การอ่านคำตอบของคำถามที่คล้ายกันของฉันแสดงให้เห็นว่าฉันควรตรวจสอบให้แน่ใจว่าสิทธิพิเศษเป็นปัจจุบันกับสิ่งที่อยู่ในตารางสิทธิ์

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> 

ต่อไปตรวจสอบให้แน่ใจว่าฉันเป็นคนที่ฉันคิดว่าฉัน:

mysql> SELECT user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

... และทำให้แน่ใจจริงๆ :

mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

mysql> 

จนถึงตอนนี้ดีมาก ตอนนี้ฉันมีสิทธิพิเศษอะไรบ้าง

mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                                                                                                                                                                                                                                                                                                                        |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

ตอนนี้อ่านยากหน่อยให้ลองใช้วิธีนี้ (คุณจะได้เห็นว่ามีผู้ใช้ 'รูท' ที่ไม่ใช่ localhost):

mysql> SELECT * FROM mysql.user WHERE User='root'\G
*************************** 1. row ***************************
                 Host: localhost
                 User: root
             Password: *[OBSCURED]
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
          Reload_priv: Y
        Shutdown_priv: Y
         Process_priv: Y
            File_priv: Y
           Grant_priv: Y
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
         Show_db_priv: Y
           Super_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
         Execute_priv: Y
      Repl_slave_priv: Y
     Repl_client_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
     Create_user_priv: Y
           Event_priv: Y
         Trigger_priv: Y
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
*************************** 2. row ***************************
                 Host: [HOSTNAME].com
                 User: root
             Password: *[OBSCURED]
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
          Reload_priv: Y
        Shutdown_priv: Y
         Process_priv: Y
            File_priv: Y
           Grant_priv: Y
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
         Show_db_priv: Y
           Super_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
         Execute_priv: Y
      Repl_slave_priv: Y
     Repl_client_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
     Create_user_priv: Y
           Event_priv: Y
         Trigger_priv: Y
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
 2 rows in set (0.00 sec)

! น่ากลัว MySQL คิดว่าฉันเป็น root @ localhost และ root @ localhost มีสิทธิ์เหล่านั้นทั้งหมด นั่นหมายความว่าฉันควรจะสามารถทำสิ่งที่ฉันต้องการใช่ไหม?

mysql> GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

ฉันจะทำให้บางสิ่งบางอย่างในแบบพื้นฐานนี้สับสนได้อย่างไร

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

ขอบคุณ!


2
ฉันประสบปัญหาเดียวกันจากระยะไกล (และเลือก * จาก mysql.user โดยที่ user = 'root' และ host = '%' แสดงสิทธิ์แบบเดียวกับที่คุณทำ) อย่างไรก็ตามมันทำงานบน LOCALHOST แม้ว่าแถวใน mysql.user กับ host = '%' จะเหมือนกับแถวที่มี host = 'localhost' นอกเหนือจากฟิลด์นั้น ฉันใช้ 5.0.45 ใน Windows Server 2003 คำตอบใด ๆ ได้รับการยอมรับอย่างสุดซึ้ง!
Richard Fawcett

3
+1 สำหรับคำถามที่มีการจัดระเบียบ!
Dewsworld

1
ตรวจสอบให้แน่ใจว่าคุณมี cmd ที่เปิดใช้งานโดยผู้ดูแลระบบ
Lijo

1
ฉันเพิ่งมีช่องว่างระหว่าง-pและรหัสผ่าน ฉันรู้ว่ามันโง่ แต่อาจช่วยใครบางคน
Vinay W

คำตอบ:


57

สังเกตว่าผลลัพธ์ของ

SHOW GRANTS FOR 'root'@'localhost';

ไม่ได้พูดว่า 'สิทธิพิเศษทั้งหมด' แต่ต้องระบุว่า root @ localhost มีอะไรบ้าง

สิทธิ์ทั้งหมดจะล้มเหลวเนื่องจากผู้ใช้ไม่สามารถให้สิทธิ์สิ่งที่ตนไม่มีและเซิร์ฟเวอร์ดูเหมือนจะคิดว่ามีบางอย่างไม่อยู่ที่นี่ ...

ตอนนี้มีอะไรหายไป?

ในระบบของฉันฉันได้รับสิ่งนี้:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.5.21-log |
+------------+
1 row in set (0.00 sec)

mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM mysql.user WHERE User='root' and Host='localhost'\G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: 
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y <----------------------------- new column in 5.5
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: <------------------------------- new column in 5.5
 authentication_string: <------------------------------- new column in 5.5
1 row in set (0.00 sec)

นอกจากนี้ยังมีตารางใหม่ใน 5.5 เช่น mysql.proxies_user: ตรวจสอบให้แน่ใจว่าคุณมี

เมื่อติดตั้งเซิร์ฟเวอร์ mysql ใหม่ล่าสุดสคริปต์ติดตั้งจะสร้างตาราง mysql. * ทั้งหมดที่มีโครงสร้างที่เหมาะสม

เมื่ออัพเกรดจากเวอร์ชั่นเก่าตรวจสอบให้แน่ใจว่ามีการใช้โพรซีเดอร์การอัพเกรด (mysql_upgrade) ที่เหมาะสมซึ่งจะเพิ่มตาราง / คอลัมน์ที่ขาดหายไป

มันเป็นเพียงการคาดเดา แต่ดูเหมือนว่า mysql_upgrade ไม่ได้ถูกทำขึ้นสำหรับอินสแตนซ์นี้ทำให้เกิดพฤติกรรมที่เห็น


7
นี่เป็นข้อมูลที่มีประโยชน์ แต่ฉันจะแก้ไขปัญหาได้อย่างไร
59

2
@augurar, เรียกใช้ mysql_upgrade
Marc Alff

หรือตรวจสอบว่าคุณมีผู้ใช้รายอื่นที่มี 'สิทธิ์ทั้งหมด' และเปลี่ยนเป็นผู้ใช้นั้นและเปลี่ยนสิทธิ์สำหรับ localhost ตัวอย่างเช่นฉันมีสิทธิ์ทั้งหมดใน root@127.0.0.1 และ root @ localhost ไม่ได้
Carabus Manuel

72

ฉันยังมีปัญหาเดียวกันนี้ แต่ใน Windows หลังจากอัปเกรดเป็น MySQL 5.5 จาก MySQL 5.1 ฉันพยายามแล้วการเปลี่ยนแปลง, การสร้างและการรีเซ็ตรหัสผ่านที่กล่าวถึงในที่นี่ , ที่นี่ , ที่นี่และที่นี่ , เงื่อนงำ ฉันยังคงได้รับข้อผิดพลาดเดียวกัน:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

ฉันสามารถเชื่อมต่อได้ตามปกติแสดงฐานข้อมูลทั้งหมดเลือกและแทรกสร้างและเพิ่มผู้ใช้และเมื่อพูดถึง GRANT ฉันก็เมาแล้ว ข้อผิดพลาดที่ถูกปฏิเสธการเข้าถึงนั้นปรากฏขึ้นอีกครั้ง

ฉันจัดการเพื่อแก้ปัญหานี้โดยการแก้ไขสิทธิ์โดยคำสั่งต่อไปนี้ในถังขยะเซิร์ฟเวอร์ / ไดเรกทอรี MySQL ดังกล่าวในที่นี่ :

C:\MySQL Server 5.5\bin> mysql_upgrade

จากนั้นปัญหาก็หมดไป ฉันหวังว่าโซลูชันนี้จะทำงานบน Linux เช่นกันเนื่องจากโดยปกติ MySQL จะให้คำสั่งเดียวกันทั้งบน Linux และ Windows


2
thanx .. ใน mac OS ที่มี mysql ติดตั้งผ่าน homebrew ให้รันคำสั่งต่อไปนี้cd /usr/local/Cellar/mysql/5.5.25a/bin && mysql_upgrade
zoras

30
หากคุณอยู่บน CentOs หรือติดตั้ง MySQL ผ่านตัวจัดการแพคเกจนี่น่าจะเป็นคำสั่งที่คุณควรรัน: /usr/bin/mysql_upgrade -u root -pป้อนรหัสผ่านและ Bob's Uncle!
Zjoia

หลังจากต่อสู้ที่นี่และที่นั่นด้วยความคิดเห็นมากมายสิ่งนี้ช่วยฉันได้ ขอบคุณมาก
siddhusingh

ฉันรู้ว่านี่เป็นรุ่นเก่า แต่สิ่งนี้ช่วยฉันได้มากและฉันต้องการเพิ่มความคิดเห็นอีกหนึ่งรายการสำหรับผู้เข้าชมในอนาคต: หากคุณได้รับ ACCESS DENIED พยายามเรียกใช้ mysql_upgrade ลองเรียกใช้แบบนี้แทน: mysql_upgrade -p
blizz

2
สิ่งที่ฉันพบคือถ้าคุณส่งออกฐานข้อมูลจาก MySQL <= 5.1 ผ่านmysqldump ... --all-databasesแล้วนำเข้านั้นลงใน MySQL> = 5.5 ผู้ใช้ของคุณจะถูกแทนที่ (แน่นอน) แต่คุณrootจะมีปัญหาเช่นเดียวกับ OP และmysql_upgradeจะไม่ทำงาน - คุณจะต้องเพิ่มธงคือ--force mysql_upgrade -u root -p --forceหวังว่าจะช่วยคนที่นี่
gregoltsov

62

สิ่งนี้อาจเกิดขึ้นเมื่อคุณพยายามให้สิทธิ์ทั้งหมดในทุกโต๊ะแก่ผู้ใช้รายอื่นเนื่องจากตาราง mysql.users ถูกพิจารณาว่าเป็นข้อ จำกัด สำหรับผู้ใช้ที่ไม่ใช่รูท

อย่างไรก็ตามต่อไปนี้ควรใช้งานได้:

GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;

โปรดทราบว่าเราใช้ `% '. * แทน *. *


28
กรุณาอธิบายสิ่งนี้ ทำไม '%'.*ทำงาน แต่ไม่*.*?
Pacerier

นี่เป็นวิธีที่ถูกต้องที่จะทำ คุณต้องเข้าสู่ระบบ MySQL เป็นหลักแล้วลองให้สิทธิ์
Nav

ฉันได้รับข้อผิดพลาดการเข้าถึง 1044 ถูกปฏิเสธ :( โปรดช่วยฉันด้วย
Bhaumik Thakkar

ขอขอบคุณพยายามเข้าถึง mysql จากแอปพลิเคชันไพ ธ อนโดยใช้ pymysql มีข้อผิดพลาดว่า "โฮสต์ไม่ได้รับอนุญาตให้เชื่อมต่อกับเซิร์ฟเวอร์ MariaDB นี้" แก้ไขได้โดยการเพิ่มผู้ใช้ใหม่ที่ระบุ [ที่นี่] ( stackoverflow.com/questions/19101243/… ) จากนั้นมีข้อผิดพลาดอื่นว่า "การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้" และแก้ไขโดยวิธีการของคุณ
Balraj Bains

1
หากคุณใช้'%'.*แทน `%`.*ไม่ทำงาน คุณต้องใช้`%`.*
Rosario Russo

7

เรื่องนี้เกิดขึ้นกับฉันเมื่อฉันพยายามติดตั้ง MySQL เวอร์ชันที่สูงกว่ารุ่นที่มีการกระจาย

ฉันลบเวอร์ชั่นเก่าแล้วติดตั้งใหม่ (rpm -e ... แล้ว rpm -i MySQL-server *) แต่ไม่ได้ตระหนักว่าไฟล์ใน / var / lib / mysql ยังคงมาจากเวอร์ชั่นเก่า (มีความแตกต่างเช่น อธิบายโดย Marc Alff - ขอบคุณ!)

ฉันสามารถทำ mysql_upgrade ได้ แต่เมื่อฉันต้องการเริ่มต้นใหม่ฉันได้ทำ:

# su - mysql
$ rm -rf /var/lib/mysql/*
$ mysql_install_db
# /etc/init.d/mysql start

จากนั้นตั้งค่ารหัสผ่านรูท (/ usr / bin / mysqladmin -u รหัสผ่านรูท) และทำงานได้ตามที่คาดไว้ด้วยคำสั่ง GRANT ...


ขอบคุณสิ่งนี้ช่วยฉันออก โชคดีที่มันไม่สำคัญว่าฉันจะกำจัด DB ทั้งหมด ...
Jarrod Mosen

5

โดยทั่วไปแล้วข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณไม่ได้ระบุรหัสผ่านหมายความว่าคุณมีรหัสผ่านที่ไม่ถูกต้องอยู่ในไฟล์ตัวเลือกบางตัว

อ่านDOCนี้เพื่อทำความเข้าใจวิธีกำหนดและจัดการรหัสผ่านให้กับบัญชี

ตรวจสอบว่าการอนุญาตในโฟลเดอร์/var/lib/mysql/mysql เป็น 711 หรือไม่


สิ่งนี้ใช้ได้สำหรับฉัน ดูเหมือนว่า mysql จะไม่สร้างการอนุญาตสำหรับ 'user' @ 'localhost' ดังนั้นฉันต้องสร้างผู้ใช้นั้นและตรวจสอบว่ามีรหัสผ่าน
Jerinaw

สิทธิ์ไม่ถูกต้อง! ฉันประหลาดใจ ขอบคุณมากสำหรับการโพสต์
อดัม

5

ฉันมีปัญหาเดียวกันคือสิทธิพิเศษทั้งหมดที่รูทมอบให้:

SHOW GRANTS FOR 'root'@'localhost'\G
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*[blabla]' WITH GRANT OPTION

... แต่ยังไม่ได้รับอนุญาตให้สร้างตาราง:

 create table t3(id int, txt varchar(50), primary key(id));
ERROR 1142 (42000): CREATE command denied to user 'root'@'localhost' for table 't3'

มันเกิดจากข้อผิดพลาดของผู้ใช้ที่น่ารำคาญนั่นคือฉันไม่ได้เลือกฐานข้อมูล หลังจากออกUSE dbnameแล้วก็ใช้งานได้ดี


5

ใน Debian ( ดังเสียงฮืด ๆ 7.8) กับ MySQL 5.5.40 ผมพบSELECT * FROM mysql.user WHERE User='root'\Gแสดงให้เห็นEvent_privและ 'สาขา Trigger_priv` มีอยู่ แต่ไม่ได้ตั้งค่าให้วาย

การวิ่งmysql_upgrade(มีหรือไม่มี--force) ไม่ได้ทำให้อะไรแตกต่าง ฉันต้องทำคู่มือ:

update user set Event_priv = 'Y',Trigger_priv = 'Y' where user = 'root'

จากนั้นในที่สุดฉันก็สามารถใช้:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION

…จากนั้นใช้อย่างแม่นยำยิ่งขึ้นในแต่ละฐานข้อมูล / บัญชีผู้ใช้


1
สิ่งนี้ช่วยแก้ไขปัญหาสำหรับฉันได้เช่นกัน แต่หลังจากที่ฉันพบว่าคุณต้องมีสิทธิ์ในการล้างข้อมูล หลังจากนั้นและเชื่อมต่อใหม่เพื่อตั้งค่าตัวเลือกการให้สิทธิ์
Hendrik

5

คุณอาจจะมากับคำถามนี้กับ MySQL รุ่น 8 ติดตั้ง (เช่นฉัน) และไม่พบคำตอบที่น่าพอใจ คุณไม่สามารถสร้างผู้ใช้เช่นนี้ในรุ่น 8 ได้อีก:

GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;

ข้อความแสดงข้อผิดพลาดค่อนข้างสับสนที่คุณได้รับกลับมาคือ: ERROR 1410 (42000): You are not allowed to create a user with GRANT

ในการสร้างผู้ใช้ในเวอร์ชัน 8 คุณต้องทำสองขั้นตอน:

CREATE USER 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]';
GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' WITH GRANT OPTION;

แน่นอนถ้าคุณต้องการคุณสามารถให้สิทธิ์พิเศษจำนวน จำกัด (แทนGRANT ALL PRIVILEGES) เช่นGRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER


3

การพิมพ์SHOW GRANTS FOR 'root'@'localhost';แสดงรหัสผ่านที่คลุมเครือให้ฉันดังนั้นฉันจึงลงชื่อเข้าใช้ mysql ของระบบนั้นโดยใช้ HeidiSQL ในระบบอื่น (ใช้rootเป็นชื่อผู้ใช้และรหัสผ่านที่สอดคล้องกัน) และพิมพ์
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;

และมันทำงานเมื่อฉันกลับไปที่ระบบและเข้าสู่ระบบโดยใช้
mysql -uroot -pthepassword;


2

ฉันทำงานที่นี่เมื่อฉันพยายามเพิ่มสิทธิ์ให้กับ performance_schema ซึ่งเป็นข้อผิดพลาด mysql http://bugs.mysql.com/bug.php?id=44898 (วิธีแก้ปัญหาเพื่อเพิ่ม --single-transaction)


2

ฉันมีปัญหาเดียวกันและใช้เวลามากในการอ่านโพสต์ SO และเอกสารของ Google ในที่สุดฉันก็พบสิ่งนี้จากคำถามที่พบบ่อยของCloud SQL :

Google Cloud SQL ไม่สนับสนุนสิทธิ์พิเศษซึ่งหมายความว่าGRANT ALL PRIVILEGESข้อความสั่งนั้นจะไม่ทำงาน คุณสามารถใช้แทนGRANT ALL ON `%`.*


1

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

SHOW GRANTS FOR username;

ในกรณีของฉันข้อผิดพลาดไม่ใช่จริงเพราะมีข้อผิดพลาดในการอนุญาต แต่เนื่องจากGRANTมีอยู่แล้ว


1

หนึ่งวิธีง่ายๆที่ทำงานเสมอสำหรับฉันเมื่อต้องเผชิญกับ mysql "การเข้าถึงถูกปฏิเสธ" ข้อผิดพลาด: sudoการใช้งาน

sudo mysql -u root

จากนั้นสิทธิ์ที่จำเป็นมีอยู่สำหรับGRANTคำสั่ง

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