SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Bảo	mật	Postgresql
cuong@techmaster.vn
http://techmaster.vn
Giáo	trình	đào	tạo	quản	trị	cơ	sở	dữ	liệu	
tại	Techmaster.	Học	là	có	việc	!
Postgresql security
Kinh	nghiệm	sương	máu	cho	mấy	tay lười
• Postgresql có 1 super user postgres quyền năng tối cao.Tuyệt đối
không dùng để kết nối từ ứng dụng. Hãy đặt password phức tạp,
khó hack cho postgres
• Dùng role postgres tạo ra các db_admin.
• Dùng dbamin tạo ra database
Role	cho	web	app
Một web app cần có tối thiểu 2 role, db là tên database
• db_admin: database owner, table owner, connect. Dùng để
migrate
• db_user: quyền SELECT, UPDATE, INSERT, DELETE,
REFERENCE lên các bảng. Dùng để connect từ web app
• Hạn chế dùng db_admin để thay đổi dữ liệu, hãy dùng nó để tạo
bảng, tạo function, tạo view quá migration script
• Luôn dùng db_user để truy vấn, sửa dữ liệu
Role	truy	vấn	dữ	liệu	nhạy	cảm
• Đối với dữ liệu nhạy cảm, nên có role riêng để
tạo schema riêng.
• Trong schema riêng, role đó tạo bảng, truy vấn
dữ liệu nhạy cảm, revoke mọi quyền của
db_admin hay db_user vào bảng đó
• Áp dụng bảo mật cột Row Level Security
Kiểm	tra	owner	của	bảng	và	table
SELECT d.datname AS "Db"
, pg_catalog.pg_get_userbyid(d.datdba) AS "Owner"
FROM pg_catalog.pg_database d
WHERE d.datname = 'dvdrental'
Kiểm tra owner của bảng cụ thể
Kiểm tra owner của database cụ thể
SELECT * FROM pg_tables WHERE schemaname = 'public' AND
tablename = 'film';
Truy	vấn	quyền
Kiểm tra quyền của một user với một database cụ thể, một schema cụ thể
SELECT * FROM information_schema.role_table_grants
WHERE grantee ='dev' AND table_catalog = 'dvdrental'
AND table_schema ='public';
Liệt kê tất cả các role đang có quyền vào một schema của một database cụ thể
SELECT DISTINCT grantee FROM
information_schema.role_table_grants
WHERE table_catalog = 'dvdrental' AND table_schema ='public';
Tước	bớt	quyền
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM public, userx,
usery;
Tước	quyền	tác	động	vào	database	chưa	đảm	bảo	loại	bỏ	quyền	lên	các	đối	
tượng	trong	database	đó.	Quyền	lên	database	chỉ	gồm	CREATE,	CONNECT,	TEMP
REVOKE ALL ON DATABASE dvdrental FROM public;
Tước	quyền	tác	động	vào	các	bảng	ở	schema	của	public,	userx,	usery
Tước	xong	vẫn	phải	truy	vấn	lại	cho	chắc	chắn	!
> postgres role
CREATE ROLE cia_admin CREATEDB CREATEROLE LOGIN;
ALTER ROLE cia_admin ENCRYPTED PASSWORD 'abc';
CREATE DATABASE cia OWNER cia_admin;
REVOKE ALL ON DATABASE cia FROM public;
> cia_admin role
CREATE TABLE agent (id SERIAL PRIMARY KEY, name TEXT UNIQUE NOT
NULL);
CREATE ROLE cia_user LOGIN ENCRYPTED PASSWORD 'abc';
GRANT CONNECT ON DATABASE cia TO cia_user;
GRANT ALL ON TABLE agent TO cia_user;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO cia_user;
> cia_user role
INSERT INTO agent (name) VALUES ('thu');
SELECT * FROM agent;
DROP TABLE agent; //failed ! Only table owner or super user can
drop
Chi	tiết	về	bảo	mật
Các	lệnh
• CREATE <> DROP
• GRANT <> REVOKE
• ALTER
• SET
Quyền	hạn	mức	Role,	Group
Role Mô tả
SUPERUSER <> NOSUPERUSER Đặc quyền	cao	nhất,	nguy	hiểm	nhất
CREATEDB <> NOCREATEDB Được tạo	database	mới
CREATEROLE <> NOCREATEROLE Được tạo	ra	role	mới
INHERIT <> NOINHERIT Kế thừa	role
LOGIN <> NOLOGIN Được	login	hay	không
REPLICATION <> NOREPLICATION Có được	replicate	với	CSDL	khác	hay	không
BYPASSRLS <> NOBYPASSRLS Bỏ qua	bảo	mật	dòng	ROW	SECURITY
CONNECTION LIMIT connlimit Giới hạn	số	kết	nối	đồng	thời,	-1	là	không	giới	hạn
PASSWORD password
ENCRYPTED <> UNENCRYPTED Mã hóa	password
VALID UNTIL 'timestamp' Thời hạn	của	role
SUPERUSER vượt trên mọi đặc quyền
và giới hạn, chỉ nên có 1
SUPERUSER có password bảo mật cao
nhất
Luôn	dùng	lệnh	du để	kiểm	tra	quyền	hạn	của	các	role
SUPERUSER ưu	tiên	cao	hơn	INHERIT,	CREATEROLE,	
CREATEDB
Nhưng	bị	vô	hiệu	bởi	NOLOGIN
CREATE ROLE jack WITH LOGIN PASSWORD 'abc'
VALID UNTIL '2018-01-01';
ALTER ROLE jack CREATEROLE CREATEDB;
ALTER ROLE jack NOLOGIN;
DROP ROLE jack;
SELECT * FROM pg_roles;
+-----------+------------+--------------+-----------------+---------------+
| rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb |
|-----------+------------+--------------+-----------------+---------------+
| postgres | True | True | True | True |
| huong | False | True | False | False |
| hack | False | True | False | False |
| dev | False | True | True | False |
| cuong | False | True | False | False |
+-----------+------------+--------------+-----------------+---------------+
du
ROLE	và	GROUP
role	và	group	tương	đương	nhau
• Đều sử dụng lệnh CREATE ROLE
• Để	phân	biệt	ROLE	với	GROUP
– Luôn	đặt	tên	group	với	hậu	tố	_group	ví	dụ	
admin_group,	createdb_group
– Không	gán	đặc	quyền	login	cho	group!
– Role	group	cần	INHERIT
postgres@host:db> CREATE ROLE admin_group WITH CREATEDB
CREATEROLE;
-- admin_group có INHERIT -> role thuộc nó kế thừa đặc quyền
postgres@host:db> GRANT admin_group to dev;
--connect as dev role
pgcli -h host -U dev -W -d db
dev@host:db> CREATE ROLE fun;
permission denied to create role
-- phải chuyển sang role admin_group mới được !
dev@host:db> SET ROLE admin_group;
dev@host:db> CREATE ROLE fun;
-- success !
CREATE ROLE oper CREATEDB ADMIN postgres CREATEROLE ;
-- Drop nhiều role cùng một lúc cách ra bằng dầu phẩy
DROP ROLE funrole, sadrole;
SET ROLE specificrole
Super user dùng SET ROLE để kiểm tra
việc phân quyền có đúng không mà không
cần login bằng role đó
postgres@host:db> GRANT admin_group TO dev;
-- successful
postgres@host:db> GRANT dev TO admin_group;
role "dev" is a member of role "admin_group"
-- Không thể gán vòng quanh được
Quyền	truy	xuất	vào	các	đối	tượng
Cú	pháp	lệnh	GRANT
Gán quyền gì vào đối tượng nào
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE |
REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [
TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name
[, ...] } TO a_role [, ...] [ WITH GRANT OPTION ]
{ } nhóm quyền hay đối tượng áp dụng. Dùng ALL để chọn tất
[, ...] có thể một hoặc nhiều
[…] có thể bỏ qua
WITH GRANT OPTION có thể gán lại cho role khác
GRANT
• SELECT, INSERT, UPDATE, DELETE,TRUNCATE, REFERENCES,TRIGGER
ONTABLE
• CREATE, CONNECT,TEMP ON DATABASE
• CONNECT login khác với connect ở điểm, phải login được rồi mới connect vào
db
• TEMP quyền được tạo bảng tạm thời
• EXECUTE quyền thực thi hàm
• USAGE
Cấm	truy	cập	truy	cập	REVOKE	CONNECT
-- Cấm user dev truy cập CSDL dvdrental
postgres@host:dvdrental> REVOKE CONNECT ON DATABASE dvdrental
FROM dev;
-- Cấm tất các user truy cập CSDL dvdrental
postgres@host:dvdrental> REVOKE CONNECT ON DATABASE dvdrental
FROM PUBLIC;
-- Kết nối vào dvdrental bằng role dev
pgcli -h host -U dev -W -d dvdrental
FATAL: permission denied for database "dvdrental"
DETAIL: User does not have CONNECT privilege.
Cấp	quyền	truy	cập	GRANT	CONNECT
-- Cho phép dev truy cập CSDL dvdrental
postgres@host:dvdrental> GRANT CONNECT ON DATABASE dvdrental TO
dev;
-- Kết nối vào dvdrental bằng role dev
pgcli -h host -U dev -W -d dvdrental
-- Success !
-- xóa toàn bộ quyền lợi của role dev
DROP OWNED BY dev;
SET ROLE dev;
SELECT * FROM actor;
permission denied for relation actor
Vô	hiệu	mọi	quyền	của	một	role
Loại	bỏ	quyền	trên	tất	cả	các	bảng
-- Cấm dev xóa dòng trên tất cả các bảng thuộc
schema payroll
postgres@host:dvdrental> REVOKE DELETE ON ALL
TABLES IN SCHEMA payroll FROM dev;
-- Gỡ mọi quyền lên tất cả các bảng trong
schema public ra khỏi public user
postgres@host:dvdrental> REVOKE ALL ON ALL
TABLES IN SCHEMA public FROM PUBLIC;
-- Gán SELECT, UPDATE, INSERT cho dev bảng
actor trong dvdrental
postgres@host:dvdrental> GRANT SELECT, UPDATE,
INSERT ON actor TO dev;
dev@host:dvdrental> SELECT * FROM actor;
-- Giờ có thể truy vấn được rồi nhưng không
DELETE được
Phân	quyền	vào	bảng
-- Gán quyền cho nhiều bảng cùng một lúc
GRANT SELECT, UPDATE, INSERT ON actor, film TO dev;
GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA public TO
dev;
Phần	quyền	vào	nhiều	bảng
SELECT * FROM
information_schema.role_table_grants
WHERE grantee='dev' AND table_name = 'users';
Liệt	kê	quyền	của	user	đến	1	bảng	cụ	thể
Có	GRANT/REVOKE	quyền	CREATE/DROP	được	không?
• Chỉ có owner và role super user mới có quyền
drop table, function
• Muốn chuyển owner?
ALTER FUNCTION foo() OWNER TO dev;
ALTER TABLE foo OWNER TO dev;
Row	Level	Security	– bảo	mật	dòng
Bảng user có cột password cần phải được mã hóa và giới hạn user
truy cập.
Chỉ có user sys mới có thể truy cập, các user khác không được truy
vấn cột password
Cấm	select	password	với	role	dev
REVOKE SELECT ON users FROM dev;
GRANT SELECT (id, email) ON users TO dev;
SET ROLE dev;
SELECT password FROM users;
permission denied for relation users
-- Lệnh này thì ok
dev@host:dvdrental> SELECT id, email FROM
user;
Tóm	tắt	Row	Level	Security
• ALTER ROLE
– NOBYPASSRLS cấm pgdump xuất các cột được bảo về bởi
RLS
– BYPASSRLS cho phép pgdump xuất hết các cột kể cả cột
bật RLS
• GRANT / REVOKE RLS đến từng cột trong bảng
• ALTERTABLE
– ENABLE ROW LEVEL SECURITY áp dụng policy
– DISABLE ROW LEVEL SECURITY bỏ qua policy
– FORCE ROW LEVEL SECURITY áp dụng RLS kể cả với table owner
– NO FORCE ROW LEVEL SECURITY không áp dụng RLS với table owner
pg_dump	rất	nguy	hiểm.	Table	có	thể	
có	RLS	nhưng	nó	vẫn	xuất	được	row	
có	security,	do	đó	cần	bật	
NOBYPASSRLS để	chống	lại	pg_dump
ALTER ROLE dev NOBYPASSRLS;
-- Áp dụng POLICY RLS vào bảng
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
-- Áp dụng RLS kể cả với owner của bảng
ALTER TABLE users FORCE ROW LEVEL SECURITY;
ALTER	TABLE	ENABLE	/	DISABLE	ROW	LEVEL	SECURITY

Más contenido relacionado

La actualidad más candente

All of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL DeveloperAll of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL DeveloperJeff Smith
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performancePostgreSQL-Consulting
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsCommand Prompt., Inc
 
Tài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 Fithou
Tài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 FithouTài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 Fithou
Tài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 FithouTú Cao
 
ProxySQL in the Cloud
ProxySQL in the CloudProxySQL in the Cloud
ProxySQL in the CloudRené Cannaò
 
MariaDB MaxScale
MariaDB MaxScaleMariaDB MaxScale
MariaDB MaxScaleMariaDB plc
 
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverBài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverMasterCode.vn
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?Mydbops
 
MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxNeoClova
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
REDIS intro and how to use redis
REDIS intro and how to use redisREDIS intro and how to use redis
REDIS intro and how to use redisKris Jeong
 
Advanced Schema Design Patterns
Advanced Schema Design Patterns Advanced Schema Design Patterns
Advanced Schema Design Patterns MongoDB
 
EDB Postgres DBA Best Practices
EDB Postgres DBA Best PracticesEDB Postgres DBA Best Practices
EDB Postgres DBA Best PracticesEDB
 
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...Jean-François Gagné
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
Hive Authorization
Hive AuthorizationHive Authorization
Hive AuthorizationMinwoo Kim
 

La actualidad más candente (20)

Get to know PostgreSQL!
Get to know PostgreSQL!Get to know PostgreSQL!
Get to know PostgreSQL!
 
All of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL DeveloperAll of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL Developer
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performance
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System Administrators
 
Tài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 Fithou
Tài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 FithouTài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 Fithou
Tài liệu hướng dẫn quản lý user, phân quyền trong Ubuntu (linux) - 10B4 Fithou
 
ProxySQL in the Cloud
ProxySQL in the CloudProxySQL in the Cloud
ProxySQL in the Cloud
 
MariaDB MaxScale
MariaDB MaxScaleMariaDB MaxScale
MariaDB MaxScale
 
Query logging with proxysql
Query logging with proxysqlQuery logging with proxysql
Query logging with proxysql
 
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverBài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?
 
MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptx
 
Liquibase
LiquibaseLiquibase
Liquibase
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
REDIS intro and how to use redis
REDIS intro and how to use redisREDIS intro and how to use redis
REDIS intro and how to use redis
 
Advanced Schema Design Patterns
Advanced Schema Design Patterns Advanced Schema Design Patterns
Advanced Schema Design Patterns
 
EDB Postgres DBA Best Practices
EDB Postgres DBA Best PracticesEDB Postgres DBA Best Practices
EDB Postgres DBA Best Practices
 
Curso de MySQL 5.7
Curso de MySQL 5.7Curso de MySQL 5.7
Curso de MySQL 5.7
 
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
Hive Authorization
Hive AuthorizationHive Authorization
Hive Authorization
 

Destacado

Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgresTechMaster Vietnam
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tếTechMaster Vietnam
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and AuthorizationTechMaster Vietnam
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTechMaster Vietnam
 
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterChương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterTechMaster Vietnam
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTTechMaster Vietnam
 
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowPrototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowTechMaster Vietnam
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012TechMaster Vietnam
 

Destacado (17)

Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tế
 
Knex Postgresql Migration
Knex Postgresql MigrationKnex Postgresql Migration
Knex Postgresql Migration
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and Authorization
 
Minimum Viable Products
Minimum Viable ProductsMinimum Viable Products
Minimum Viable Products
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tới
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMasterChương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
Chương trình thực tập chuyên sâu dành cho học viên khóa iOS tại TechMaster
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTT
 
Making a living
Making a livingMaking a living
Making a living
 
Phalcon căn bản
Phalcon căn bảnPhalcon căn bản
Phalcon căn bản
 
Phalcon introduction
Phalcon introductionPhalcon introduction
Phalcon introduction
 
Prototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch FlowPrototyping giao diện sử dụng Expression Blend Sketch Flow
Prototyping giao diện sử dụng Expression Blend Sketch Flow
 
iOS Master - Detail & TabBar
iOS Master - Detail & TabBariOS Master - Detail & TabBar
iOS Master - Detail & TabBar
 
Slide that wins
Slide that winsSlide that wins
Slide that wins
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012
 

Similar a Postgresql security

Similar a Postgresql security (7)

2.3 quan ly truy cap
2.3 quan ly truy cap2.3 quan ly truy cap
2.3 quan ly truy cap
 
Slide 1.pdf
Slide 1.pdfSlide 1.pdf
Slide 1.pdf
 
3. phan quyen trong sql server 01012010
3. phan quyen trong sql server 010120103. phan quyen trong sql server 01012010
3. phan quyen trong sql server 01012010
 
He thong chiu tai cao
He thong chiu tai caoHe thong chiu tai cao
He thong chiu tai cao
 
Hdubuntu
HdubuntuHdubuntu
Hdubuntu
 
Yii
YiiYii
Yii
 
Golang web database3
Golang web database3Golang web database3
Golang web database3
 

Más de TechMaster Vietnam

Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservicesTechMaster Vietnam
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differentlyTechMaster Vietnam
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXTechMaster Vietnam
 
Day0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSDay0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSTechMaster Vietnam
 
Apple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionApple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionTechMaster Vietnam
 
Sinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiSinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiTechMaster Vietnam
 

Más de TechMaster Vietnam (12)

Neural Network from Scratch
Neural Network from ScratchNeural Network from Scratch
Neural Network from Scratch
 
Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservices
 
Flutter vs React Native 2018
Flutter vs React Native 2018Flutter vs React Native 2018
Flutter vs React Native 2018
 
C đến C++ phần 1
C đến C++ phần 1C đến C++ phần 1
C đến C++ phần 1
 
Control structure in C
Control structure in CControl structure in C
Control structure in C
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differently
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
 
Day0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSDay0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOS
 
Apple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese versionApple iOS Memory Management - Vietnamese version
Apple iOS Memory Management - Vietnamese version
 
Sinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tớiSinh viên CNTT làm gì trong 5 năm tới
Sinh viên CNTT làm gì trong 5 năm tới
 
Windows 8 vs android 4
Windows 8 vs android 4Windows 8 vs android 4
Windows 8 vs android 4
 

Postgresql security

  • 3. Kinh nghiệm sương máu cho mấy tay lười • Postgresql có 1 super user postgres quyền năng tối cao.Tuyệt đối không dùng để kết nối từ ứng dụng. Hãy đặt password phức tạp, khó hack cho postgres • Dùng role postgres tạo ra các db_admin. • Dùng dbamin tạo ra database
  • 4. Role cho web app Một web app cần có tối thiểu 2 role, db là tên database • db_admin: database owner, table owner, connect. Dùng để migrate • db_user: quyền SELECT, UPDATE, INSERT, DELETE, REFERENCE lên các bảng. Dùng để connect từ web app • Hạn chế dùng db_admin để thay đổi dữ liệu, hãy dùng nó để tạo bảng, tạo function, tạo view quá migration script • Luôn dùng db_user để truy vấn, sửa dữ liệu
  • 5. Role truy vấn dữ liệu nhạy cảm • Đối với dữ liệu nhạy cảm, nên có role riêng để tạo schema riêng. • Trong schema riêng, role đó tạo bảng, truy vấn dữ liệu nhạy cảm, revoke mọi quyền của db_admin hay db_user vào bảng đó • Áp dụng bảo mật cột Row Level Security
  • 6. Kiểm tra owner của bảng và table SELECT d.datname AS "Db" , pg_catalog.pg_get_userbyid(d.datdba) AS "Owner" FROM pg_catalog.pg_database d WHERE d.datname = 'dvdrental' Kiểm tra owner của bảng cụ thể Kiểm tra owner của database cụ thể SELECT * FROM pg_tables WHERE schemaname = 'public' AND tablename = 'film';
  • 7. Truy vấn quyền Kiểm tra quyền của một user với một database cụ thể, một schema cụ thể SELECT * FROM information_schema.role_table_grants WHERE grantee ='dev' AND table_catalog = 'dvdrental' AND table_schema ='public'; Liệt kê tất cả các role đang có quyền vào một schema của một database cụ thể SELECT DISTINCT grantee FROM information_schema.role_table_grants WHERE table_catalog = 'dvdrental' AND table_schema ='public';
  • 8. Tước bớt quyền REVOKE ALL ON ALL TABLES IN SCHEMA public FROM public, userx, usery; Tước quyền tác động vào database chưa đảm bảo loại bỏ quyền lên các đối tượng trong database đó. Quyền lên database chỉ gồm CREATE, CONNECT, TEMP REVOKE ALL ON DATABASE dvdrental FROM public; Tước quyền tác động vào các bảng ở schema của public, userx, usery Tước xong vẫn phải truy vấn lại cho chắc chắn !
  • 9. > postgres role CREATE ROLE cia_admin CREATEDB CREATEROLE LOGIN; ALTER ROLE cia_admin ENCRYPTED PASSWORD 'abc'; CREATE DATABASE cia OWNER cia_admin; REVOKE ALL ON DATABASE cia FROM public; > cia_admin role CREATE TABLE agent (id SERIAL PRIMARY KEY, name TEXT UNIQUE NOT NULL); CREATE ROLE cia_user LOGIN ENCRYPTED PASSWORD 'abc'; GRANT CONNECT ON DATABASE cia TO cia_user; GRANT ALL ON TABLE agent TO cia_user; GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO cia_user;
  • 10. > cia_user role INSERT INTO agent (name) VALUES ('thu'); SELECT * FROM agent; DROP TABLE agent; //failed ! Only table owner or super user can drop
  • 12. Các lệnh • CREATE <> DROP • GRANT <> REVOKE • ALTER • SET
  • 14. Role Mô tả SUPERUSER <> NOSUPERUSER Đặc quyền cao nhất, nguy hiểm nhất CREATEDB <> NOCREATEDB Được tạo database mới CREATEROLE <> NOCREATEROLE Được tạo ra role mới INHERIT <> NOINHERIT Kế thừa role LOGIN <> NOLOGIN Được login hay không REPLICATION <> NOREPLICATION Có được replicate với CSDL khác hay không BYPASSRLS <> NOBYPASSRLS Bỏ qua bảo mật dòng ROW SECURITY CONNECTION LIMIT connlimit Giới hạn số kết nối đồng thời, -1 là không giới hạn PASSWORD password ENCRYPTED <> UNENCRYPTED Mã hóa password VALID UNTIL 'timestamp' Thời hạn của role
  • 15. SUPERUSER vượt trên mọi đặc quyền và giới hạn, chỉ nên có 1 SUPERUSER có password bảo mật cao nhất
  • 17. CREATE ROLE jack WITH LOGIN PASSWORD 'abc' VALID UNTIL '2018-01-01'; ALTER ROLE jack CREATEROLE CREATEDB; ALTER ROLE jack NOLOGIN; DROP ROLE jack;
  • 18. SELECT * FROM pg_roles; +-----------+------------+--------------+-----------------+---------------+ | rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | |-----------+------------+--------------+-----------------+---------------+ | postgres | True | True | True | True | | huong | False | True | False | False | | hack | False | True | False | False | | dev | False | True | True | False | | cuong | False | True | False | False | +-----------+------------+--------------+-----------------+---------------+ du
  • 20. role và group tương đương nhau • Đều sử dụng lệnh CREATE ROLE • Để phân biệt ROLE với GROUP – Luôn đặt tên group với hậu tố _group ví dụ admin_group, createdb_group – Không gán đặc quyền login cho group! – Role group cần INHERIT
  • 21. postgres@host:db> CREATE ROLE admin_group WITH CREATEDB CREATEROLE; -- admin_group có INHERIT -> role thuộc nó kế thừa đặc quyền postgres@host:db> GRANT admin_group to dev; --connect as dev role pgcli -h host -U dev -W -d db dev@host:db> CREATE ROLE fun; permission denied to create role -- phải chuyển sang role admin_group mới được ! dev@host:db> SET ROLE admin_group; dev@host:db> CREATE ROLE fun; -- success !
  • 22. CREATE ROLE oper CREATEDB ADMIN postgres CREATEROLE ; -- Drop nhiều role cùng một lúc cách ra bằng dầu phẩy DROP ROLE funrole, sadrole;
  • 23. SET ROLE specificrole Super user dùng SET ROLE để kiểm tra việc phân quyền có đúng không mà không cần login bằng role đó
  • 24. postgres@host:db> GRANT admin_group TO dev; -- successful postgres@host:db> GRANT dev TO admin_group; role "dev" is a member of role "admin_group" -- Không thể gán vòng quanh được
  • 26. Cú pháp lệnh GRANT Gán quyền gì vào đối tượng nào GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO a_role [, ...] [ WITH GRANT OPTION ] { } nhóm quyền hay đối tượng áp dụng. Dùng ALL để chọn tất [, ...] có thể một hoặc nhiều […] có thể bỏ qua WITH GRANT OPTION có thể gán lại cho role khác
  • 27. GRANT • SELECT, INSERT, UPDATE, DELETE,TRUNCATE, REFERENCES,TRIGGER ONTABLE • CREATE, CONNECT,TEMP ON DATABASE • CONNECT login khác với connect ở điểm, phải login được rồi mới connect vào db • TEMP quyền được tạo bảng tạm thời • EXECUTE quyền thực thi hàm • USAGE
  • 28. Cấm truy cập truy cập REVOKE CONNECT -- Cấm user dev truy cập CSDL dvdrental postgres@host:dvdrental> REVOKE CONNECT ON DATABASE dvdrental FROM dev; -- Cấm tất các user truy cập CSDL dvdrental postgres@host:dvdrental> REVOKE CONNECT ON DATABASE dvdrental FROM PUBLIC; -- Kết nối vào dvdrental bằng role dev pgcli -h host -U dev -W -d dvdrental FATAL: permission denied for database "dvdrental" DETAIL: User does not have CONNECT privilege.
  • 29. Cấp quyền truy cập GRANT CONNECT -- Cho phép dev truy cập CSDL dvdrental postgres@host:dvdrental> GRANT CONNECT ON DATABASE dvdrental TO dev; -- Kết nối vào dvdrental bằng role dev pgcli -h host -U dev -W -d dvdrental -- Success !
  • 30. -- xóa toàn bộ quyền lợi của role dev DROP OWNED BY dev; SET ROLE dev; SELECT * FROM actor; permission denied for relation actor Vô hiệu mọi quyền của một role
  • 31. Loại bỏ quyền trên tất cả các bảng -- Cấm dev xóa dòng trên tất cả các bảng thuộc schema payroll postgres@host:dvdrental> REVOKE DELETE ON ALL TABLES IN SCHEMA payroll FROM dev; -- Gỡ mọi quyền lên tất cả các bảng trong schema public ra khỏi public user postgres@host:dvdrental> REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC;
  • 32. -- Gán SELECT, UPDATE, INSERT cho dev bảng actor trong dvdrental postgres@host:dvdrental> GRANT SELECT, UPDATE, INSERT ON actor TO dev; dev@host:dvdrental> SELECT * FROM actor; -- Giờ có thể truy vấn được rồi nhưng không DELETE được Phân quyền vào bảng
  • 33. -- Gán quyền cho nhiều bảng cùng một lúc GRANT SELECT, UPDATE, INSERT ON actor, film TO dev; GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA public TO dev; Phần quyền vào nhiều bảng
  • 34. SELECT * FROM information_schema.role_table_grants WHERE grantee='dev' AND table_name = 'users'; Liệt kê quyền của user đến 1 bảng cụ thể
  • 35. Có GRANT/REVOKE quyền CREATE/DROP được không? • Chỉ có owner và role super user mới có quyền drop table, function • Muốn chuyển owner? ALTER FUNCTION foo() OWNER TO dev; ALTER TABLE foo OWNER TO dev;
  • 36. Row Level Security – bảo mật dòng Bảng user có cột password cần phải được mã hóa và giới hạn user truy cập. Chỉ có user sys mới có thể truy cập, các user khác không được truy vấn cột password
  • 37. Cấm select password với role dev REVOKE SELECT ON users FROM dev; GRANT SELECT (id, email) ON users TO dev; SET ROLE dev; SELECT password FROM users; permission denied for relation users -- Lệnh này thì ok dev@host:dvdrental> SELECT id, email FROM user;
  • 38. Tóm tắt Row Level Security • ALTER ROLE – NOBYPASSRLS cấm pgdump xuất các cột được bảo về bởi RLS – BYPASSRLS cho phép pgdump xuất hết các cột kể cả cột bật RLS • GRANT / REVOKE RLS đến từng cột trong bảng • ALTERTABLE – ENABLE ROW LEVEL SECURITY áp dụng policy – DISABLE ROW LEVEL SECURITY bỏ qua policy – FORCE ROW LEVEL SECURITY áp dụng RLS kể cả với table owner – NO FORCE ROW LEVEL SECURITY không áp dụng RLS với table owner
  • 40. -- Áp dụng POLICY RLS vào bảng ALTER TABLE users ENABLE ROW LEVEL SECURITY; -- Áp dụng RLS kể cả với owner của bảng ALTER TABLE users FORCE ROW LEVEL SECURITY; ALTER TABLE ENABLE / DISABLE ROW LEVEL SECURITY