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 ว่า:

1044
42000
ER_DBACCESS_DENIED_ERROR
Access 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 user
to 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 comma
SQL quote
SQL 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 อาจต้อง:

SELECT
INSERT
UPDATE
DELETE

แต่ Resources ที่สร้าง/อัปเดต Schema อาจต้อง Privileges เพิ่ม เช่น:

CREATE
ALTER
INDEX
DROP

ตาม 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 แยก เช่น:

phone
logs
analytics

㉞ 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 database
logs database

หรือ:

core database
phone 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_users
phone_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 มีแค่:

SELECT
INSERT
UPDATE
DELETE

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_game
fivem_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 ในบทความใช้เป็นแนวคิดเท่านั้น

ต้องแทน:

user
host
database

ด้วยค่าจริง

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

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด