iT邦幫忙

2022 iThome 鐵人賽

DAY 13
1

通常會碰到資料庫”權限"的人會是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


上一篇
Day 12 資料過濾
下一篇
Day 14 為什麼用VIEW
系列文
資料庫新手入門--以PostgreSQL為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言