สร้างฐานข้อมูลและผู้ใช้ MySQL/MariaDB พร้อมกำหนดสิทธิ์
แต่ละเว็บไซต์หรือแอปพลิเคชันควรมีฐานข้อมูลและผู้ใช้ฐานข้อมูลเป็นของตัวเอง ไม่ควรให้แอปเชื่อมต่อด้วยผู้ใช้ root เพราะหากแอปตัวใดถูกเจาะ ผู้โจมตีจะเข้าถึงได้แค่ฐานข้อมูลของแอปนั้น ไม่ใช่ทั้งเซิร์ฟเวอร์ คู่มือนี้แสดงคำสั่ง SQL ที่ใช้ได้ทั้ง MySQL 8 และ MariaDB 10.x
หากใช้ Hosting ที่มี Plesk หรือ DirectAdmin ควรสร้างฐานข้อมูลผ่านหน้าควบคุมแทน ดูได้ที่ สร้างฐานข้อมูล MySQL บน DirectAdmin คู่มือนี้เหมาะกับ Cloud Server ที่ติดตั้งฐานข้อมูลเอง
สิ่งที่ต้องเตรียม
- MySQL 8.x หรือ MariaDB 10.x ติดตั้งและทำงานอยู่ (ดู ติดตั้ง Nginx, PHP-FPM และ MariaDB (LEMP) บน Ubuntu)
- สิทธิ์
sudoบนเซิร์ฟเวอร์ หรือรหัสผ่านของผู้ใช้ root ของฐานข้อมูล - ชื่อฐานข้อมูล ชื่อผู้ใช้ และรหัสผ่านที่ตั้งใจจะใช้ ตัวอย่างในคู่มือใช้
shopdbและshopuser
ขั้นตอนที่ 1: เข้าสู่ฐานข้อมูลในฐานะผู้ดูแล
บน Ubuntu ผู้ใช้ root ของทั้ง MariaDB และ MySQL ใช้การยืนยันตัวตนผ่าน Socket จึงเข้าได้ด้วย sudo โดยไม่ต้องใส่รหัสผ่าน MariaDB บน AlmaLinux และ Rocky Linux ก็เข้าแบบนี้ได้เช่นกัน
sudo mysqlหากตั้งรหัสผ่านให้ root ไว้แล้ว ใช้
mysql -u root -pเมื่อสำเร็จจะเห็นพรอมต์ mysql> หรือ MariaDB [(none)]> คำสั่ง SQL ต่อจากนี้ต้องจบด้วยเครื่องหมาย ; ทุกครั้ง
ขั้นตอนที่ 2: สร้างฐานข้อมูล
CREATE DATABASE shopdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;ผลลัพธ์ Query OK, 1 row affected แปลว่าสำเร็จ ควรใช้ utf8mb4 เสมอ เพราะรองรับภาษาไทยและ Emoji ได้ครบ ส่วน Collation utf8mb4_unicode_ci ใช้ได้ทั้ง MySQL และ MariaDB ทำให้ย้ายฐานข้อมูลข้ามกันได้ง่าย (MySQL 8 มีค่าเริ่มต้นเป็น utf8mb4_0900_ai_ci ซึ่ง MariaDB 10.x ไม่รู้จัก)
ตั้งชื่อฐานข้อมูลด้วยตัวอักษรภาษาอังกฤษ ตัวเลข และ _ เท่านั้น หากชื่อมีขีด - ต้องครอบด้วย Backtick เช่น `shop-db` ทุกครั้งที่อ้างถึง
ขั้นตอนที่ 3: สร้างผู้ใช้
CREATE USER 'shopuser'@'localhost' IDENTIFIED BY 'ใส่รหัสผ่านที่แข็งแรงที่นี่';ส่วน @'localhost' คือ Host ที่ผู้ใช้นี้เชื่อมต่อเข้ามาได้ ในที่นี้คือเฉพาะจากเครื่องเดียวกัน ซึ่งเหมาะกับแอปที่อยู่บนเซิร์ฟเวอร์เดียวกับฐานข้อมูล ผู้ใช้ชื่อเดียวกันแต่ Host ต่างกันนับเป็นคนละบัญชี
ใช้รหัสผ่านยาวอย่างน้อย 16 ตัวอักษร ผสมตัวพิมพ์ใหญ่ เล็ก ตัวเลข และสัญลักษณ์ หลีกเลี่ยงเครื่องหมาย ' ในรหัสผ่าน เพราะต้อง Escape และมักทำให้ไฟล์ตั้งค่าของแอปผิดพลาด สร้างรหัสผ่านสุ่มได้ด้วยคำสั่ง openssl rand -base64 24 ในอีกหน้าต่างหนึ่ง
ขั้นตอนที่ 4: กำหนดสิทธิ์ด้วย GRANT
สำหรับแอปทั่วไปอย่าง WordPress ที่ต้องสร้างและแก้ไขตารางเองได้ ให้สิทธิ์ทั้งหมดเฉพาะในฐานข้อมูลของตัวเอง
GRANT ALL PRIVILEGES ON shopdb.* TO 'shopuser'@'localhost';shopdb.* หมายถึงทุกตารางในฐานข้อมูล shopdb ห้ามใช้ *.* กับผู้ใช้ของแอป เพราะเท่ากับให้สิทธิ์ทุกฐานข้อมูลในเซิร์ฟเวอร์
ตัวอย่างสิทธิ์แบบจำกัดสำหรับกรณีอื่น
-- ผู้ใช้สำหรับอ่านรายงานอย่างเดียว
CREATE USER 'report'@'localhost' IDENTIFIED BY 'รหัสผ่านอีกชุด';
GRANT SELECT ON shopdb.* TO 'report'@'localhost';
-- แอปที่อ่านเขียนข้อมูลได้ แต่แก้โครงสร้างตารางไม่ได้
GRANT SELECT, INSERT, UPDATE, DELETE ON shopdb.* TO 'shopuser'@'localhost';คำสั่ง GRANT มีผลทันที ไม่จำเป็นต้องรัน FLUSH PRIVILEGES (คำสั่งนี้จำเป็นเฉพาะกรณีแก้ตารางสิทธิ์ในฐานข้อมูล mysql โดยตรง)
ขั้นตอนที่ 5: จัดการผู้ใช้ภายหลัง
-- ดูสิทธิ์ของผู้ใช้
SHOW GRANTS FOR 'shopuser'@'localhost';
-- เปลี่ยนรหัสผ่าน
ALTER USER 'shopuser'@'localhost' IDENTIFIED BY 'รหัสผ่านใหม่';
-- ยกเลิกสิทธิ์บางอย่าง
REVOKE DELETE ON shopdb.* FROM 'shopuser'@'localhost';
-- ดูรายชื่อผู้ใช้ทั้งหมด
SELECT user, host FROM mysql.user;
-- ลบผู้ใช้
DROP USER 'report'@'localhost';หมายเหตุ: คำสั่ง
DROP DATABASEลบฐานข้อมูลพร้อมข้อมูลทั้งหมดทันทีและกู้คืนไม่ได้ ก่อนลบให้สำรองด้วย mysqldump ตามคู่มือ สำรองและกู้คืนฐานข้อมูล MySQL/MariaDB ด้วย mysqldump ทุกครั้ง
พิมพ์ exit เพื่อออกจากฐานข้อมูล
ตรวจสอบผลลัพธ์
ทดสอบเข้าด้วยผู้ใช้ใหม่ (ไม่ต้องใช้ sudo)
mysql -u shopuser -p shopdbใส่รหัสผ่าน แล้วลองคำสั่ง
SHOW DATABASES;
SELECT CURRENT_USER();ผลลัพธ์ควรเห็นเฉพาะ shopdb และ information_schema และ CURRENT_USER() แสดง shopuser@localhost จากนั้นนำชื่อฐานข้อมูล ผู้ใช้ และรหัสผ่านไปใส่ในไฟล์ตั้งค่าของแอป โดยใช้ Host เป็น localhost
ปัญหาที่พบบ่อย
ERROR 1045: Access denied for user
รหัสผ่านผิด หรือ Host ไม่ตรงกับบัญชีที่สร้าง ตัวอย่างที่พบบ่อยคือแอปตั้ง Host เป็น 127.0.0.1 ซึ่งเชื่อมต่อผ่าน TCP ขณะที่บัญชีสร้างไว้เป็น 'localhost' ซึ่งบางการตั้งค่าจะมองเป็นคนละ Host ให้เปลี่ยนการตั้งค่าในแอปเป็น localhost หรือสร้างบัญชี 'shopuser'@'127.0.0.1' เพิ่มพร้อม GRANT ชุดเดียวกัน
ERROR 1410: You are not allowed to create a user with GRANT
MySQL 8 ไม่สร้างผู้ใช้ให้อัตโนมัติจากคำสั่ง GRANT อีกแล้ว ต้องรัน CREATE USER ก่อน แล้วจึง GRANT (MariaDB ยังยอมให้ทำในคำสั่งเดียวได้ แต่แยกสองคำสั่งจะใช้ได้กับทั้งสองระบบ)
ERROR 1819: Your password does not satisfy the current policy requirements
MySQL เปิด Component validate_password ไว้ ให้ใช้รหัสผ่านที่ยาวขึ้นและมีตัวพิมพ์ใหญ่ เล็ก ตัวเลข และสัญลักษณ์ครบ ดูเกณฑ์ปัจจุบันได้ด้วย SHOW VARIABLES LIKE 'validate_password%';
ERROR 1396: Operation CREATE USER failed
มีผู้ใช้ชื่อและ Host นี้อยู่แล้ว ตรวจด้วย SELECT user, host FROM mysql.user; หากต้องการตั้งรหัสผ่านใหม่ให้ใช้ ALTER USER แทน
หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน Support ของ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ระบบปฏิบัติการ ขั้นตอนที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ตรวจสอบได้รวดเร็วขึ้น
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


