PostgreSQL - สิทธิพิเศษ
เมื่อใดก็ตามที่วัตถุถูกสร้างขึ้นในฐานข้อมูลเจ้าของจะถูกกำหนดให้กับมัน เจ้าของมักจะเป็นผู้ดำเนินการคำสั่งสร้าง สำหรับวัตถุส่วนใหญ่สถานะเริ่มต้นคือมีเพียงเจ้าของ (หรือผู้ใช้ขั้นสูง) เท่านั้นที่สามารถแก้ไขหรือลบวัตถุได้ ในการอนุญาตให้บทบาทหรือผู้ใช้อื่น ๆ ใช้งานได้ต้องให้สิทธิ์พิเศษหรือการอนุญาต
สิทธิพิเศษประเภทต่างๆใน PostgreSQL ได้แก่ -
- SELECT,
- INSERT,
- UPDATE,
- DELETE,
- TRUNCATE,
- REFERENCES,
- TRIGGER,
- CREATE,
- CONNECT,
- TEMPORARY,
- ดำเนินการและ
- USAGE
ขึ้นอยู่กับประเภทของวัตถุ (ตารางฟังก์ชัน ฯลฯ ) สิทธิ์จะถูกนำไปใช้กับวัตถุ ในการกำหนดสิทธิ์ให้กับผู้ใช้คำสั่ง GRANT จะถูกใช้
ไวยากรณ์สำหรับ GRANT
ไวยากรณ์พื้นฐานสำหรับคำสั่ง GRANT มีดังนี้ -
GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
privilege - ค่าอาจเป็น: SELECT, INSERT, UPDATE, DELETE, RULE, ALL
object- ชื่อของวัตถุที่จะให้สิทธิ์เข้าถึง วัตถุที่เป็นไปได้ ได้แก่ ตารางมุมมองลำดับ
PUBLIC - รูปแบบสั้น ๆ ที่แสดงถึงผู้ใช้ทั้งหมด
กลุ่ม group - กลุ่มที่ให้สิทธิ์
username- ชื่อผู้ใช้ที่จะให้สิทธิ์ PUBLIC เป็นรูปแบบสั้น ๆ ที่แสดงถึงผู้ใช้ทั้งหมด
สามารถเพิกถอนสิทธิ์ได้โดยใช้คำสั่ง REVOKE
ไวยากรณ์สำหรับ REVOKE
ไวยากรณ์พื้นฐานสำหรับคำสั่ง REVOKE มีดังนี้ -
REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
privilege - ค่าอาจเป็น: SELECT, INSERT, UPDATE, DELETE, RULE, ALL
object- ชื่อของวัตถุที่จะให้สิทธิ์เข้าถึง วัตถุที่เป็นไปได้ ได้แก่ ตารางมุมมองลำดับ
PUBLIC - รูปแบบสั้น ๆ ที่แสดงถึงผู้ใช้ทั้งหมด
กลุ่ม group - กลุ่มที่ให้สิทธิ์
username- ชื่อผู้ใช้ที่จะให้สิทธิ์ PUBLIC เป็นรูปแบบสั้น ๆ ที่แสดงถึงผู้ใช้ทั้งหมด
ตัวอย่าง
เพื่อทำความเข้าใจเกี่ยวกับสิทธิพิเศษให้เราสร้าง USER ก่อนดังนี้ -
testdb=# CREATE USER manisha WITH PASSWORD 'password';
CREATE ROLE
ข้อความ CREATE ROLE ระบุว่ามีการสร้าง USER "manisha"
พิจารณาตารางCOMPANY ที่มีบันทึกดังนี้ -
testdb# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
ต่อไปให้เรามอบสิทธิพิเศษทั้งหมดบนโต๊ะ COMPANY ให้กับผู้ใช้ "manisha" ดังนี้ -
testdb=# GRANT ALL ON COMPANY TO manisha;
GRANT
ข้อความ GRANT ระบุว่ามีการกำหนดสิทธิ์ทั้งหมดให้กับ USER
ต่อไปให้เราเพิกถอนสิทธิพิเศษจาก USER "manisha" ดังนี้ -
testdb=# REVOKE ALL ON COMPANY FROM manisha;
REVOKE
ข้อความ REVOKE ระบุว่าสิทธิ์ทั้งหมดถูกเพิกถอนจาก USER
คุณสามารถลบผู้ใช้ดังต่อไปนี้ -
testdb=# DROP USER manisha;
DROP ROLE
ข้อความ DROP ROLE ระบุว่า USER 'Manisha' ถูกลบออกจากฐานข้อมูล