Tôi hơi bối rối về việc thiết lập quyền trong PostgreSQL.
Tôi có những vai trò sau:
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
admin | Superuser, Create role, Create DB, Replication | {}
meltemi | Create role, Create DB | {rails}
rails | Create DB, Cannot login | {}
myapp | | {rails}
và cơ sở dữ liệu:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
người dùng myapp
không gặp vấn đề khi truy vấn myapp_production
cơ sở dữ liệu thêm & xóa hồ sơ. Tôi cũng muốn meltemi
có thể truy vấn cùng một cơ sở dữ liệu. Vì vậy, tôi đã tạo ra một vai trò rails
sở hữu cơ sở dữ liệu và thực hiện cả hai meltemi
và myapp
các thành viên của rails
. Nhưng tôi vẫn nhận được permission denied for relation
lỗi. Meltemi
có thể xem lược đồ nhưng không thể truy vấn DB.
Tôi chỉ nhận thấy (với \dt
lệnh) đó myapp
là chủ sở hữu của các bảng:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Các bảng được tạo thông qua ORM (Di chuyển ActiveRecord của Rails).
Tôi biết ủy quyền rất khác nhau trong PostgreSQL (trái ngược với MySQL và những người khác tôi đã sử dụng). Tôi nên thiết lập cơ sở dữ liệu của mình như thế nào để những người dùng khác nhau có thể truy cập nó. Một số nên có thể CRUD nhưng những người khác chỉ có thể đọc, v.v ...
Cảm ơn vì bất kì sự giúp đỡ. Xin lỗi, tôi biết đây là một câu hỏi rất cơ bản nhưng tôi không thể tự tìm câu trả lời.
myapp
thay vìrails
ở trên? Bởi vìmyapp
sở hữu các bảng (tôi không bao giờ chỉ định điều đó, việc di chuyển phải có). Dù sao, nó sẽ sorta có ý nghĩa nếu tôi đổi tênmyapp
đểmyapp_group
và sau đó thực hiện một người dùng mớimyapp
mà ray ứng dụng sẽ sử dụng để kết nối với DB. Thực hiệnmyapp
và hiện cómeltemi
, cả hai thành viên củamyapp_group
vai trò. Nhưng điều gì xảy ra khi tôi chạy di chuyển tiếp theo. nó sẽ không được sở hữu bằng cáchmyapp
tái tạo vấn đề một lần nữa chứ?!?