บทบาทและสิทธิ์
ให้และเพิกถอนสิทธิ์การเข้าถึงด้วย GRANT และ REVOKE
บทบาทและสิทธิ์ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
ROLE และ PRIVILEGES คืออะไร
ใน SQL บทบาทคือกลุ่มสิทธิ์ที่มีชื่อและสามารถมอบหมายให้ผู้ใช้ได้ ส่วนสิทธิ์จะควบคุมว่าผู้ใช้หรือบทบาทสามารถดำเนินการใดกับวัตถุฐานข้อมูล เช่น ตาราง วิว และฟังก์ชัน
แทนที่จะมอบสิทธิ์ให้ผู้ใช้แต่ละคนทีละราย คุณสามารถสร้างบทบาทที่มีสิทธิ์ตามต้องการ แล้วมอบหมายบทบาทนั้นให้ผู้ใช้หลายคนพร้อมกันได้ วิธีนี้ทำให้การจัดการการควบคุมการเข้าถึงในระบบขนาดใหญ่ทำได้ง่ายขึ้นมาก
การสร้างบทบาท
ใช้ CREATE ROLE เพื่อกำหนดบทบาทใหม่ใน PostgreSQL บทบาทหนึ่งอาจแทนผู้ใช้คนเดียวหรือกลุ่มผู้ใช้ก็ได้ ขึ้นอยู่กับวิธีที่คุณกำหนดค่า
โดยค่าเริ่มต้น บทบาทจะถูกสร้างขึ้นโดยไม่มีสิทธิ์ใด ๆ — คุณต้องมอบสิทธิ์เข้าถึงวัตถุให้บทบาทนั้นอย่างชัดเจน
CREATE ROLE readonly_user;
CREATE ROLE app_writer;
CREATE ROLE db_admin;การมอบสิทธิ์ระดับตาราง
คำสั่ง GRANT ใช้มอบสิทธิ์ให้บทบาทหรือผู้ใช้ดำเนินการบางอย่างกับวัตถุฐานข้อมูล สิทธิ์ระดับตารางที่พบบ่อย ได้แก่ SELECT, INSERT, UPDATE และ DELETE
คุณสามารถมอบสิทธิ์เดียวหรือหลายสิทธิ์พร้อมกันได้ โดยคั่นแต่ละสิทธิ์ด้วยเครื่องหมายจุลภาค
-- Grant SELECT only (read-only role)
GRANT SELECT ON employees TO readonly_user;
-- Grant multiple privileges
GRANT SELECT, INSERT, UPDATE ON orders TO app_writer;การมอบสิทธิ์ทั้งหมด
หากบทบาทต้องการเข้าถึงตารางอย่างเต็มที่ คุณสามารถใช้ GRANT ALL PRIVILEGES แทนการระบุสิทธิ์แต่ละรายการ วิธีนี้จะมอบสิทธิ์ที่เกี่ยวข้องทั้งหมดบนวัตถุที่ระบุ
โปรดใช้ ALL PRIVILEGES ด้วยความระมัดระวัง — มอบสิทธิ์นี้เฉพาะให้บทบาทที่จำเป็นต้องควบคุมวัตถุอย่างสมบูรณ์จริง ๆ เท่านั้น
-- Grant full access to db_admin on a table
GRANT ALL PRIVILEGES ON employees TO db_admin;
-- Or the shorthand form
GRANT ALL ON orders TO db_admin;การเพิกถอนสิทธิ์
คำสั่ง REVOKE ใช้ลบสิทธิ์ที่เคยมอบไว้ก่อนหน้านี้ออกจากบทบาทหรือผู้ใช้ วิธีนี้ช่วยจำกัดการเข้าถึงให้เข้มงวดขึ้นเมื่อข้อกำหนดเปลี่ยนแปลง หรือเมื่อบทบาทไม่จำเป็นต้องมีสิทธิ์บางอย่างอีกต่อไป
หลังจากใช้ REVOKE บทบาทที่ได้รับผลกระทบจะสูญเสียสิทธิ์ที่ระบุบนวัตถุที่ระบุทันที
-- Remove UPDATE access from app_writer
REVOKE UPDATE ON orders FROM app_writer;
-- Remove all privileges from a role
REVOKE ALL PRIVILEGES ON employees FROM readonly_user;การมอบหมายบทบาทให้ผู้ใช้
ใน PostgreSQL ผู้ใช้ก็ถือเป็นบทบาทเช่นกัน — บทบาทที่มีแอตทริบิวต์ LOGIN สามารถเชื่อมต่อกับฐานข้อมูลได้ คุณมอบหมายบทบาทกลุ่มให้กับบทบาทสำหรับเข้าสู่ระบบโดยใช้ GRANT role TO user
เมื่อได้รับมอบหมายแล้ว ผู้ใช้จะสืบทอดสิทธิ์ทั้งหมดของบทบาทนั้น ทำให้จัดการสิทธิ์สำหรับผู้ใช้หลายคนพร้อมกันได้อย่างสะดวก
-- Create a login user
CREATE ROLE alice WITH LOGIN PASSWORD 'secret123';
-- Assign the readonly role to alice
GRANT readonly_user TO alice;
-- Alice can now SELECT on tables granted to readonly_userการเพิกถอนบทบาทจากผู้ใช้
หากต้องการลบการมอบหมายบทบาทออกจากผู้ใช้ ให้ใช้ REVOKE role FROM user หลังจากนั้น ผู้ใช้จะไม่สืบทอดสิทธิ์ที่มาพร้อมกับบทบาทนั้นอีกต่อไป
วิธีนี้มีประโยชน์เมื่อพนักงานเปลี่ยนหน้าที่หรือออกจากองค์กร — คุณสามารถเพิกถอนบทบาทของพนักงานได้โดยไม่ต้องแก้ไขนิยามสิทธิ์ของบทบาทนั้น
-- Remove the readonly role from alice
REVOKE readonly_user FROM alice;
-- Alice no longer has SELECT on tables via that roleสิทธิ์ระดับ schema
ก่อนที่บทบาทจะเข้าถึงวัตถุใด ๆ ภายใน schema ได้ บทบาทนั้นต้องมีสิทธิ์ USAGE บน schema ก่อน หากไม่มีสิทธิ์นี้ แม้บทบาทจะมีสิทธิ์ SELECT บนตารางใดตารางหนึ่ง ก็ยังไม่สามารถอ่านข้อมูลได้ เนื่องจากไม่สามารถระบุเส้นทาง schema ได้
โปรดมอบสิทธิ์ USAGE บน schema ควบคู่กับสิทธิ์ระดับวัตถุเสมอ
-- Allow readonly_user to see inside the public schema
GRANT USAGE ON SCHEMA public TO readonly_user;
-- Then grant table-level privilege
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;สิทธิ์เริ่มต้นสำหรับวัตถุในอนาคต
เมื่อมีการสร้างตารางใหม่ใน schema บทบาทที่มีอยู่จะไม่ได้รับสิทธิ์เข้าถึงตารางเหล่านั้นโดยอัตโนมัติ ให้ใช้ ALTER DEFAULT PRIVILEGES เพื่อให้วัตถุในอนาคตที่สร้างโดยบทบาทหนึ่งสามารถเข้าถึงได้โดยอัตโนมัติโดยอีกบทบาทหนึ่ง
วิธีนี้ช่วยป้องกันปัญหาที่พบบ่อย ซึ่งตารางที่เพิ่งสร้างใหม่จะมองไม่เห็นสำหรับบทบาทของแอปพลิเคชัน จนกว่าจะมีผู้จำได้และเรียกใช้ GRANT ด้วยตนเอง
-- Future tables created by the current user will be SELECTable by readonly_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
-- Future tables will allow INSERT/UPDATE/DELETE for app_writer
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;ตัวเลือก WITH GRANT OPTION
โดยค่าเริ่มต้น บทบาทที่ได้รับสิทธิ์จะไม่สามารถส่งต่อสิทธิ์นั้นให้บทบาทอื่นได้ การเพิ่ม WITH GRANT OPTION จะทำให้ผู้รับสามารถมอบสิทธิ์นั้นให้ผู้อื่นต่อได้เช่นกัน
โปรดใช้ตัวเลือกนี้อย่างระมัดระวัง — หมายความว่าบทบาทนั้นจะกลายเป็นจุดมอบหมายสิทธิ์ที่เชื่อถือได้สำหรับการควบคุมการเข้าถึง ซึ่งอาจทำให้การตรวจสอบซับซ้อนขึ้นหากใช้มากเกินไป
-- app_writer can now grant SELECT on orders to other roles
GRANT SELECT ON orders TO app_writer WITH GRANT OPTION;
-- app_writer can then do:
-- GRANT SELECT ON orders TO reporting_role;การดูสิทธิ์ที่ได้รับมอบหมาย
PostgreSQL จัดเก็บข้อมูลสิทธิ์ไว้ในวิวแค็ตตาล็อกระบบ คุณสามารถค้นหา information_schema.role_table_grants เพื่อดูว่าบทบาทใดได้รับสิทธิ์ใดบนตารางใดบ้าง
คำสั่งแบ็กสแลช \dp tablename ใน psql ยังแสดงรายการสิทธิ์การเข้าถึงของตารางในรูปแบบกะทัดรัดได้ด้วย
-- List all table-level grants in the current database
SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.role_table_grants
WHERE table_schema = 'public'
ORDER BY grantee, table_name;ตรวจสอบอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับบทบาทและสิทธิ์ใน SQL
สรุป: บทบาทและสิทธิ์
ในบทเรียนนี้ คุณได้เรียนรู้วิธีที่ SQL จัดการการควบคุมการเข้าถึงผ่านบทบาทและสิทธิ์:
- CREATE ROLE ใช้กำหนดบทบาทใหม่หรือบัญชีผู้ใช้
- GRANT ใช้มอบสิทธิ์ (SELECT, INSERT, UPDATE, DELETE, ALL) บนวัตถุให้กับบทบาท
- REVOKE ใช้ลบสิทธิ์เหล่านั้น
- GRANT บทบาท TO ผู้ใช้ ใช้มอบหมายบทบาทกลุ่มให้ผู้ใช้ที่เข้าสู่ระบบ เพื่อให้ผู้ใช้สืบทอดสิทธิ์ของบทบาทนั้น
- บทบาทต้องมีUSAGE บน schemaก่อนจึงจะเข้าถึงวัตถุภายในได้
- ALTER DEFAULT PRIVILEGES ช่วยให้วัตถุในอนาคตสามารถเข้าถึงได้โดยอัตโนมัติ
- WITH GRANT OPTION ช่วยให้ผู้รับสามารถมอบสิทธิ์ต่อไปได้
การจำกัดสิทธิ์ให้เหลือน้อยที่สุดและจัดการตามบทบาทเป็นหลักการสำคัญของการออกแบบฐานข้อมูลที่ปลอดภัย — มอบเฉพาะสิ่งที่จำเป็น และเพิกถอนทันทีเมื่อไม่จำเป็นอีกต่อไป
คำถามที่พบบ่อย
บทเรียน “บทบาทและสิทธิ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “บทบาทและสิทธิ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “บทบาทและสิทธิ์”
ให้และเพิกถอนสิทธิ์การเข้าถึงด้วย GRANT และ REVOKE คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “บทบาทและสิทธิ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ