FiveM MySQL Access Denied for User to Database Error 1044 แก้อย่างไร? ตรวจ GRANT, User@Host และสิทธิ์ Database ให้ถูกจุด
ปัญหา FiveM MySQL/MariaDB ขึ้น Access denied for user ... to database หรือ Error 1044 หมายความว่า Account ที่ FiveM ใช้อยู่สามารถเชื่อมต่อ MariaDB ได้ แต่ ไม่มีสิทธิ์เพียงพอสำหรับ Database/Schema ที่กำลังพยายามใช้งาน
MariaDB กำหนด Error 1044, SQLSTATE 42000 เป็น ER_DBACCESS_DENIED_ERROR และเอกสารระบุสาเหตุหลักว่าผู้ใช้กำลังพยายามเข้าถึง Database/Schema ที่ Account นั้นไม่ได้รับอนุญาต.
ตัวอย่าง:
ERROR 1044 (42000):Access denied for user 'fivem'@'10.0.0.20'to database 'fivem'
ปัญหานี้อาจเกิดหลัง:
- สร้าง Database ใหม่
- เปลี่ยนชื่อ Database
- ย้าย Hosting
- ย้าย MariaDB
- Restore Database
- สร้าง User ใหม่
-
เปลี่ยน
User@Host - Clone Production ไป Test Server
- ลืม GRANT สิทธิ์ Database
- GRANT ไปผิด Database
- GRANT ไปผิด Account/Host
- Resource ใช้ Database คนละชื่อกับ Core FiveM
- Import Resource ใหม่ที่ต้องใช้ Table/Privileges เพิ่ม
แนวทางที่ถูกต้องคือ:
Error 1044↓Account Login ผ่านหรือยัง↓Database ไหนถูกปฏิเสธ↓Account User@Host ตัวไหนถูกใช้จริง↓SHOW GRANTS↓Database มีอยู่จริงหรือไม่↓ให้เฉพาะ Privileges ที่ Resource ต้องการ↓ทดสอบใหม่
① FiveM MySQL Error 1044 คืออะไร
MariaDB ระบุ Error 1044 ว่า:
104442000ER_DBACCESS_DENIED_ERRORAccess denied for user ... to database ...
สาเหตุหลักคือ User พยายามเข้าถึง Database/Schema ที่ไม่ได้รับสิทธิ์.
② ต่างจาก Error 1045 อย่างไร
หัวข้อก่อนหน้า Error 1045 คือ:
Access denied for user(using password: YES/NO)
ซึ่งเน้น Account Authentication/การเข้าสู่ระบบ
แต่ Error 1044 คือ:
Access denied for userto database 'database_name'
ซึ่งเน้น สิทธิ์ของ Account ต่อ Database นั้น มากกว่า.
③ จำง่าย ๆ
1045 = Login / Authentication ไม่ผ่าน1044 = Login ได้ แต่ Database นี้เข้าไม่ได้
MariaDB Connection Troubleshooting Guide ยกตัวอย่างตรง ๆ ว่า Account สามารถเชื่อม MariaDB ได้ แต่เมื่อ USE Database หรือเชื่อมไปยัง Database หนึ่งแล้วไม่มี Privilege เพียงพอ จะเกิด Error 1044.
④ ต่างจาก Error 1130 อย่างไร
Error 1130:
Host is not allowed to connect
เกิดก่อนการเข้าถึง Database เพราะ Host ไม่มีสิทธิ์เชื่อม
Error 1044:
Access denied ... to database
Connection ไปถึง MariaDB และ Account Context แล้ว แต่ Privileges ต่อ Database ไม่พอ.
⑤ Error 1044 เป็น SQL Syntax Error ไหม
ไม่
Error นี้เป็น Database Access/Privilege Error
การแก้:
SQL commaSQL quoteSQL syntax
จึงไม่ใช่จุดหลัก
⑥ Clear FiveM Cache ช่วยไหม
โดยทั่วไปไม่
MariaDB Privileges ถูกควบคุมฝั่ง Database Server ไม่ใช่ FiveM Client Cache
⑦ Restart FiveM ช่วยไหม
ถ้า FiveM ยังใช้ Account เดิมที่ไม่มีสิทธิ์:
Restart แล้วก็ยัง Error 1044
⑧ Restart MariaDB ช่วยไหม
โดยทั่วไปไม่จำเป็น
MariaDB มีระบบ GRANT สำหรับกำหนด Privileges ให้ Accounts โดยตรง และ SHOW GRANTS สำหรับตรวจสิทธิ์ที่มีอยู่.
⑨ จุดแรกที่ต้องอ่าน — Database Name
อ่านข้อความ Error ให้ครบ:
Access denied for user 'fivem'@'10.0.0.20'to database 'fivem_prod'
จุดสำคัญมีสองส่วน:
'fivem'@'10.0.0.20'
และ:
'fivem_prod'
⑩ อย่าตรวจ User อย่างเดียว
Database Name ก็สำคัญ
FiveM อาจกำลังพยายามเข้า:
fivem_test
ทั้งที่ Account ได้สิทธิ์เฉพาะ:
fivem_prod
⑪ Error หลังเปลี่ยนชื่อ Database
ตัวอย่างเดิม:
fivem
เปลี่ยนเป็น:
fivem_prod
แต่ Grants ของ Account ยังอ้าง Database เดิม
ก็อาจเกิด 1044 ได้ เพราะ MariaDB Privileges สามารถกำหนดในระดับ Database ได้.
⑫ Database ใหม่ไม่ได้รับสิทธิ์อัตโนมัติเสมอไป
หากสร้าง:
fivem_new
Account ที่เคยได้รับ Privilege บน:
fivem_old
ไม่ได้หมายความว่าจะมี Privilege บน Database ใหม่โดยอัตโนมัติ
ต้องดู Grants จริง.
⑬ วิธีตรวจสิทธิ์ที่ Account มี
MariaDB รองรับ:
SHOW GRANTS FOR 'fivem'@'10.0.0.20';
SHOW GRANTS จะแสดง Privileges หรือ Roles ที่ถูก Grant ให้ Account นั้น.
⑭ ต้องระบุ Host ให้ตรง
Account:
'fivem'@'localhost'
และ:
'fivem'@'10.0.0.20'
อาจมี Grants ต่างกัน
ดังนั้นอย่าดู SHOW GRANTS ของ Account ผิด Host
⑮ ถ้าระบุแค่ Username ใน SHOW GRANTS ล่ะ
MariaDB Documentation ระบุว่าหากระบุเฉพาะ Username ส่วน Host จะถูกใช้เป็น % ในบริบทของ SHOW GRANTS Syntax ดังนั้นเพื่อความชัดเจนในการ Debug ควรระบุ Account user@host ให้ตรงจริง.
⑯ ตัวอย่าง Grants
อาจเห็น:
GRANT USAGE ON *.* TO 'fivem'@'10.0.0.20'
แต่ไม่มีสิทธิ์บน:
fivem_prod.*
นี่เป็นเบาะแสสำคัญ
⑰ USAGE ไม่ได้แปลว่ามีสิทธิ์ทุก Database
ต้องตรวจ Privileges ที่ถูก Grant เพิ่มเติมจริง
⑱ ตัวอย่าง Account ที่มีสิทธิ์ Database
เชิงแนวคิดอาจมี Grant บน:
fivem_prod.*
โดยสิทธิ์ที่ต้องใช้ขึ้นกับ Resource จริง
⑲ FiveM ต้องการ Privileges อะไร
ไม่มีชุดเดียวที่ใช้ได้กับ FiveM ทุก Server
Runtime Resources อาจต้อง:
SELECTINSERTUPDATEDELETE
แต่ Resources ที่สร้าง/อัปเดต Schema อาจต้อง Privileges เพิ่ม เช่น:
CREATEALTERINDEXDROP
ตาม Migration ที่ Resource นั้นทำ
MariaDB GRANT รองรับการกำหนด Privileges ในระดับต่าง ๆ และควรให้เฉพาะสิทธิ์ที่ Application ต้องการ.
⑳ อย่าใช้ GRANT ALL ON *.* ทันที
แม้จะทำให้ปัญหา Permission หลายอย่างหายได้ แต่เป็นสิทธิ์กว้างเกินจำเป็นสำหรับ Application Account จำนวนมาก
ควรใช้หลัก:
เฉพาะ Account+เฉพาะ Database+เฉพาะ Privileges
㉑ ทำไม Least Privilege สำคัญ
หาก Resource หรือ Credential ถูกโจมตี ความเสียหายจะถูกจำกัดมากกว่า Account ที่เข้าถึงทุก Database และทุก Administrative Operation
㉒ GRANT ใช้ทำอะไร
MariaDB GRANT ใช้ให้ Privileges หรือ Roles แก่ Accounts และเอกสารแนะนำให้ใช้ SHOW GRANTS เพื่อตรวจสิทธิ์ที่ Account มีอยู่.
㉓ ใครสามารถ GRANT ได้
MariaDB ระบุว่าผู้ที่ใช้ GRANT ต้องมี GRANT OPTION และต้องมี Privileges ที่ตนกำลังจะ Grant ด้วย.
㉔ Application Account ไม่จำเป็นต้องมี GRANT OPTION
FiveM Runtime ไม่ควรต้องสามารถแจกสิทธิ์ให้ Account อื่นตามปกติ
㉕ Database Admin ควรจัดการ Grants
แยกจาก Application Runtime Account จะปลอดภัยกว่า
㉖ Error หลัง Restore Database
ตัวอย่าง:
คุณ Restore:
fivem_prod
สำเร็จ
แต่ Account ยังมี Grants แค่:
fivem_old.*
FiveM จึงเข้า Database ใหม่ไม่ได้
㉗ Restore Tables ไม่ได้หมายความว่า Grants ต้องตรง
Database Data กับ Account Privileges เป็นคนละส่วนของระบบบริหาร MariaDB
จึงควรตรวจทั้งคู่หลัง Migration
㉘ Migration Checklist
Database มีไหม↓Tables ครบไหม↓Database User มีไหม↓User@Host ถูกไหม↓Password ถูกไหม↓SHOW GRANTS ถูกไหม↓FiveM Connection String ถูกไหม
㉙ Error หลัง Clone Production
Production Config อาจใช้:
database=fivem_prod
แต่ Test Account ได้สิทธิ์เฉพาะ:
fivem_test.*
㉚ อย่า Grant Test Account เข้า Production เพียงเพราะต้องการให้ Server เปิดได้
ตรวจว่า Connection String ผิด Environment หรือไม่ก่อน
㉛ Test Server ควรใช้ Test Database
ช่วยลดความเสี่ยงจาก:
- DELETE
- Migration
- Money Transactions
- Inventory Changes
ที่ไหลเข้าฐาน Production
㉜ Error 1044 อาจกำลังป้องกันคุณอยู่
ถ้า Test Server ไม่ควรเข้า Production Database แล้วถูก Reject:
อย่าแก้ Permission ก่อนตรวจ Architecture
㉝ Error หลังติด Resource ใหม่
Resource ใหม่อาจใช้ Database แยก เช่น:
phonelogsanalytics
㉞ Core FiveM ปกติแต่ Resource ใหม่ Error
มีโอกาสว่า Resource นั้นกำลังเชื่อม:
- Account ต่าง
- Database ต่าง
จึงควรตรวจ Config ของ Resource นั้น
㉟ ตัวอย่าง
Core:
database = fivem
Phone:
database = phone
แต่ Account มีสิทธิ์แค่:
fivem.*
㊱ Phone จึงอาจ Error 1044
ทั้งที่ Inventory/Garage/Banking ทำงานปกติ
㊲ อย่าแก้ Core Database User โดยไม่จำเป็น
ตรวจ Resource-specific Connection ก่อน
㊳ Database Name ผิดก็อาจดูเหมือน Permission Problem
สมมติคุณตั้ง:
database = fivme
แทน:
fivem
หาก Database ที่พิมพ์ผิดไม่มีอยู่ คุณอาจเจอ Error ประเภท Unknown Database เช่น 1049 แทน ขึ้นกับขั้นตอนการเชื่อมต่อ.
㊴ Error 1049 ต่างจาก 1044
1044
Database มี Context แต่ User ไม่มี Access
1049
Unknown database
Database ที่ระบุไม่มีอยู่.
㊵ ดังนั้นอ่านข้อความ Code
อย่าดูแค่:
database error
㊶ Error 1046 ต่างกันอีก
MariaDB Error 1046 คือ:
No database selected
เป็นคนละปัญหา.
㊷ FiveM Connection String มักระบุ Database
ถ้าชื่อ Database ผิดหรือ Account ไม่มี Permission:
Connection/Query Initialization อาจล้มเหลวตั้งแต่ Resource Start
㊸ Error ตอน Server Startup
ถ้าทุก Resource ที่ใช้ DB ล้มทันที:
ตรวจ Core Connection String และ Grants
㊹ Error ตอน Resource Startup ตัวเดียว
ตรวจ Database ของ Resource นั้น
㊺ SHOW DATABASES
MariaDB ระบุว่า SHOW DATABASES จะแสดงเฉพาะ Database ที่ Account มี Privilege บางอย่างอยู่ เว้นแต่ Account มี Global SHOW DATABASES Privilege.
㊻ นี่มีประโยชน์ในการ Debug
หลัง Login ด้วย Account FiveM สำเร็จ:
SHOW DATABASES;
แล้วดูว่า Database เป้าหมายปรากฏหรือไม่
㊼ ถ้าไม่เห็น Database เป้าหมาย
เป็นเบาะแสเรื่อง Privilege
แต่ SHOW GRANTS ยังเป็นวิธีที่ตรงกว่าในการตรวจสิทธิ์ Account.
㊽ CURRENT_USER() มีประโยชน์มาก
MariaDB CURRENT_USER() คืนค่า Username + Host ของ Account ที่ Server ใช้ Authenticate Client จริง และ Account นั้นเป็นตัวกำหนด Access Privileges ของ Session.
ใช้:
SELECT CURRENT_USER();
㊾ ทำไมสำคัญ
คุณอาจคิดว่า FiveM ใช้:
'fivem'@'%'
แต่ MariaDB อาจ Authenticate เป็น:
'fivem'@'10.0.0.20'
ซึ่งมี Grants ต่างกัน
㊿ USER() กับ CURRENT_USER() ต่างกัน
MariaDB ระบุว่า USER() คืน User/Host ที่ Client ส่งมาตอนเชื่อมต่อ ส่วน CURRENT_USER() คืน Account ที่ MariaDB ใช้กำหนด Privileges จริง.
51. สำหรับ Permission Debug ควรดูอะไร
ให้ดู:
SELECT USER(), CURRENT_USER();
ถ้าสามารถ Login ได้
52. แล้วตรวจ
SHOW GRANTS;
หรือระบุ Account ให้ชัด
53. Error1044อยู่ในจุดที่ CURRENT_USER มีประโยชน์
เพราะ Authentication ผ่านแล้วในหลายกรณี
คุณสามารถทดสอบ Account จาก Client Session แล้วดู Account Matching ได้
54. Test จาก FiveM Host จริง
อย่าทดสอบเฉพาะจาก Database Server ด้วย:
localhost
เพราะ Account Matching อาจต่างจาก Remote FiveM Host
55. ตัวอย่าง
จาก DB Server:
'fivem'@'localhost'
มีสิทธิ์เต็ม
แต่จาก FiveM:
'fivem'@'10.0.0.20'
ไม่มีสิทธิ์ Database
56. คุณจึงอาจเข้า CLI จาก DB Server ได้ปกติ
แต่ FiveM ยัง Error1044
57. ทดสอบจาก Source เดียวกับ Application
ช่วยให้ผลใกล้ Production จริงที่สุด
58. ถ้า CLI จาก FiveM Host Error1044 เหมือนกัน
Root Cause อยู่ที่ MariaDB Grants/Account/Database มากกว่า FiveM Resource
59. ถ้า CLI ผ่าน แต่ FiveM Error1044
ให้กลับไปตรวจ:
- FiveM Username
- Host
- Database
- Resource-specific Connection
60. อย่าแก้ MariaDBต่อถ้า Test Accountผ่านครบ
Application อาจใช้ Credential คนละตัว
61. Connection String สองชุด
Serverบางตัวมี:
main databaselogs database
หรือ:
core databasephone database
62. Error Message จะบอก Database
ใช้ตรงนั้นเป็นเบาะแส
63. Example
Access denied ... to database 'phone'
ไม่ต้องเริ่มแก้:
fivem_prod
64. ตรวจ Resource Config
Resourceบางตัวอาจ Hardcode Database/Schema Name
65. Paid Resource
ควรอ่าน Installation/Migration Instructions ของ Developer
อาจมี:
- SQL File
- Required Database
- Required Permissions
66. อย่า Rename Database ที่ Resource Hardcode โดยไม่ดู Config
อาจทำให้ Resourceใช้ชื่อเดิมต่อ
67. Prefix Tables ไม่เหมือน Database
เช่น:
phone_usersphone_messages
เป็น Tables
ไม่ใช่ Database แยกเสมอไป
68. อ่าน SQL Errorให้ถูก
Error:
to database 'phone'
หมายถึง Database/Schema Name
ไม่ใช่ Table Prefix
69. Permission ระดับ Table
MariaDB รองรับ Privileges ในระดับ Table เช่น SELECT, INSERT, UPDATE, ALTER, INDEX และอื่น ๆ; INFORMATION_SCHEMA.TABLE_PRIVILEGES แสดง Table-level Privileges ที่ถูก Grant.
70. Account อาจมี Database Access แต่ Table บางตัวไม่มีสิทธิ์
ในกรณีนั้น Error อาจเปลี่ยนเป็น Command/Table-specific Permission Error มากกว่า 1044
71. Error 1142 เป็นตัวอย่าง
กลุ่ม MariaDB Errors มี Permission Denied ต่อ Command/Table แยกจาก Database-level 1044
ดังนั้นอย่าเหมารวม Permission Errorsทุกตัวเป็น1044
72. ถ้าแก้1044แล้วเจอ1142
นั่นแสดงว่าเข้าถึง Database ได้มากขึ้นแล้ว แต่ Command/Table Privilege ยังไม่พอ
73. นี่ไม่ใช่การแก้ล้มเหลว
เป็นการพบ Permission Layer ถัดไป
74. ตรวจ Resource Requirements
ถ้าต้อง:
ALTER TABLE
ตอน Migration
แต่ Account มีแค่:
SELECTINSERTUPDATEDELETE
Migrationอาจล้ม
75. แต่ Runtime หลัง Migrationอาจไม่ต้อง ALTER
ในระบบที่เน้น Security สามารถแยก Migration Privileges ออกจาก Runtime Privileges
76. FiveMทั่วไปต้องทำแบบนี้ไหม
ไม่จำเป็นทุก Server
แต่เป็น Architecture ที่ดีเมื่อมีความพร้อม
77. อย่าให้ Migration Accountแก่ Resourceตลอดไปโดยไม่จำเป็น
หลัง Migration เสร็จอาจกลับไป Runtime Account ที่แคบกว่า ตาม Designของระบบ
78. SHOW GRANTS เป็น Source of Truth
MariaDB Documentation ระบุชัดว่า Statement นี้แสดง GRANT Statements ที่ใช้สร้าง Privileges ของ Accountนั้นขึ้นมาใหม่.
79. จึงดีกว่าดู Configเก่า
เพราะ Configเก่าอาจไม่ตรง Runtime Database
80. Errorหลัง Hosting Migration
อย่าคิดว่า Userถูกย้ายมาครบ
Checklist:
① Database② Tables③ User④ User@Host⑤ Password⑥ Grants⑦ FiveM Connection String
81. Errorหลัง Import SQL ผ่าน phpMyAdmin
SQL Dumpของ Gameplay Databaseอาจไม่มี Account Grantsของ MariaDB Serverรวมอยู่ในรูปแบบที่คุณคาด
82. จึงต้องสร้าง Application Accountใหม่อย่างถูกต้อง
ตาม Serverใหม่
83. ห้าม Copy system privilege tables แบบสุ่ม
โดยเฉพาะข้าม MariaDB Versions
ใช้ Account Management Statements เช่น CREATE USER, GRANT, REVOKE ตาม Documentation ดีกว่า.
84. REVOKE คืออะไร
MariaDB REVOKE ใช้ถอน Privileges หรือ Roles ที่เคย Grant ไว้.
85. มีประโยชน์หลัง Migration
หาก Account ใหม่ถูกให้สิทธิ์กว้างเกินไปเพื่อทดสอบ:
ควรลดกลับตาม Privileges ที่ Applicationต้องใช้จริง
86. อย่าทิ้ง Temporary Global Grant
เพราะลืมง่าย
87. Error หลัง Database Rename
หาก Rename/สร้าง Databaseใหม่:
ต้องปรับทั้ง:
Connection String
และ:
GRANT
ให้ตรงกัน
88. เปลี่ยนแค่ Connection Stringไม่พอ
ถ้า Accountไม่มีสิทธิ์ Databaseใหม่
89. เปลี่ยนแค่ GRANTไม่พอ
ถ้า FiveMยังชี้ Databaseเก่า
90. ต้องสองฝั่งตรงกัน
FiveM configuration↔MariaDB privileges
91. Errorหลังเปลี่ยน Database User
Accountใหม่อาจมี Authenticationถูก
แต่ยังไม่ได้รับ Database Privileges
จึง Loginผ่านแล้วเจอ1044
92. นี่ต่างจาก1045
ถ้า Passwordผิด:
จะติด Authenticationก่อน
93. Error1044จึงเป็นสัญญาณว่าเข้าใกล้สำเร็จแล้ว
Networkและ Authenticationจำนวนหนึ่งทำงานแล้ว
เหลือ Permission Layerที่ต้องตรวจ
94. แต่ไม่ควรเพิ่มทุก Permissionเพื่อให้ผ่าน
อ่านว่าทำอะไรไม่ได้
แล้วให้เฉพาะสิทธิ์ที่จำเป็น
95. Database Name case sensitivity
การจัดการชื่อ Database/Tableและ Case Sensitivityสามารถขึ้นกับ Platform/Server Configuration
จึงไม่ควรเดาเปลี่ยนตัวพิมพ์ใหญ่เล็กเมื่อ Error1044โดยไม่มีหลักฐาน
96. ดูชื่อจาก ErrorและSHOW DATABASES
ให้ตรงจริง
97. Errorหลังย้าย Windows → Linux
ถ้ามีปัญหาชื่อ Tables/Database ควรแยกตรวจ Case/Filesystem Behaviorจาก Permission Error
อย่าปรับ Grantsเพื่อแก้ Table-name mismatch
98. Resource Queryไป Databaseอื่น
SQLสามารถระบุ:
database.table
ถ้า Accountไม่มีสิทธิ์ Databaseนั้น:
อาจเกิด Access Error
99. Cross-database Query
FiveM Resourceบางตัวอาจ Join/Queryข้าม Database
Accountจึงอาจต้อง Privilegesบนทั้งสอง Database
แต่ควรตรวจ SQLจริง
100. อย่าให้สิทธิ์ทุก Databaseเพื่อรองรับ Queryเดียว
หาก Resourceไม่ควร Cross-databaseตั้งแต่แรก:
แก้ Config/Queryดีกว่า
101. Third-party Logs Database
เป็นตัวอย่างที่อาจตั้งใจแยกจริง
เช่น:
fivem_gamefivem_logs
102. Accountเดียวอาจต้อง Privilegesสองฐาน
หาก Architectureออกแบบแบบนั้น
103. หรือใช้คนละ Account
ขึ้นกับ Security Design
104. Errorหลังเปิด Multi-Character Resource
Resourceอาจใช้ Tableใหม่ใน Databaseเดิม
ถ้า Accountมี Database-level Privilegesเพียงพอ:
ไม่ควรเกิด1044จาก Tableใหม่โดยตรง
105. แต่ถ้า Resourceสร้าง Databaseใหม่เอง
อาจต้อง Privilegeเพิ่มเติม
ตรวจ Installation Guide
106. FiveM Resourceไม่ควรสร้าง Database Globalแบบสุ่ม
โดยทั่วไป Schema Provisioningควรถูกควบคุมโดย Admin/Migration
107. Error1044ไม่แก้ด้วย FLUSH HOSTS
FLUSH HOSTS เกี่ยวกับ Host Cache/Blocked Host ไม่ใช่ Database Privileges
108. ไม่แก้ด้วย max_connect_errors
นั่นเกี่ยวกับ Error1129
109. ไม่แก้ด้วย max_connections
นั่นเกี่ยวกับจำนวน Connections
110. ไม่แก้ด้วย max_allowed_packet
นั่นเกี่ยวกับ Packet/Data Size
111. ไม่แก้ด้วย wait_timeout
ไม่เกี่ยวกับ Database Privilege
112. ไม่แก้ด้วย net_read_timeout
ไม่เกี่ยว
113. ไม่แก้ด้วย net_write_timeout
ไม่เกี่ยว
114. ไม่แก้ด้วย Clear Cache
ไม่เกี่ยว
115. ไม่แก้ด้วย Restart MariaDB
ถ้า Grantsยังผิด
116. ไม่แก้ด้วย Repair Table
ไม่มีหลักฐาน Tableเสีย
117. ไม่แก้ด้วย ALTER TABLE
Permission Layerต้องถูกแก้ก่อน
118. ไม่ต้องลบ Database
เด็ดขาด
Error1044ไม่ได้บอกว่า Databaseเสีย
119. ไม่ต้อง Restore Backupทันที
Dataอาจอยู่ครบทุกอย่าง
เพียง Accountไม่มีสิทธิ์
120. วิธีตรวจที่ปลอดภัย
เริ่มจาก Read-only Commands เช่น:
SHOW GRANTS FOR 'fivem'@'host';
และหลัง Loginได้:
SELECT CURRENT_USER();SHOW DATABASES;
MariaDB รองรับคำสั่งเหล่านี้สำหรับตรวจ Account/Privileges/Database Visibility.
121. จากนั้นเปรียบเทียบ
CURRENT_USER()
กับ Accountที่คุณกำลังแก้
122. ถ้าไม่ตรง
อย่าเพิ่ม Grantให้ Accountผิดตัว
123. ตัวอย่าง
คุณกำลังแก้:
'fivem'@'%'
แต่:
SELECT CURRENT_USER();
คืน:
fivem@10.0.0.20
Accountที่กำหนด Privilegesจริงอาจไม่ใช่ตัวที่คุณคิด.
124. ตรวจ SHOW GRANTS ตัวจริง
จากนั้นค่อย Grantสิทธิ์ที่ขาด
125. ไม่ควร Copy GRANT จาก Internetทั้งชุด
Database Name, Host และ Privilege Requirementsต่างกันทุก Server
126. ตัวอย่าง GRANT ในบทความใช้เป็นแนวคิดเท่านั้น
ต้องแทน:
userhostdatabase
ด้วยค่าจริง
127. Backupก่อน GRANTไหม
GRANT ไม่ได้แก้ Gameplay Data โดยตรง
แต่ควรจด Grants เดิมก่อนเปลี่ยนเพื่อ Rollback ได้
ใช้:
SHOW GRANTS ...
เก็บไว้
128. ถ้าจะเปลี่ยน Schema/Migrationต่อหลังแก้ Permission
Backup Databaseก่อน Operations ที่มีความเสี่ยง
129. Errorหลัง GRANTแล้วไม่หาย
ตรวจว่า Grantไป Accountถูก Hostไหม
130. ตรวจ Database Name
Grantอาจไป:
fivem
แต่ FiveMใช้:
fivem_prod
131. ตรวจ Database Server
คุณอาจ Grantบน DB Server A
แต่ FiveMกำลังต่อ DB Server B
132. นี่เกิดได้บ่อยหลัง Migration
เพราะมี Serverเก่าและใหม่พร้อมกัน
133. Test Connectionจาก FiveM Host
ช่วยยืนยันปลายทางจริง
134. Error Resourceเดียวหลัง Grant Coreแล้ว
Resourceนั้นอาจมี Connectionแยก
กลับไปดู Config Resource
135. Errorทุก Resourceหลัง Grant
อาจ Grantผิด Accountหรือผิด Database
136. Errorเปลี่ยนจาก1044เป็น1142
แปลว่าผ่าน Database-level Accessบางส่วนแล้ว แต่ Command/Table Privilegeยังขาด
137. Errorเปลี่ยนจาก1044เป็น1049
อาจมี Database Name/Connection Configurationอีกปัญหาหนึ่ง
138. Errorเปลี่ยนจาก1044เป็น1054
อาจหมายถึงเข้า Databaseได้แล้ว แต่ Schema/Resource Versionไม่ตรงจนเจอ Unknown Column
139. อ่าน Errorใหม่
อย่าย้อนกลับไปแก้ Grantsต่อหาก Errorกลายเป็น Schema Error
140. One Error at a Time
นี่เป็นวิธีแก้ Database Serverที่ปลอดภัยกว่า:
แก้ Errorแรก↓ทดสอบ↓อ่าน Errorใหม่↓แก้ Layerถัดไป
141. FiveM MySQL Error 1044 FAQ
FiveM Error 1044 คืออะไร
MariaDB Error1044 / SQLSTATE42000 / ER_DBACCESS_DENIED_ERROR หมายถึง User พยายามเข้าถึง Database/Schema ที่ Accountนั้นไม่มีสิทธิ์.
Error1044กับ1045ต่างกันอย่างไร
1045เน้น Account Authentication ส่วน1044เน้นสิทธิ์เข้าถึง Database หลัง Connection/Account Contextไปไกลขึ้นแล้ว.
Passwordถูกแล้วยัง1044ได้ไหม
ได้ เพราะ Passwordถูกไม่ได้แปลว่า Accountมี Privilegesบนทุก Database
ดู Privilegesอย่างไร
ใช้:
SHOW GRANTS FOR 'user'@'host';
MariaDBระบุว่า SHOW GRANTS ใช้แสดง Privilegesของ Account.
จะรู้ได้อย่างไรว่า MariaDBใช้ Accountไหน
หลัง Loginสำเร็จใช้:
SELECT CURRENT_USER();
Functionนี้คืน User/Host Accountที่ MariaDBใช้ Authenticate Clientและกำหนด Access Privileges.
SHOW DATABASESช่วยไหม
ช่วย เพราะ MariaDBจะแสดงเฉพาะ Databaseที่ Accountมี Privilegeบางอย่าง เว้นแต่ Accountมี Global SHOW DATABASES Privilege.
GRANT คืออะไร
ใช้ให้ PrivilegesหรือRolesแก่ MariaDB Account.
FiveMต้อง GRANT ALLไหม
ไม่จำเป็น ควรให้ Privilegesเท่าที่ Resourcesต้องใช้
FiveMต้อง GRANT ALL ON *.* ไหม
ไม่ควรเป็น Default เพราะกว้างเกินความจำเป็นสำหรับ Application Accountส่วนใหญ่
GRANTบน fivem.* หมายถึงอะไร
หมายถึง Privileges Scopeระดับ Objectsภายใน Database fivem ตาม Privilegesที่ระบุ ไม่ใช่ทุก Databaseบน Server
Resourceต้อง SELECT/INSERT/UPDATE/DELETEไหม
หลาย Resourcesต้องใช้ Operationsเหล่านี้ แต่ Requirementจริงขึ้นกับ Framework/Resource
ALTERต้องมีไหม
เฉพาะ Resource/Migrationที่ทำ Schema Changeตาม Design
CREATEต้องมีไหม
เช่นเดียวกัน ขึ้นกับ Migration/Installation
DROPต้องมีไหม
ไม่ควรให้โดยไม่จำเป็น โดยเฉพาะ Runtime Account
Errorหลัง Restore Databaseทำอย่างไร
ตรวจว่า Application Accountมี Grantsบน Databaseที่ Restoreใหม่หรือไม่
Errorหลังเปลี่ยน Database Nameทำอย่างไร
ตรวจทั้ง FiveM Connection StringและMariaDB Grantsให้ชี้ชื่อใหม่ตรงกัน
Errorหลังย้าย Hostingทำอย่างไร
ตรวจ Database, Account, User@HostและSHOW GRANTSบน Serverใหม่
Error Resourceเดียวทำอย่างไร
ตรวจว่า Resourceนั้นใช้ Database/Connection Stringแยกหรือไม่
Errorทุก Resourceทำอย่างไร
ตรวจ Core Database Account/Grants
Errorหลังติด Phone Scriptทำอย่างไร
ตรวจว่า Phoneใช้ Databaseแยกหรือมี SQL Installation Requirementเฉพาะหรือไม่
Errorหลังติด Logs Resourceทำอย่างไร
เช่นเดียวกัน ตรวจ Logs Database/Account Config
Error1044กับ1130ต่างกันอย่างไร
1130คือ Hostไม่อนุญาตให้เชื่อม ส่วน1044คือ Accountไม่มีสิทธิ์ใช้ Databaseที่ระบุ
Error1044กับ1129ต่างกันอย่างไร
1129คือ Hostถูก Blockจาก Connection Errors ส่วน1044คือ Database Privilege
Error1044กับ1049ต่างกันอย่างไร
1044คือ Database Access Denied ส่วน1049คือ Unknown Database.
Error1044กับ1046ต่างกันอย่างไร
1046คือ No Database Selected.
Error1044กับ1142ต่างกันอย่างไร
1044เน้น Database-level Access ส่วน Error1142อยู่ในกลุ่ม Command Permission Denied ต่อ Object/Operation ที่เฉพาะกว่า
CURRENT_USER() กับ USER() เหมือนกันไหม
ไม่เสมอ USER() แสดง User/Hostที่ Clientใช้เชื่อม ส่วน CURRENT_USER() แสดง Accountที่ MariaDBใช้กำหนด Privileges.
ทดสอบจาก Laptopแทน FiveM Serverได้ไหม
ไม่ดีที่สุด เพราะ Account/Host Contextสามารถต่างกัน
CLIผ่านแต่ FiveMไม่ผ่านทำอย่างไร
ตรวจ FiveM Connection String/Resource Configว่ากำลังใช้ AccountและDatabaseเดียวกับที่ทดสอบหรือไม่
FiveMผ่านแต่ Phoneไม่ผ่านทำอย่างไร
Phoneอาจใช้ DB CredentialหรือDatabaseแยก
ต้อง Restart MariaDBหลัง GRANTไหม
MariaDBจัดการ Privilegesผ่าน Account-management statements โดยตรง จึงไม่ควรเริ่มจากการ Restartเพื่อแก้1044.
Clear FiveM Cacheช่วยไหม
ไม่
เพิ่ม max_connectionsช่วยไหม
ไม่
เพิ่ม max_connect_errorsช่วยไหม
ไม่
เพิ่ม max_allowed_packetช่วยไหม
ไม่
เพิ่ม wait_timeoutช่วยไหม
ไม่
เพิ่ม net_read_timeoutช่วยไหม
ไม่
เพิ่ม net_write_timeoutช่วยไหม
ไม่
FLUSH HOSTSช่วยไหม
ไม่ใช่ Fixของ Database Privilege Error
Repair Tableช่วยไหม
ไม่
ALTER TABLEช่วยไหม
ไม่ควรทำเพื่อแก้1044
Reinstall MariaDBช่วยไหม
ไม่
ลบ Databaseช่วยไหม
ไม่ และอันตราย
ต้อง Backupไหม
หากเพียงตรวจหรือแก้ Grantsไม่ต้องแตะ Gameplay Data แต่ถ้าหลังจากนั้นจะทำ Migration, ALTER, UPDATEหรือ DELETEควร Backupก่อน
สรุป FiveM MySQL Access Denied for User to Database Error 1044
FiveM MySQL/MariaDB Error 1044 Access denied for user ... to database หมายถึง Account ที่ FiveM ใช้ไม่มีสิทธิ์เข้าถึง Database/Schema ที่ระบุ โดย MariaDB แนะนำให้ตรวจ Privileges และใช้ GRANT เพื่อให้สิทธิ์ที่จำเป็น.
ให้จำ Flow นี้:
Error 1044↓Database ไหน?↓User@Host ไหน?↓SELECT CURRENT_USER()↓SHOW GRANTS↓Database มีอยู่จริงไหม?↓FiveM Connection Stringตรงไหม?↓Resourceใช้ DBแยกไหม?↓ให้เฉพาะ Privilegesที่จำเป็น↓ทดสอบใหม่
สิ่งที่ comsiam แนะนำคืออย่าแก้ Error1044ด้วย GRANT ALL ON *.* เพียงเพื่อให้ FiveMเปิดได้ เพราะ Errorนี้มักแก้ได้โดยระบุให้ชัดว่า Accountตัวไหนกำลังใช้งาน, Databaseไหนถูกปฏิเสธ และ Resourceต้องใช้ Privilegesอะไร จากนั้นให้สิทธิ์เฉพาะ Databaseและ Operationsที่จำเป็น โดยใช้ SHOW GRANTS ตรวจของเดิมก่อนแก้.
อีกหลักที่ comsiam แนะนำคือถ้าเพิ่งย้าย Hostingหรือเปลี่ยนชื่อ Database ให้ตรวจทั้ง Connection String + CURRENT_USER() + SHOW GRANTS + Database Name พร้อมกัน เพราะปัญหาที่พบบ่อยคือ Grantถูกต้องแต่ให้ Accountผิด Host หรือ Accountถูกต้องแต่ Grantยังชี้ Databaseเก่า การแก้ให้ทั้งสองฝั่งตรงกันจะปลอดภัยและแม่นยำกว่าการเพิ่มสิทธิ์กว้าง ๆ ให้ทุก Account
Comments
Post a Comment