วิธีแสดงรายการและจัดการผู้ใช้ MariaDB: คู่มือครบวงจรสำหรับบัญชีผู้ใช้และสิทธิ์

目次

1. บทนำ

MariaDB เป็นหนึ่งในระบบจัดการฐานข้อมูลที่ใช้กันอย่างแพร่หลายที่สุดในปัจจุบัน, มีชื่อเสียงในเรื่องความง่ายในการใช้งานและประสิทธิภาพสูง. ในคุณสมบัติมากมายของมัน, การจัดการผู้ใช้มีบทบาทสำคัญ. ด้วยการจัดการผู้ใช้อย่างเหมาะสม, คุณสามารถรับประกันความปลอดภัยของฐานข้อมูลและบรรลุการดำเนินงานที่มีประสิทธิภาพ.

บทความนี้มุ่งเน้นที่วิธีการตรวจสอบรายการผู้ใช้ใน MariaDB. โดยเฉพาะ, เราจะอธิบายวิธีการดึงรายการผู้ใช้โดยใช้คำสั่ง SQL, ความแตกต่างและข้อได้เปรียบของแต่ละวิธี, รวมถึงการตั้งค่าสิทธิ์ที่เกี่ยวข้องและข้อพิจารณาที่สำคัญ.

คู่มือนี้เขียนขึ้นเพื่อเป็นประโยชน์ไม่เพียงแต่สำหรับผู้เริ่มต้น MariaDB แต่ยังสำหรับผู้ที่กำลังจัดการสภาพแวดล้อมการผลิตอยู่ด้วย. อย่าลืมอ่านจนจบ.

2. วิธีตรวจสอบรายการผู้ใช้ใน MariaDB

มีหลายวิธีในการตรวจสอบรายการผู้ใช้ใน MariaDB. แต่ละวิธีมีลักษณะเฉพาะของตนเอง, และการเลือกวิธีที่เหมาะสมตามวัตถุประสงค์ของคุณจะทำให้การจัดการผู้ใช้มีประสิทธิภาพ. ด้านล่างนี้, เราจะอธิบายสามวิธีที่เป็นตัวแทนอย่างละเอียด.

2.1 การใช้ตาราง mysql.user

วิธีพื้นฐานที่สุดในการตรวจสอบข้อมูลผู้ใช้ใน MariaDB คือการอ้างอิงโดยตรงไปยังตาราง mysql.user. ตารางนี้เก็บข้อมูลบัญชีผู้ใช้ทั้งหมด.

คำสั่งตัวอย่าง

คุณสามารถดูรายการผู้ใช้โดยการรัน SQL ต่อไปนี้:

SELECT Host, User FROM mysql.user;

คำอธิบาย

  • Host : แสดงชื่อโฮสต์ที่ผู้ใช้ได้รับอนุญาตให้เชื่อมต่อจาก.
  • User : ชื่อผู้ใช้ที่ลงทะเบียนใน MariaDB.

สถานการณ์การใช้งาน

  • เมื่อคุณต้องการดูผู้ใช้ทั้งหมดในรายการ.
  • เมื่อคุณต้องการตรวจสอบว่าผู้ใช้ใดสามารถเชื่อมต่อจากโฮสต์เฉพาะได้.

หมายเหตุสำคัญ

  • คุณต้องมีสิทธิ์ที่เพียงพอ (โดยทั่วไปคือสิทธิ์ root) เพื่ออ้างอิงตาราง mysql.user.
  • ในบางเวอร์ชัน, การใช้ mysql.user โดยตรงอาจไม่แนะนำ. ควรตรวจสอบเอกสารอย่างเป็นทางการสำหรับเวอร์ชันของคุณเสมอ.

2.2 การใช้คำสั่ง SHOW GRANTS

คุณสามารถใช้คำสั่ง SHOW GRANTS เพื่อตรวจสอบสิทธิ์ที่มอบให้กับผู้ใช้เฉพาะ.

คำสั่งตัวอย่าง

ระบุผู้ใช้ตามที่แสดงด้านล่างเพื่อแสดงสิทธิ์ของพวกเขา:

SHOW GRANTS FOR 'username'@'hostname';

คำอธิบาย

  • คุณสามารถตรวจสอบสิทธิ์โดยละเอียดสำหรับแต่ละผู้ใช้.
  • ตัวอย่างผลลัพธ์:
    GRANT ALL PRIVILEGES ON *.* TO 'user1'@'localhost';
    

สถานการณ์การใช้งาน

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

หมายเหตุสำคัญ

  • หากคุณไม่มีสิทธิ์ที่เพียงพอ, คุณจะไม่สามารถรันคำสั่งนี้ได้.

2.3 การใช้ information_schema.USER_PRIVILEGES

MariaDB มีฐานข้อมูลระบบชื่อ information_schema. โดยการสืบค้นตาราง USER_PRIVILEGES ภายใน, คุณสามารถแสดงข้อมูลสิทธิ์ของผู้ใช้ทั้งหมด.

คำสั่งตัวอย่าง

SELECT * FROM information_schema.USER_PRIVILEGES;

คำอธิบาย

  • วิธีนี้ทำให้คุณสามารถตรวจสอบสิทธิ์ระดับโลกสำหรับแต่ละผู้ใช้.
  • ผลลัพธ์รวมถึงข้อมูลเช่น:
  • GRANTEE : ชื่อผู้ใช้และชื่อโฮสต์.
  • PRIVILEGE_TYPE : ประเภทของสิทธิ์ที่มอบให้.
  • IS_GRANTABLE : ว่าสิทธิ์นั้นสามารถมอบให้ผู้อื่นได้หรือไม่.

สถานการณ์การใช้งาน

  • เมื่อคุณต้องการตรวจสอบสิทธิ์ของผู้ใช้หลายคนพร้อมกัน.
  • เมื่อทำการตรวจสอบการตั้งค่าสิทธิ์ระดับโลก.

หมายเหตุสำคัญ

  • สิทธิ์บางอย่างอาจไม่แสดงอย่างเต็มที่ในตารางนี้.

สรุป

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

3. การจัดการผู้ใช้ MariaDB อย่างละเอียด

MariaDB อนุญาตให้คุณตรวจสอบข้อมูลผู้ใช้โดยละเอียดและจัดการสิทธิ์ได้อย่างมีประสิทธิภาพ. ในส่วนนี้, เราจะอธิบายการดำเนินการที่จำเป็นสำหรับการจัดการผู้ใช้ที่เหมาะสม.

3.1 การตรวจสอบข้อมูลผู้ใช้

ใน MariaDB คุณสามารถใช้คำสั่ง SHOW CREATE USER เพื่อตรวจสอบข้อมูลโดยละเอียดเกี่ยวกับผู้ใช้เฉพาะ คำสั่งนี้จะคัดลอกประโยคที่ใช้เมื่อสร้างผู้ใช้

ตัวอย่างคำสั่ง

รัน SQL ต่อไปนี้เพื่อแสดงข้อมูลโดยละเอียดเกี่ยวกับผู้ใช้ที่ระบุ:

SHOW CREATE USER 'username'@'hostname';

คำอธิบาย

คำสั่งนี้ใช้เพื่อตรวจสอบวิธีการรับรองตัวตนของผู้ใช้และคุณสมบัติอื่นๆ ตัวอย่างผลลัพธ์:

CREATE USER 'user1'@'localhost' IDENTIFIED VIA mysql_native_password USING '***';

สถานการณ์การใช้งาน

  • เมื่อคุณต้องการยืนยันวิธีการรับรองตัวตนของผู้ใช้
  • เมื่อตรวจสอบคุณสมบัติของผู้ใช้เพื่อหาปัญหาที่อาจเกิดขึ้น

ข้อควรระวัง

  • ต้องมีสิทธิ์ที่เหมาะสมเพื่อรันคำสั่งนี้ (โดยทั่วไปคือสิทธิ์ root)

3.2 การตั้งค่าและแก้ไขสิทธิ์ผู้ใช้

MariaDB อนุญาตให้กำหนดค่าสิทธิ์ได้อย่างยืดหยุ่นสำหรับผู้ใช้แต่ละคน คุณสามารถใช้คำสั่ง GRANT และ REVOKE เพื่อจัดการสิทธิ์

การมอบสิทธิ์

SQL ต่อไปนี้มอบสิทธิ์เฉพาะแก่ผู้ใช้ที่กำหนด:

GRANT SELECT, INSERT ON database_name.* TO 'username'@'hostname';

การเพิกถอนสิทธิ์

เพื่อลบสิทธิ์ที่ไม่จำเป็น ใช้คำสั่ง REVOKE:

REVOKE INSERT ON database_name.* FROM 'username'@'hostname';

คำอธิบาย

  • คำสั่ง GRANT มอบสิทธิ์การดำเนินการสำหรับฐานข้อมูลหรือตารางเฉพาะ
  • คำสั่ง REVOKE ลบสิทธิ์ที่ไม่จำเป็นอีกต่อไป

สถานการณ์การใช้งาน

  • เมื่อกำหนดสิทธิ์สำหรับผู้ใช้ใหม่
  • เมื่อลบสิทธิ์ที่ไม่จำเป็นเพื่อเพิ่มความปลอดภัย

ข้อควรระวัง

  • การกำหนดค่าสิทธิ์ที่ไม่ถูกต้องอาจเพิ่มความเสี่ยงด้านความปลอดภัย ดังนั้นให้ดำเนินการอย่างระมัดระวัง

3.3 การลบผู้ใช้

การลบผู้ใช้ที่ไม่จำเป็นจะช่วยเพิ่มความปลอดภัยของฐานข้อมูล ใช้คำสั่ง DROP USER เพื่อลบผู้ใช้

ตัวอย่างคำสั่ง

รัน SQL ต่อไปนี้เพื่อลบผู้ใช้ที่ระบุ:

DROP USER 'username'@'hostname';

คำอธิบาย

  • เมื่อลบผู้ใช้ สิทธิ์ทั้งหมดที่มอบให้ผู้ใช้นั้นจะถูกลบพร้อมกัน
  • หากสำเร็จ MariaDB จะแสดงข้อความ “Query OK”

สถานการณ์การใช้งาน

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

ข้อควรระวัง

  • หากผู้ใช้กำลังเชื่อมต่ออยู่ อาจเกิดข้อผิดพลาดที่ไม่คาดคิด
  • การลบผู้ใช้ไม่สามารถย้อนกลับได้ ดังนั้นให้ยืนยันอย่างรอบคอบก่อนรัน

สรุป

การจัดการผู้ใช้ที่เหมาะสมใน MariaDB เป็นสิ่งสำคัญสำหรับการปรับปรุงทั้งความปลอดภัยและประสิทธิภาพการทำงาน โดยการตรวจสอบข้อมูลผู้ใช้ กำหนดค่าและแก้ไขสิทธิ์ และลบผู้ใช้ที่ไม่จำเป็น คุณสามารถรักษาสภาพแวดล้อมฐานข้อมูลที่ปลอดภัยและมีประสิทธิภาพ

4. ข้อพิจารณาหลักสำหรับการจัดการผู้ใช้ MariaDB

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

4.1 วิธีจัดการสิทธิ์ที่ไม่เพียงพอ

การตรวจสอบรายการผู้ใช้หรือสิทธิ์ใน MariaDB ต้องใช้สิทธิ์ที่เพียงพอ หากการดำเนินการล้มเหลวเนื่องจากสิทธิ์ไม่เพียงพอ คุณสามารถลองใช้วิธีต่อไปนี้

ตัวอย่างข้อผิดพลาด

คุณอาจเห็นข้อผิดพลาดเช่นต่อไปนี้:

ERROR 1045 (28000): Access denied for user 'user1'@'localhost'

วิธีแก้ไข

  1. ยืนยันว่าคุณเข้าสู่ระบบในฐานะผู้ใช้ที่ถูกต้อง
  • หากสิทธิ์ที่จำเป็น (ตัวอย่างเช่น สิทธิ์ SELECT) หายไป คุณอาจไม่สามารถคิวรีตาราง mysql.user
  • เป็นวิธีแก้ปัญหาชั่วคราว ลองเข้าสู่ระบบในฐานะผู้ใช้ root และทำซ้ำการดำเนินการ
  1. เข้าสู่ระบบในฐานะผู้ใช้ root
  • การเข้าสู่ระบบในฐานะ root ช่วยให้ทำการดำเนินการบริหารส่วนใหญ่ได้: bash mysql -u root -p
  1. กำหนดค่าสิทธิ์ใหม่
  • มอบสิทธิ์ที่จำเป็นหากต้องการ: sql GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname'; FLUSH PRIVILEGES;

หมายเหตุสำคัญ

  • หลีกเลี่ยงการมอบสิทธิ์มากเกินความจำเป็น สิทธิ์ที่มากเกินไปจะเพิ่มความเสี่ยงด้านความปลอดภัย

4.2 แนวปฏิบัติที่ดีที่สุดด้านความปลอดภัย

ความปลอดภัยควรเป็นลำดับความสำคัญสูงสุดในการจัดการผู้ใช้ MariaDB ด้านล่างนี้คือประเด็นสำคัญที่ควรจำไว้

ลบผู้ใช้ที่ไม่ได้ใช้งาน

  • การปล่อยให้บัญชีผู้ใช้ที่ไม่ได้ใช้งานไว้ อาจทำให้พวกมันเป็นเป้าหมายที่เป็นไปได้สำหรับผู้โจมตี
  • ทบทวนผู้ใช้เป็นประจำและลบรายการที่ไม่จำเป็น:
    DROP USER 'username'@'hostname';
    

ใช้หลักการรหัสผ่านที่แข็งแกร่ง

  • เมื่อสร้างผู้ใช้ ให้ตั้งรหัสผ่านที่ยากต่อการเดา:
    CREATE USER 'user1'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    

จำกัดการเข้าถึงจากภายนอก

  • จำกัดโฮสต์ที่สามารถเชื่อมต่อได้เพื่อป้องกันการเข้าถึงจากภายนอกที่ไม่จำเป็น:
    CREATE USER 'user1'@'192.168.0.1' IDENTIFIED BY 'password';
    

ติดตามบันทึก

  • ทบทวนบันทึกของ MariaDB เป็นประจำ (ตัวอย่างเช่น general_log และ error_log ) เพื่อตรวจจับการเข้าถึงที่น่าสงสัย

4.3 ความแตกต่างระหว่างเวอร์ชันของ MariaDB

พฤติกรรมของ MariaDB และแนวปฏิบัติที่แนะนำอาจแตกต่างกันตามเวอร์ชัน ดังนั้นคุณควรปรับแนวทางของคุณให้เหมาะสม

การเลิกใช้การเข้าถึง mysql.user โดยตรง

  • ในเวอร์ชันใหม่ การคิวรีตาราง mysql.user โดยตรงอาจไม่ได้รับการสนับสนุน ในกรณีนั้น ให้ใช้ SHOW GRANTS หรือ information_schema แทน

ปลั๊กอินการยืนยันตัวตน

  • ขึ้นอยู่กับเวอร์ชัน ปลั๊กอินการยืนยันตัวตนเริ่มต้นอาจแตกต่างกัน เวอร์ชันเก่ามักใช้ mysql_native_password ในขณะที่เวอร์ชันใหม่กว่าอาจแนะนำตัวเลือกที่ปลอดภัยกว่าสำหรับ caching_sha2_password

ขั้นตอนที่แนะนำ

  • ตรวจสอบเวอร์ชันของ MariaDB ของคุณ:
    SELECT VERSION();
    
  • อ้างอิงเอกสารอย่างเป็นทางการสำหรับเวอร์ชันของคุณและปฏิบัติตามแนวปฏิบัติที่ดีที่สุดล่าสุด

สรุป

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

5. คำถามที่พบบ่อย (FAQ)

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

Q1: ฉันสามารถมอบสิทธิ์เฉพาะให้กับผู้ใช้เฉพาะได้อย่างไร?

คำตอบ

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

GRANT SELECT, INSERT ON database_name.* TO 'username'@'hostname';
FLUSH PRIVILEGES;

ประเด็นสำคัญ

  • โดยการระบุ database_name.* สิทธิ์จะใช้กับตารางทั้งหมดในฐานข้อมูลนั้น
  • รัน FLUSH PRIVILEGES; เพื่อให้แน่ใจว่าการเปลี่ยนแปลงมีผล

Q2: สาเหตุและวิธีแก้ไขเมื่อรายการผู้ใช้ไม่แสดงขึ้นคืออะไร?

คำตอบ

หากคุณไม่สามารถดูรายการผู้ใช้ได้ สาเหตุต่อไปนี้เป็นเรื่องทั่วไป

  1. สิทธิ์ไม่เพียงพอ
  • หากขาดสิทธิ์ที่จำเป็น (ตัวอย่างเช่น สิทธิ์ SELECT ) คุณอาจไม่สามารถคิวรีตาราง mysql.user ได้
  • ในฐานะวิธีแก้ปัญหา ลองเข้าสู่ระบบในฐานะผู้ใช้ root และทำซ้ำการดำเนินการ
  1. ใช้คำสั่งที่ถูกต้อง
  • ในเวอร์ชันใหม่ของ MariaDB mysql.user อาจไม่ได้รับการสนับสนุน ในกรณีนั้น ให้ใช้คำสั่งต่อไปนี้แทน: SELECT User, Host FROM information_schema.USER_PRIVILEGES;
  1. ตรวจสอบเวอร์ชันของ MariaDB ของคุณ
  • เนื่องจากวิธีที่แนะนำอาจแตกต่างกันตามเวอร์ชัน ให้ตรวจสอบเวอร์ชันปัจจุบันของคุณก่อน: SELECT VERSION();

Q3: ฉันควรทำอย่างไรหากผู้ใช้ root ถูกล็อก?

คำตอบ

หากผู้ใช้ root ถูกล็อกและคุณไม่สามารถเข้าสู่ระบบได้ ให้ทำตามขั้นตอนเหล่านี้

  1. เริ่ม MariaDB ในโหมดปลอดภัย
  • หยุดเซิร์ฟเวอร์และเริ่มใหม่ในโหมดปลอดภัย: bash mysqld_safe --skip-grant-tables &
  1. รีเซ็ตรหัสผ่านของ root
  • เข้าสู่ระบบ MariaDB ในโหมดปลอดภัย แล้วรีเซ็ตรหัสผ่าน root ด้วยคำสั่งต่อไปนี้: UPDATE mysql.user SET Password=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES;
  1. ออกจากโหมดปลอดภัยและรีสตาร์ทโดยปกติ
  • รีสตาร์ท MariaDB และกลับสู่การทำงานปกติ.

หมายเหตุสำคัญ

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

Q4: ฉันได้รับข้อผิดพลาดเมื่อพยายามลบผู้ใช้ ควรทำอย่างไร?

คำตอบ

หากคุณพบข้อผิดพลาดขณะลบผู้ใช้ สาเหตุที่พบบ่อยมีดังต่อไปนี้.

  1. ผู้ใช้ที่คุณพยายามลบกำลังถูกใช้งานอยู่
  • หากผู้ใช้กำลังเชื่อมต่ออยู่ การลบอาจล้มเหลว.
  • วิธีแก้ไขคือบังคับตัดการเชื่อมต่อของผู้ใช้: SHOW PROCESSLIST; KILL connection_id;
  1. มีวัตถุที่ขึ้นอยู่กับผู้ใช้
  • หากมีวัตถุที่เชื่อมโยงกับผู้ใช้ (เช่น view หรือ stored procedure) คุณอาจต้องลบสิ่งเหล่านั้นก่อน.

Q5: ฉันจะบันทึกผลลัพธ์ของ SHOW GRANTS อย่างไร?

คำตอบ

คุณสามารถบันทึกผลลัพธ์ของ SHOW GRANTS ลงไฟล์เพื่อการตรวจสอบในภายหลังได้.

  1. บันทึกลงไฟล์
  • ใช้ไคลเอนต์ mysql ในบรรทัดคำสั่งและเปลี่ยนทิศทางผลลัพธ์: bash mysql -u root -p -e "SHOW GRANTS FOR 'username'@'hostname';" > grants_output.txt
  1. บันทึกเป็นคำสั่ง SQL
  • บันทึกผลลัพธ์ลงไฟล์ข้อความเพื่อให้คุณสามารถนำกลับมาใช้ใหม่ได้ในภายหลัง.

สรุป

ในส่วน FAQ นี้ เราได้ตอบคำถามทั่วไปที่มักเกิดขึ้นในการจัดการผู้ใช้ MariaDB ใช้คำตอบเหล่านี้เพื่อแก้ไขปัญหาและเพิ่มประสิทธิภาพการดำเนินงานของคุณ.