ภาษาควบคุมข้อมูล (Data Control Language) เป็นส่วนย่อยของ Structured Query Language (SQL) ผู้ดูแลฐานข้อมูลใช้ DCL เพื่อกำหนดค่าการเข้าถึงความปลอดภัยให้กับฐานข้อมูลเชิงสัมพันธ์ มันเสริมเติม ภาษา tanımlาข้อมูล (Data Definition Language) ซึ่งเพิ่มและลบออบเจ็กต์ฐานข้อมูล และ ภาษาจัดการข้อมูล (Data Manipulation Language) ซึ่งดึง แทรก และแก้ไขเนื้อหาของฐานข้อมูล
DCL เป็นส่วนย่อยของ SQL ที่ง่ายที่สุด เนื่องจากประกอบด้วยเพียงสามคำสั่ง: GRANT, REVOKE, และ DENY รวมกัน สามคำสั่งนี้ให้ความยืดหยุ่นแก่ผู้ดูแลในการตั้งค่าและลบสิทธิ์ฐานข้อมูลได้อย่างละเอียด
การเพิ่มสิทธิ์ด้วยคำสั่ง GRANT
คำสั่ง GRANT เพิ่มสิทธิ์ใหม่ให้กับผู้ใช้ฐานข้อมูล มีไวยากรณ์ที่เรียบง่าย ดังนิยามดังนี้:
GRANT [privilege] ON [object] TO [user] [WITH GRANT OPTION]
นี่คือรายละเอียดของแต่ละพารามิเตอร์ที่คุณสามารถจัดหาได้กับคำสั่งนี้:
- Privilege — สามารถเป็นคีย์เวิร์ด ALL (เพื่อให้สิทธิ์หลากหลาย) หรือสิทธิ์ฐานข้อมูลเฉพาะหรือชุดของสิทธิ์ ตัวอย่างรวมถึง CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE และ CREATE VIEW
- Object — สามารถเป็นออบเจ็กต์ฐานข้อมูลใดๆ ตัวเลือกสิทธิ์ที่ถูกต้องจะแตกต่างกันไปตามประเภทของออบเจ็กต์ฐานข้อมูลที่คุณรวมในคลอจนี้ โดยทั่วไป ออบเจ็กต์จะเป็นฐานข้อมูล ฟังก์ชัน stored procedure ตาราง หรือมุมมอง
- User — สามารถเป็นผู้ใช้ฐานข้อมูลใดๆ คุณยังสามารถแทนที่ด้วย role (บทบาท) สำหรับผู้ใช้ในคลอจนี้ หากคุณต้องการใช้ความปลอดภัยฐานข้อมูลแบบ role-based
- หากคุณรวมคลอจ WITH GRANT OPTION ที่เป็นตัวเลือกที่ท้ายคำสั่ง GRANT คุณไม่เพียงแต่ให้สิทธิ์ที่ระบุในคำสั่ง SQL แต่มอบสิทธิ์ให้ผู้ใช้นั้นเพิ่มเติม เพื่อให้สิทธิ์เดียวกันนั้นแก่ผู้ใช้ฐานข้อมูล คนอื่น อีกด้วย ด้วยเหตุนี้ ใช้คลอจนี้ด้วยความระมัดระวัง
ตัวอย่างเช่น สมมติว่าคุณต้องการให้ผู้ใช้ Joe มีความสามารถในการดึงข้อมูลจากตาราง employee ในฐานข้อมูลที่ชื่อ HR ให้ใช้คำสั่ง SQL ต่อไปนี้:
GRANT SELECT ON HR.employees TO Joe
Joe สามารถดึงข้อมูลจากตาราง employees ได้ เขาจะ ไม่สามารถ ให้สิทธิ์ผู้ใช้อื่นดึงข้อมูลจากตารางนั้นได้ เนื่องจากสคริปต์ DCL ไม่ได้รวมคลอจ WITH GRANT OPTION
การเพิกถอนการเข้าถึงฐานข้อมูล
คำสั่ง REVOKE ลบการเข้าถึงฐานข้อมูลจากผู้ใช้ที่ได้รับสิทธิ์มาก่อนหน้านี้ ไวยากรณ์สำหรับคำสั่งนี้นิยามดังนี้:
REVOKE [GRANT OPTION FOR] [permission] ON [object] FROM [user] [CASCADE]
นี่คือรายละเอียดพารามิเตอร์สำหรับคำสั่ง REVOKE:
- Permission — ระบุสิทธิ์ฐานข้อมูลที่จะลบจากผู้ใช้ที่ระบุ คำสั่งเพิกถอนทั้งการยืนยัน GRANT และ DENY ที่ทำไว้ก่อนหน้านี้สำหรับสิทธิ์ที่ระบุ
- Object — สามารถเป็นออบเจ็กต์ฐานข้อมูลใดๆ ตัวเลือกสิทธิ์ที่ถูกต้องแตกต่างกันไปตามประเภทของออบเจ็กต์ฐานข้อมูลที่คุณรวมในคลอจนี้ โดยทั่วไป ออบเจ็กต์จะเป็นฐานข้อมูล ฟังก์ชัน stored procedure ตาราง หรือมุมมอง
- User — สามารถเป็นผู้ใช้ฐานข้อมูลใดๆ คุณยังสามารถแทนที่ด้วย role สำหรับผู้ใช้ในคลอจนี้ หากคุณต้องการใช้ความปลอดภัยฐานข้อมูลแบบ role-based
- คลอจ GRANT OPTION FOR ลบความสามารถของผู้ใช้ที่ระบุในการให้สิทธิ์ที่ระบุแก่ผู้ใช้คนอื่น หากคุณรวมคลอจ GRANT OPTION FOR ในคำสั่ง REVOKE สิทธิ์หลักจะไม่ถูกเพิกถอน คลอจนี้เพิกถอนเฉพาะความสามารถในการให้สิทธิ์
- ตัวเลือก CASCADE ยังเพิกถอนสิทธิ์ที่ระบุจากผู้ใช้ทุกคนที่ผู้ใช้ที่ระบุได้ให้สิทธิ์ไป
คำสั่งต่อไปนี้เพิกถอนสิทธิ์ที่ให้กับ Joe ในตัวอย่างก่อนหน้า:
REVOKE SELECT ON HR.employees FROM Joe
การปฏิเสธการเข้าถึงฐานข้อมูลอย่างชัดเจน
คำสั่ง DENY ป้องกันผู้ใช้อย่างชัดเจนไม่ให้รับสิทธิ์เฉพาะ ฟีเจอร์นี้มีประโยชน์เมื่อผู้ใช้เป็นสมาชิกของ role หรือกลุ่มที่ได้รับสิทธิ์ และคุณต้องการป้องกันผู้ใช้รายคนนั้นไม่ให้สืบสิทธิ์โดยการสร้างข้อยกเว้น ไวยากรณ์สำหรับคำสั่งนี้มีดังนี้:
DENY [permission] ON [object] TO [user]
พารามิเตอร์สำหรับคำสั่ง DENY เหมือนกับที่ใช้สำหรับคำสั่ง GRANT ตัวอย่างเช่น หากคุณต้องการให้แน่ใจว่า Matthew จะไม่เคยได้รับความสามารถในการลบข้อมูลจากตาราง employees ให้ออกคำสั่งต่อไปนี้:
DENY DELETE ON HR.employees TO Matthew