PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Quyền của người dùng PostgreSQL

Trong PostgreSQL, tất cả được xây dựng xung quanh khái niệm vai trò .

Khi lần đầu tiên cài đặt PostgreSQL trên macOS, tập lệnh đã tạo một vai trò với tên người dùng macOS của bạn , với một danh sách các quyền được cấp.

Không có người dùng nào trong PostgreSQL, chỉ có vai trò .

Bằng cách chạy psql postgres trong thiết bị đầu cuối của mình, bạn sẽ tự động đăng nhập bằng tên người dùng macOS của mình vào PostgreSQL, do đó, truy cập vào vai trò đã tạo.

Trong trường hợp của tôi, flaviocopes vai trò đã được tạo và tôi có thể thấy nó bằng cách sử dụng \du lệnh:

Xem? Tôi có các thuộc tính vai trò sau theo mặc định:

  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

và tôi không phải là thành viên của bất kỳ vai trò nào khác (sẽ nói thêm về điều này sau)

Tạo vai trò mới

Một vai trò mới được tạo bằng cách sử dụng CREATE ROLE lệnh:

CREATE ROLE <role>;

Ví dụ:

CREATE ROLE testing;

Chúng tôi có một vai trò mới, với Cannot login thuộc tính vai trò. Người dùng mới được tạo của chúng tôi sẽ không thể đăng nhập.

Bạn có thể thử bằng cách nhập \q và sau đó psql postgres -U testing , nhưng bạn sẽ thấy lỗi này:

Để khắc phục sự cố này, chúng ta phải thêm LOGIN thuộc tính vai trò khi tạo:

CREATE ROLE <role> WITH LOGIN;

Nếu chúng tôi xóa vai trò đó bằng cách sử dụng:

DROP ROLE <role>;

và thêm WITH LOGIN lúc này:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

Chúng ta có thể thấy rằng testing vai trò có thể đăng nhập, bởi vì chúng tôi không có Cannot login thuộc tính vai trò lần này:

Hãy thử bằng cách thêm lệnh \q để thoát và sau đó psql postgres -U testing :

Lưu ý rằng dấu nhắc đã thay đổi từ =# thành => bởi vì chúng tôi không có Superuser thuộc tính vai trò bây giờ.

Thêm mật khẩu vào một vai trò

Trong CREATE ROLE trước lệnh chúng tôi đã tạo một vai trò mà không cần mật khẩu. Tất nhiên, điều rất quan trọng là phải có mật khẩu (an toàn). Bạn có thể thêm mật khẩu bằng cách sử dụng PASSWORD từ khóa:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

TẠO NGƯỜI DÙNG

Một cách thay thế để xác định vai trò với LOGIN thuộc tính được thêm tự động (tạo hiệu quả người dùng có thể đăng nhập) là sử dụng CREATE USER :

CREATE USER <role> PASSWORD '<password>';

Thêm thuộc tính vai trò vào vai trò

Sau này, một thuộc tính vai trò có thể được thêm vào một vai trò bằng cách sử dụng ALTER ROLE lệnh.

Giả sử chúng ta đã tạo một vai trò mà không có thuộc tính LOGIN:

CREATE ROLE <username> PASSWORD '<password>';

Chúng tôi có thể thêm nó bằng cách sử dụng:

ALTER ROLE <role> WITH LOGIN;

Thuộc tính vai trò tích hợp

Chúng tôi đã thấy LOGIN đã có thuộc tính vai trò, để cho phép một vai trò đăng nhập.

Nhưng các thuộc tính vai trò tích hợp sẵn khác mà chúng ta có thể sử dụng là gì?

  • LOGIN / NOLOGIN :cho phép (hoặc không) đăng nhập vào PostgreSQL
  • SUPERUSER / NOSUPERUSER :cho phép (hoặc không) quyền của người dùng cấp trên. Một siêu người dùng cơ sở dữ liệu sẽ bỏ qua các kiểm tra quyền khác, ngoại trừ LOGIN (nó phải được cấp riêng).
  • CREATEDB / NOCREATEDB :cho phép (hoặc không) khả năng tạo cơ sở dữ liệu mới
  • CREATEROLE / NOCREATEROLE :cho phép (hoặc không) khả năng tạo vai trò mới
  • CREATEUSER / NOCREATEUSER :cho phép (hoặc không) khả năng tạo người dùng mới
  • INHERIT / NOINHERIT :cho phép (hoặc không) khả năng làm cho các đặc quyền có thể kế thừa
  • REPLICATION / NOREPLICATION :cấp (hoặc không) quyền sao chép (một chủ đề nâng cao mà chúng tôi sẽ không đề cập đến)

Vai trò nhóm

Trong PostgreSQL, không có nhóm người dùng nào.

Thay vào đó, bạn có thể tạo các vai trò với các quyền nhất định, rồi cấp các vai trò đó cho các vai trò khác.

Các vai trò sẽ kế thừa các quyền của các vai trò được cấp cho chúng, nếu các vai trò đó có thuộc tính INHERIT.

Tạo vai trò trong nhóm

Để tạo vai trò nhóm, hãy nhập

CREATE ROLE <groupname>;

Cú pháp giống như tạo một vai trò.

Sau khi vai trò nhóm được tạo, bạn có thể thêm vai trò vào vai trò nhóm bằng cách sử dụng GRANT :

GRANT <groupname> TO <role>

Ví dụ:chúng ta có thể tạo một flavio vai trò người dùng, vai trò nhóm “nhân viên” và chỉ định người dùng vào vai trò nhóm:

CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;

Bạn có thể xóa một vai trò khỏi một vai trò nhóm bằng cách sử dụng:

REVOKE <groupname> FROM <username>

Ví dụ:

REVOKE employee FROM flavio;

Thuộc tính vai trò nhóm

Theo mặc định, việc thêm một vai trò vào một vai trò nhóm sẽ không làm cho vai trò kế thừa các thuộc tính (quyền) từ vai trò nhóm.

Bạn cần tạo vai trò nhóm với INHERIT thuộc tính.

Giả sử bạn tạo vai trò nhóm nhân viên và gán cho vai trò đó là CREATEDB thuộc tính:

CREATE ROLE employee WITH CREATEDB INHERIT;

Bây giờ, hãy tạo một vai trò mới bằng cách sử dụng INHERIT :

CREATE ROLE flavio;
GRANT employee TO flavio;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép một vài cột của tệp csv vào bảng

  2. Tên bảng JPA viết hoa

  3. Cài đặt PostgreSQL trên Ubuntu 20.04

  4. Gọi một hàm trả về tập hợp với một đối số mảng nhiều lần

  5. Chọn (truy xuất) tất cả các bản ghi từ nhiều lược đồ bằng Postgres