通常會碰到資料庫”權限"的人會是DBA,或者工程師兼了DBA的工作 :(
在安全軟體開發週期的觀念中(SSDLC),資料庫權限應設置最小權限為原則。
假設你在一個20人團隊當中開發,如果每個系統所使用的資料庫資料表,
沒有進行權限控管,那麼就意味著資料可能隨意被仇人偷窺更改刪除。
接著就讓我們來一步一步學習創立跟授權吧!
建立資料庫
CREATE DATABASE ithome2022;
建立資料表
CREATE TABLE byg (
id SERIAL PRIMARY KEY,
first_name varchar(100) NOT NULL,
last_name varchar(100) NOT NULL,
email varchar(255) NOT NULL UNIQUE,
phone varchar(25) NOT NULL,
);
建立角色
CREATE ROLE maoan LOGIN PASSWORD 'Byg@1116';
使用建立的角色(maoan)來嘗試一下查詢資料看看
SELECT * FROM byg;
結果發現沒有權限
permission denied for table byg
用可以執行授權的帳號(postgres),進行授權角色(maoan)有資料表(byg)的查詢權限(SELECT)
GRANT SELECT ON byg TO maoan;
再次執行查詢,發現回傳空值,這是正常的,因為這張表還沒有資料,但是可以確認角色已經具備查詢權限了!
SELECT * FROM byg;
接著再來使用建立的角色(maoan)來嘗試一下寫入資料看看
INSERT INTO byg(first_name, last_name, email, phone)
VALUES('茂安','簡','maoan@byg.com','3345678');
果然也是如預期的顯示沒有權限
permission denied for table byg
再把角色(maoan)授權寫入資料
GRANT INSERT ON byg TO mao,這
再插入一次,這次預期要成功了吧?
INSERT INTO byg(first_name, last_name, email, phone)
VALUES('茂安','簡','maoan@byg.com','3345678');
沒有,失敗了,就為了薛你這個老狐狸! (可惡,中計了)
因為 postgreSQL 必須要再授權 sequence
permission denied for sequence byg_id_seq
進行授權,結果資料被正確寫入了!
GRANT USAGE, SELECT ON SEQUENCE byg_id_seq TO maoan;
對於尚未就職自己練習的資料庫新手而言,授權是個常常被忽略的主題,
上述的例子只是一個超級簡單的範例,一方面是適合這個系列,
另一方面是我自己對於這塊也很弱,再挑了幾篇比較淺顯易懂的內容,
提供給想多看看這個主題的人。
https://github.com/pgsql-tw/notebook/blob/master/01_User%20Privileges.ipynb
https://pjchender.dev/database/psql-roles-privilege/
https://tableplus.com/blog/2018/04/postgresql-how-to-grant-access-to-users.html