0Pricing
SQL Academy · บทเรียน

บทบาทและสิทธิ์

ให้และเพิกถอนสิทธิ์การเข้าถึงด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. บทบาทและสิทธิ์
  2. นโยบายความปลอดภัยระดับแถว
  3. สิทธิ์ระดับคอลัมน์
  4. การตรวจสอบการเข้าถึง
← กลับไปที่ SQL Academy