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 myappkhông gặp vấn đề khi truy vấn myapp_productioncơ sở dữ liệu thêm & xóa hồ sơ. Tôi cũng muốn meltemicó 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ò railssở hữu cơ sở dữ liệu và thực hiện cả hai meltemivà myappcác thành viên của rails. Nhưng tôi vẫn nhận được permission denied for relationlỗi. Meltemicó thể xem lược đồ nhưng không thể truy vấn DB.
Tôi chỉ nhận thấy (với \dtlệnh) đó myapplà 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.
myappthay vìrailsở trên? Bởi vìmyappsở 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_groupvà sau đó thực hiện một người dùng mớimyappmà ray ứng dụng sẽ sử dụng để kết nối với DB. Thực hiệnmyappvà hiện cómeltemi, cả hai thành viên củamyapp_groupvai 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áchmyapptái tạo vấn đề một lần nữa chứ?!?