Giới thiệu
PostgreSQL sử dụng các cơ chế khác nhau để triển khai xác thực, ủy quyền và quyền sở hữu đối tượng trong các cụm cơ sở dữ liệu. Cốt lõi trong số này là khái niệm về vai trò.
Các vai trò PostgreSQL là sự kết hợp các ý tưởng của người dùng và các nhóm thành một thực thể linh hoạt, duy nhất. Chúng là tính cách mà người dùng chấp nhận trong hệ thống cơ sở dữ liệu, là thực thể mà hệ thống xác thực chấp nhận hoặc từ chối các kết nối và đối tượng của các quy tắc quản lý đặc quyền của tất cả các phạm vi.
Hướng dẫn này sẽ trình bày các vai trò là gì và cách quản lý chúng trong một cụm cơ sở dữ liệu PostgreSQL. Cụ thể hơn, hướng dẫn này sẽ bao gồm quản lý vai trò vì nó liên quan đến các thuộc tính của vai trò. Để có cái nhìn tổng quan hơn về cách các vai trò phù hợp với bức tranh lớn hơn, hãy xem phần giới thiệu về hướng dẫn xác thực và ủy quyền. Để tìm hiểu cách thay đổi đặc quyền vai trò trên các đối tượng cơ sở dữ liệu cụ thể, hãy xem hướng dẫn của chúng tôi về cấp vai trò.
Vai trò là gì?
Trong PostgreSQL, một vai trò là một nhóm của một tập hợp các khả năng, quyền và các thực thể "được sở hữu" cụ thể. Thay vì có các khái niệm riêng biệt về "người dùng" và "nhóm", PostgreSQL sử dụng các vai trò để đại diện cho cả hai ý tưởng này. Một vai trò có thể tương ứng với một cá nhân trong thế giới thực hoặc nó có thể hoạt động như một nhóm với quyền truy cập nhất định mà các vai trò khác có thể trở thành thành viên.
Vai trò là điểm neo trong PostgreSQL xác định chính sách xác thực và ủy quyền áp dụng cho ai. Bất kỳ chính sách nào không được áp dụng phổ biến đều yêu cầu khái niệm danh tính để xác định ai hạn chế và ai cho phép. Trong PostgreSQL, danh tính này được thể hiện bằng các vai trò.
Hệ thống xác thực của PostgreSQL có một số thành phần khác nhau, mỗi thành phần được gắn với các vai trò. Để được sử dụng cho kết nối ban đầu với cụm cơ sở dữ liệu, trước tiên các vai trò phải có LOGIN
tập thuộc tính. Bản thân các quy tắc xác thực được xác định trong tệp cấu hình dựa trên máy chủ có tên pg_hba.conf
. Mỗi quy tắc xác định các phương pháp xác thực có thể được áp dụng cho từng vai trò. Đối với các vai trò được định cấu hình để xác thực mật khẩu, phải đặt thuộc tính mật khẩu để hệ thống có thể xác thực mật khẩu người dùng được cung cấp.
Về mặt phân quyền, các vai trò được định nghĩa ở cấp độ cụm cơ sở dữ liệu, trong PostgreSQL, có nghĩa là chúng được chia sẻ giữa các cơ sở dữ liệu. Vì các vai trò mở rộng cơ sở dữ liệu, hệ thống ủy quyền kiểm soát mức độ truy cập của mỗi vai trò đối với mỗi thực thể cơ sở dữ liệu. Vì các vai trò có thể đại diện cho các nhóm người, nên có rất nhiều tính linh hoạt trong cách cấu hình quyền truy cập.
Vai trò cũng rất cần thiết đối với khái niệm quyền sở hữu đối tượng trong PostgreSQL. Mỗi cơ sở dữ liệu và bảng, chẳng hạn, có chính xác một vai trò được định cấu hình làm chủ sở hữu. Khác với superusers
, vai trò chủ sở hữu là vai trò duy nhất có thể sửa đổi hoặc xóa đối tượng thực tế.
Tóm lại, vai trò là cốt lõi của hầu hết các hoạt động cơ sở dữ liệu thực tế. Tính linh hoạt của chúng cho phép chúng hoạt động cả với tư cách là mã định danh người dùng và lớp người dùng. Mọi hành động trong cụm cơ sở dữ liệu được kiểm tra dựa trên các đặc quyền của vai trò và sự thành công của mỗi kết nối với cụm cơ sở dữ liệu được xác định bởi vai trò mà người đó xác thực. Điều quan trọng là phải xử lý tốt việc quản lý vai trò vì tầm quan trọng của nó trong rất nhiều hoạt động cốt lõi.
Thuộc tính vai trò
Thuộc tính vai trò là các cờ trên chính vai trò xác định một số đặc quyền cốt lõi mà nó có ở cấp độ cụm cơ sở dữ liệu. Những điều này có thể được đặt khi vai trò được tạo ban đầu hoặc thay đổi bất kỳ lúc nào bởi bất kỳ vai trò nào có thuộc tính thích hợp (SUPERUSER
hoặc CREATEROLE
trong trường hợp này).
Các thuộc tính có thể được áp dụng cho một vai trò bao gồm:
-
LOGIN
:Cho phép người dùng kết nối ban đầu với cụm cơ sở dữ liệu bằng vai trò này.CREATE USER
lệnh tự động thêm thuộc tính này, trong khiCREATE ROLE
lệnh không. -
SUPERUSER
:Cho phép vai trò bỏ qua tất cả các kiểm tra quyền ngoại trừ quyền đăng nhập. ChỉSUPERUSER
khác các vai trò có thể tạo các vai trò với thuộc tính này. -
CREATEDB
:Cho phép vai trò tạo cơ sở dữ liệu mới. -
CREATEROLE
:Cho phép vai trò tạo, thay đổi và xóa các vai trò khác. Thuộc tính này cũng cho phép vai trò chỉ định hoặc thay đổi tư cách thành viên của vai trò. Một ngoại lệ là một vai trò vớiCREATEROLE
thuộc tính không thể thay đổiSUPERUSER
vai trò mà không cóSUPERUSER
thuộc tính. -
REPLICATION
:Cho phép vai trò bắt đầu sao chép luồng. Các vai trò có thuộc tính này cũng phải cóLOGIN
thuộc tính. -
PASSWORD
:Gán mật khẩu cho vai trò sẽ được sử dụng vớipassword
hoặcmd5
các cơ chế xác thực. Thuộc tính này lấy mật khẩu trong trích dẫn làm đối số ngay sau từ khóa thuộc tính. -
INHERIT
:Xác định xem vai trò có kế thừa các đặc quyền của các vai trò mà nó là thành viên hay không. Không cóINHERIT
, các thành viên phải sử dụngSET ROLE
chuyển sang vai trò khác để truy cập các đặc quyền riêng biệt đó. Thuộc tính này được đặt cho các vai trò mới theo mặc định.
Bạn có thể tìm hiểu thêm về các thuộc tính vai trò bằng cách xem tài liệu của PostgreSQL về các thuộc tính vai trò và CREATE ROLE
lệnh.
superuser
là gì vai trò?
Như đã đề cập ngắn gọn ở trên, một đặc quyền được gọi là superuser
cho phép truy cập quản trị không hạn chế vào cụm cơ sở dữ liệu. Điều này tương tự với root
tài khoản trong các hệ điều hành giống Linux và Unix, nhưng ở cấp cơ sở dữ liệu.
Luôn phải có ít nhất một vai trò với superuser
đặc quyền trong mỗi cụm cơ sở dữ liệu. superuser
ban đầu tài khoản được tạo trong quá trình cài đặt. Tên của superuser
ban đầu tài khoản có thể khác nhau tùy thuộc vào quá trình cài đặt, nhưng thông thường nhất, tài khoản này được gọi là postgres
.
Bạn không nên thực hiện công việc hàng ngày của mình bằng tài khoản có superuser
đặc quyền, cả vì nó có khả năng gây ra các hành động phá hoại và cũng để giảm thiểu cơ hội xâm phạm tài khoản có quyền truy cập rộng. Thay vào đó, hầu hết thời gian, người dùng nên sử dụng các tài khoản dành riêng cho các chức năng hoặc đối tượng dữ liệu cụ thể mà họ đang làm việc, chỉ sử dụng superuser
khi cần có quyền truy cập mạnh hơn.
Kiểm tra các thuộc tính vai trò hiện có
Bây giờ bạn đã có một ý tưởng rộng rãi về các thuộc tính vai trò là gì và các loại đặc quyền mà chúng cho phép, bạn nên học cách tìm các thuộc tính được áp dụng cho các vai trò trong suốt PostgreSQL. Phần này sẽ hiển thị cho bạn một số lệnh để giúp bạn tìm các thuộc tính được đặt trên các vai trò nói chung và cụ thể cho vai trò hiện tại của riêng bạn.
Liệt kê tất cả các vai trò cơ sở dữ liệu và các thuộc tính của chúng
Có một số cách khác nhau để kiểm tra các thuộc tính được áp dụng cho các vai trò trong toàn hệ thống.
Nếu bạn đang sử dụng psql
ứng dụng khách dòng lệnh, bạn có thể tận dụng một số lệnh meta hữu ích cho phép bạn nhận thông tin thuộc tính vai trò mà không cần truy vấn.
\du
meta-command hiển thị tất cả các vai trò và thuộc tính của chúng:
\du
List of roles Role name | Attributes | Member of-----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Trong trường hợp này, postgres
role là vai trò mặc định với superuser
các đặc quyền được định cấu hình cho cụm cơ sở dữ liệu này.
SQL tương đương để liệt kê các vai trò (có thể phát hiện bằng cách chuyển -E
hoặc --echo-hidden
gắn cờ khi bắt đầu psql
) là:
SELECT r.rolname, r.rolsuper, r.rolinherit, r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, r.rolconnlimit, r.rolvaliduntil, ARRAY(SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as memberof, r.rolreplication, r.rolbypassrlsFROM pg_catalog.pg_roles rWHERE r.rolname !~ '^pg_'ORDER BY 1;
Dưới đây là một truy vấn tương tự cung cấp thông tin thuộc tính vai trò (không có thành phần vai trò). Chúng tôi sử dụng psql
meta-command \x on
để xuất kết quả theo chiều dọc để dễ đọc hơn tại đây:
-- turn on vertical display\x onSELECT * FROM pg_roles WHERE rolname !~ '^pg_';-- turn off vertical display\x off
-[ RECORD 1 ]--+---------rolname | postgresrolsuper | trolinherit | trolcreaterole | trolcreatedb | trolcanlogin | trolreplication | trolconnlimit | -1rolpassword | ********rolvaliduntil |rolbypassrls | trolconfig |oid | 10
Nếu bạn chỉ quan tâm đến việc xem vai trò nào có superuser
, bạn có thể yêu cầu một danh sách rõ ràng:
SELECT rolname FROM pg_roles WHERE rolsuper;
rolname---------- postgres(1 row)
Ngoài ra, bạn có thể liệt kê tất cả người dùng và superuser
của họ trạng thái để có một bức tranh hoàn chỉnh hơn:
SELECT usename,usesuper FROM pg_user;
usename | usesuper----------+---------- postgres | t user1 | f(2 rows)
Thông tin tương tự có thể được truy xuất bằng cách sử dụng mô hình "vai trò" của PostgreSQL thay vì lớp phủ "người dùng" (đôi khi không rõ ràng) của nó với truy vấn dài hơn một chút này thay vào đó:
SELECT rolname,rolsuper FROM pg_roles WHERE rolname !~ '^pg_';
rolname | rolsuper----------+---------- postgres | t user1 | f(2 rows)
Liệt kê các thuộc tính của riêng bạn
Nếu bạn muốn tìm các thuộc tính của vai trò bạn hiện đang sử dụng, bạn có thể dễ dàng lọc đầu ra.
Khi sử dụng psql
lệnh meta, bạn có thể sử dụng USER
biến, sẽ được thay thế bằng vai trò được kết nối hiện tại. psql
sử dụng dấu hai chấm (:
) để nội suy các biến:
\du :USER
List of roles Role name | Attributes | Member of-----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Để nhận danh sách hiển thị giá trị của tất cả các thuộc tính vai trò có thể có, bạn có thể sử dụng truy vấn so sánh tên vai trò với giá trị được trả về bởi CURRENT_ROLE
Hàm PostgreSQL. Một lần nữa, chúng tôi đang sử dụng đầu ra dọc để dễ đọc:
-- First, turn on vertical output\x onSELECT * FROM pg_roles WHERE rolename = CURRENT_ROLE;-- Change back to normal output\x off
-[ RECORD 1 ]--+---------rolname | postgresrolsuper | trolinherit | trolcreaterole | trolcreatedb | trolcanlogin | trolreplication | trolconnlimit | -1rolpassword | ********rolvaliduntil |rolbypassrls | trolconfig |oid | 10
Để chỉ kiểm tra xem vai trò hiện tại của bạn có superuser
hay không đặc quyền, bạn có thể nhập:
SHOW is_superuser;
is_superuser-------------- on(1 row)
Kiểm tra xem bạn có đặc quyền quản lý vai trò hay không
Để tạo, thay đổi hoặc xóa các vai trò, bạn phải có superuser
hoặc CREATEROLE
đặc quyền.
Để kiểm tra những vai trò nào trong hệ thống có đặc quyền quản lý vai trò, hãy nhập:
SELECT rolname as "Users who can manage roles" FROM pg_roles WHERE rolsuper OR rolcreaterole;
Users who can manage roles---------------------------- postgres(1 rows)
Nếu bạn chỉ muốn biết liệu vai trò hiện tại của mình có đặc quyền quản lý vai trò hay không, thay vào đó, bạn có thể sử dụng:
SELECT 'Yes' AS "Can I manage roles?" FROM pg_roles WHERE rolname = :'USER' AND (rolsuper OR rolcreaterole);
Can I manage roles?--------------------- Yes(1 row)
Tạo vai trò
Khi bạn đã xác minh rằng bạn có đặc quyền quản lý vai trò, bạn có thể bắt đầu tạo, sửa đổi hoặc xóa các vai trò trong PostgreSQL.
Một tùy chọn để đặt các thuộc tính vai trò là khai báo chúng tại thời điểm bạn tạo vai trò. Điều này cho phép bạn đặt các điều kiện ban đầu cho vai trò, nhưng bạn vẫn có thể sửa đổi chúng sau đó nếu bạn muốn thay đổi cấp độ truy cập của vai trò. Bạn có thể tìm thêm thông tin về CREATE ROLE
lệnh mà chúng ta sẽ sử dụng để làm quen với cú pháp cơ bản.
Một cách để tạo vai trò là từ dòng lệnh. PostgreSQL bao gồm một createuser
lệnh sẽ tạo một vai trò trong cụm cơ sở dữ liệu với LOGIN
đặc quyền.
Cú pháp chung là:
createuser <options> <rolename>
Ví dụ:để tạo một vai trò có tên admin
với superuser
đặc quyền khi nhắc nhập mật khẩu, bạn có thể nhập:
createuser --superuser admin
Sau đó, bạn có thể đăng nhập bằng admin
tài khoản theo các phương pháp xác thực được nêu trong pg_hba.conf
tệp.
Để tạo vai trò bằng SQL
, cú pháp chung trông giống như sau:
CREATE ROLE <role>;
Các thuộc tính có thể được xác định bằng cách chỉ định chúng sau tên vai trò bằng cách sử dụng WITH
:
CREATE ROLE <role> WITH <options>;
Ví dụ:để tạo một vai trò có tên user1
có thể đăng nhập bằng mật khẩu secretpassword
, bạn có thể nhập:
CREATE ROLE "user1" WITH LOGIN PASSWORD 'secretpassword';
Thay vào đó, hãy tạo một vai trò với superuser
đặc quyền (bạn cũng phải là superuser
để thực hiện thành công lệnh này) mà không thể đăng nhập (người dùng phải sử dụng SET ROLE
để thay đổi thành vai trò này), bạn có thể nhập:
CREATE ROLE "user2" WITH SUPERUSER;
Thay đổi vai trò hiện có
Để sửa đổi các thuộc tính của các vai trò hiện có, bạn có thể sử dụng ALTER ROLE
lệnh thay thế. Cũng như khi tạo vai trò, vai trò hiện tại của bạn cũng phải có superuser
hoặc CREATEROLE
đặc quyền. Những người dùng không có những đặc quyền đó chỉ có thể sử dụng ALTER ROLE
lệnh để thay đổi mật khẩu của riêng họ.
Thay đổi vai trò cho phép bạn thay đổi các thuộc tính được chỉ định cho một vai trò sau khi tạo. Các thuộc tính tương tự được đề cập trong phần tạo vai trò có thể được sử dụng với ALTER ROLE
cú pháp. Một điểm khác biệt là mỗi loại thuộc tính có thể được phủ định bằng cách thêm NO
tiếp đầu ngữ. Ví dụ:để cho phép một vai trò đăng nhập vào cụm cơ sở dữ liệu, bạn có thể cấp cho nó LOGIN
thuộc tính. Để loại bỏ khả năng đó, bạn phải thay đổi vai trò bằng cách chỉ định NOLOGIN
.
ALTER ROLE
lệnh chỉ thay đổi các thuộc tính được đề cập rõ ràng. Nói cách khác, ALTER ROLE
lệnh chỉ định thay đổi cho các thuộc tính, không phải một tập hợp đầy đủ các thuộc tính mới.
Để cho phép user2
vai trò để đăng nhập vào cụm cơ sở dữ liệu, bạn có thể gõ:
ALTER ROLE "user2" WITH LOGIN;
Hãy nhớ rằng mặc dù điều này cho phép khả năng đăng nhập, nhưng các phương pháp xác thực được phép vẫn được kiểm soát bởi pg_hba.conf
tệp.
Nếu bạn muốn user2
để có thể đăng nhập, tạo vai trò và tạo cơ sở dữ liệu thay vào đó, bạn có thể chỉ định ba thuộc tính đó, được phân tách bằng dấu cách:
ALTER ROLE "user2" WITH LOGIN CREATEROLE CREATEDB;
Để thu hồi superuser
trạng thái từ một vai trò (bạn chỉ có thể thực thi lệnh này bằng cách sử dụng superuser
khác vai trò), loại:
ALTER ROLE "user2" WITH NOSUPERUSER;
Để thay đổi mật khẩu cho một vai trò, bạn có thể nhập như sau (tất cả các vai trò phải có thể thực thi lệnh này theo vai trò của chính chúng, bất kể CREATEROLE
hoặc superuser
đặc quyền):
ALTER ROLE <role> WITH PASSWORD '<password>';
Mặc dù lệnh trên hoạt động nhưng nếu có thể, bạn nên sử dụng psql
lệnh meta để thay đổi mật khẩu. psql
lệnh tự động nhắc nhập mật khẩu và mã hóa mật khẩu trước khi gửi đến máy chủ. Điều này giúp tránh rò rỉ dữ liệu nhạy cảm trong nhật ký.
Bạn có thể thay đổi mật khẩu của vai trò bằng psql
bằng cách nhập nội dung sau
-- To change your own password\password-- To change the password for another role\password <role>
Bạn cũng có thể sử dụng ALTER ROLE
lệnh đổi tên một vai trò:
ALTER ROLE <role> RENAME TO <newrole>
Hãy nhớ rằng bạn không thể đổi tên vai trò phiên hiện tại của mình.
Xóa vai trò
Việc xóa một vai trò hiện có tuân theo một mẫu tương tự như các lệnh trước đó. Một lần nữa, bạn phải có CREATEROLE
hoặc superuser
đặc quyền để thực hiện các lệnh này.
Một yếu tố phức tạp là các vai trò không thể bị loại bỏ nếu chúng vẫn được tham chiếu bởi các đối tượng trong cơ sở dữ liệu. Điều này có nghĩa là bạn phải xóa hoặc chuyển quyền sở hữu bất kỳ đối tượng nào mà vai trò sở hữu. Sau đó, bạn cũng phải thu hồi bất kỳ đặc quyền bổ sung nào mà vai trò có trên các đối tượng cơ sở dữ liệu.
Giải thích chi tiết về cách chỉ định lại và loại bỏ các đặc quyền một cách thích hợp được Erwin Brandstetter cung cấp trên trang Stack Exchange của Quản trị viên Cơ sở dữ liệu. Quy trình tương tự được sử dụng bên dưới.
Trước tiên, bạn có thể gán lại tất cả các đối tượng thuộc sở hữu của vai trò bằng cách sử dụng REASSIGNED OWNED
yêu cầu. Ví dụ:nếu bạn đang chuẩn bị xóa user2
, bạn có thể gán các đối tượng của nó cho postgres
vai trò bằng cách nhập:
REASSIGN OWNED BY "user2" TO "postgres";
Bây giờ các đối tượng thuộc sở hữu của postgres
, chúng ta có thể sử dụng DROP OWNED
lệnh thu hồi tất cả các đặc quyền khác mà chúng tôi đã được cấp trên các đối tượng. Lệnh này cũng xóa bất kỳ đối tượng nào mà chúng tôi sở hữu, nhưng vì chúng tôi vừa chuyển chúng sang postgres
vai trò, user2
vai trò không còn bất kỳ đối tượng sở hữu nào. Do đó, lệnh sẽ chỉ thu hồi bất kỳ đặc quyền bổ sung nào của vai trò:
DROP OWNED BY "user2";
Không có DROP OWNED
phím tắt ở trên, bạn sẽ phải thực thi REVOKE ALL PRIVILEGES
trên mọi đối tượng hoặc loại đối tượng riêng lẻ mà vai trò có đặc quyền.
Khi bạn đã thu hồi tất cả các đặc quyền liên quan, bạn có thể xóa vai trò bằng cách nhập:
DROP ROLE "user2";
Đăng nhập bằng psql
Khi bạn đã định cấu hình vai trò mới và đã định cấu hình chi tiết xác thực bằng pg_hba.conf
, bạn có thể đăng nhập vào cụm cơ sở dữ liệu bằng vai trò mới của mình. psql
ứng dụng dòng lệnh cung cấp một cách dễ dàng để thực hiện việc này.
Theo mặc định, psql
giả sử bạn muốn kết nối bằng vai trò phù hợp với tên người dùng hệ điều hành của bạn. Vì vậy, nếu bạn đã đăng nhập vào máy tính của mình bằng john
, psql
sẽ giả định rằng bạn muốn cố gắng kết nối với cơ sở dữ liệu bằng vai trò còn được gọi là john
.
Để ghi đè hành vi này, bạn có thể chuyển -U
hoặc --username=
lựa chọn. Ví dụ:nếu bạn muốn đăng nhập vào một vai trò có tên là kerry
, bạn có thể nhập:
psql -U kerry
Thành công của psql
lệnh sẽ phụ thuộc vào sự tồn tại của kerry
vai trò, khả năng truy cập của máy chủ mà bạn đang cố gắng kết nối và các quy tắc xác thực được xác định trên máy chủ.
Thay đổi sang một vai trò khác trong phiên
Đôi khi, bạn có thể muốn tạm thời chấp nhận các đặc quyền và danh tính của một vai trò khác mà bạn có quyền truy cập. Ví dụ:điều này là cần thiết nếu bạn muốn có được các đặc quyền của vai trò mà bạn là thành viên nếu vai trò hiện tại của bạn không có INHERIT
thuộc tính.
Để hiểu cách hoạt động của điều này, bạn phải biết thuật ngữ mà PostgreSQL sử dụng để phân loại các vai trò hoạt động:
- Vai trò phiên :Vai trò phiên là vai trò bạn đã đăng nhập trong khi kết nối ban đầu với cụm cơ sở dữ liệu PostgreSQL. Nó thiết lập các đặc quyền ban đầu của bạn và xác định quyền truy cập của bạn vào hệ thống. Vai trò này phải có
LOGIN
thuộc tính. - Vai trò hiện tại :Ngược lại, vai diễn hiện tại là vai diễn mà bạn hiện đang đảm nhận. Các đặc quyền liên quan đến vai trò hiện tại, dù được đặt trực tiếp hay được kế thừa từ các vai trò khác, sẽ xác định các hành động bạn được phép thực hiện và các đối tượng bạn có quyền truy cập.
Bạn có thể xem các giá trị phiên và vai trò hiện tại của mình bằng cách nhập:
SELECT SESSION_USER, CURRENT_USER;
current_user | session_user--------------+-------------- postgres | postgres(1 row)
Mặc dù cách duy nhất để thay đổi vai trò phiên của bạn là bắt đầu kết nối mới bằng một vai trò khác, bạn có thể thay đổi vai trò hiện tại của mình bằng cách sử dụng SET ROLE
yêu cầu. SET ROLE
lệnh được sử dụng để tạm thời hoạt động như một vai trò khác. Lệnh này cũng có thể tùy chọn sử dụng các bổ ngữ sau:
-
SESSION
:Cài đặt mặc định. Điều này gây raSET ROLE
lệnh để ảnh hưởng đến toàn bộ phiên cơ sở dữ liệu. -
LOCAL
:Công cụ sửa đổi này sẽ khiến lệnh chỉ thay đổi vai trò đối với giao dịch hiện tại.
Để thay đổi vai trò hiện tại thành user2
vai trò (cho phần còn lại của phiên), nhập:
SET ROLE "user2";
Nếu bạn kiểm tra giá trị phiên và vai trò hiện tại của mình, bạn sẽ thấy rằng giá trị vai trò hiện tại đã thay đổi:
SELECT SESSION_USER, CURRENT_USER;
current_user | session_user--------------+-------------- user2 | postgres(1 row)
Tất cả các hành động của bạn bây giờ sẽ sử dụng user2
đóng vai trò như bối cảnh của họ.
Để thay đổi trở lại vai trò phiên mà bạn đã sử dụng trước đó, bạn có thể nhập:
SET ROLE NONE;
Một giải pháp thay thế đạt được kết quả tương tự là:
RESET ROLE;
Kết luận
Hệ thống vai trò, thuộc tính vai trò, tài trợ và xác thực của PostgreSQL tạo ra một hệ thống linh hoạt cho phép quản trị viên quản lý hiệu quả quyền và truy cập cơ sở dữ liệu. Hướng dẫn này đã mô tả các vai trò chính xác là gì và cách chúng bao gồm một loạt các trường hợp sử dụng. Nó cũng đề cập đến cách tạo, sửa đổi và xóa các vai trò cũng như quản lý các thuộc tính vai trò xác định khả năng toàn cầu của chúng. Việc hiểu cách quản lý những danh tính này là cần thiết để bảo mật cơ sở dữ liệu của bạn và cung cấp quyền truy cập hữu dụng cho người dùng hợp pháp của bạn.