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 Bảng 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
Bảng 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!