Tạo xoá và phân quyền user trong PostgreSQL

Tạo xoá và phân quyền user trong PostgreSQL

A./ Tạo và phân quyền User

1./ Tạo User

create user myuser with encrypted password 'AK07VXMIdw00EUY9g6Xt';

2./ Phân quyền cho user có Full​​ quyền của 1 Database

grant ALL on DATABASE DBName to myuser;

Phân quyền cho user có Full quyền của tất cả​​ Table với Schema public

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;

3./ Kiểm tra lại phân quyền

\l

hoặc

\l+

Trong cột​​ Access privileges

sẽ​​ có mục​​ myuser=CTc/postgres

Như vậy là đã phân quyền thành công cho user myuser có Full quyền trong database mydb

Có thể​​ tham khảo bảng sau tóm tắt các quyền truy cập của user

Object Type

All Privileges

Default PUBLIC Privileges

psql Command

DATABASE

CTc

Tc

\l

DOMAIN

U

U

\dD+

FUNCTION or PROCEDURE

X

X

\df+

FOREIGN DATA WRAPPER

U

none

\dew+

FOREIGN SERVER

U

none

\des+

LANGUAGE

U

U

\dL+

LARGE OBJECT

rw

none

 

SCHEMA

UC

none

\dn+

SEQUENCE

rwU

none

\dp

TABLE (and table-like objects)

arwdDxt

none

\dp

Table column

arwx

none

\dp

TABLESPACE

C

none

\db+

TYPE

U

U

\dT+

#​​ https://www.postgresql.org/docs/12/ddl-priv.html

B./ Revoke quyền User

1./ Revoke quyền User với​​ Database

Các privileges cũng được update bởi​​ Bng Privileges​​ 

Ví dụ

REVOKE ALL ON DATABASE mydb FROM myuser;

 

2./ Revoke quyền user đối với Tables

Ví dụ:​​ 

REVOKE privileges ON object FROM user;

 

Các privileges được định nghĩa​​ ​​ bảng dưới

Bng Privileges​​ 

The privileges to revoke. It can be any of the following values:

Privilege

Description

SELECT

Ability to perform SELECT statements on the table.

INSERT

Ability to perform INSERT statements on the table.

UPDATE

Ability to perform UPDATE statements on the​​ table.

DELETE

Ability to perform DELETE statements on the table.

TRUNCATE

Ability to perform TRUNCATE statements on the table.

REFERENCES

Ability to create foreign keys (requires privileges on both parent and child tables).

TRIGGER

Ability to create​​ triggers on the table.

CREATE

Ability to perform CREATE TABLE statements.

ALL

Grants all permissions.

Ví dụ

For example, if you wanted to revoke DELETE and UPDATE privileges on a table called products from a user named techonthenet, you would run the​​ following REVOKE statement:

REVOKE DELETE, UPDATE ON products FROM techonthenet;

If you wanted to revoke all permissions on a table for a user named techonthenet, you could use the ALL keyword as follows:

REVOKE ALL ON products FROM techonthenet;

If you had granted SELECT privileges to * (ie: all users) on the products table and you wanted to revoke these privileges, you could run the following REVOKE statement:

REVOKE SELECT ON products FROM PUBLIC;

#​​ https://www.techonthenet.com/postgresql/grant_revoke.php

 

C./ Lệnh thường dùng Grant, Revoke Permission

1. Grant CONNECT to the database:

GRANT CONNECT ON DATABASE database_name TO username;

2./ Grant USAGE on schema:

GRANT USAGE ON​​ SCHEMA schema_name TO username;

3./ Grant on all tables for DML statements: SELECT, INSERT, UPDATE, DELETE:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_name TO username;

4./ Grant all privileges on all tables in the schema:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO username;

5./ Grant all privileges on all sequences in the schema:

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name TO username;

6./ Grant all privileges on the database:

GRANT ALL PRIVILEGES​​ ON DATABASE database_name TO username;

7./ Grant permission to create database:

ALTER USER username CREATEDB;

8./ Make a user superuser:

ALTER USER myuser WITH SUPERUSER;

9./ Remove superuser status:

ALTER USER username WITH NOSUPERUSER;

Those statements above only affect the current existing tables. To apply to newly created tables, you need to use alter default. For example:

ALTER DEFAULT PRIVILEGES

FOR USER username

IN SCHEMA schema_name

GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO username;

10./ Grant user to user:

GRANT USERA TO USERB;

Với UserA là cha của UserB. UserB cần kế thừa hết các quyền của userA

#​​ https://tableplus.com/blog/2018/04/postgresql-how-to-grant-access-to-users.html

D./ Delete user trong PostgreSQL

Khi drop user chỉ​​ thực hiện thành công khi mọi quyền với Database hoặc tables được xoá bỏ​​ trước.

DROP OWNED BY myuser;

Tiếp theo có thể​​ Drop user mà không bị​​ lỗi.

DROP USER [ IF EXISTS ] name [, ...]

ví dụ

DROP USER myuser;

Tổng kết:

sau khi restore hoặc tạo 1 DB mới, bạn muốn chown toàn bộ quyền của DB mới, tables trong DB mới cho user cần làm như sau:

create database DB_new;

grant ALL on DATABASE DB_new to user_new;

\c DB_new

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user_new;

GRANT ALL PRIVILEGES ON ALL SEQUENCES ​​ IN SCHEMA public TO​​ user_new;

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO​​ user_new;

Nếu vẫn lỗi thì có thể Grant all permission của User postgres cho 1 user_new

GRANT postgres TO user_new;

 

Chúc các bạn thành công!

SaKuRai

Xin chào, Mình là Sakurai. Blog này là nơi để note lại và chia sẻ những kiến thức, kinh nghiệm mà mình và anh em trong Team. Cảm ơn các bạn đã quan tâm theo dõi!

You may also like...

Leave a Reply