postgres: quyền bị từ chối cho lược đồ


10

Tôi chưa quen với postgresql và tôi rất biết ơn nếu bạn có thể vui lòng tư vấn về cách khắc phục lỗi sau ..

Tôi đã ban hành các lệnh sau:

ip_spotlight-# REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA doc FROM PUBLIC ;
ip_spotlight-# REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA net FROM PUBLIC ;

ip_spotlight# GRANT USAGE ON SCHEMA doc TO netopsapp ;

ip_spotlight-# ALTER DEFAULT PRIVILEGES IN SCHEMA doc GRANT ALL ON TABLES TO netopsapp ;
ip_spotlight-# ALTER DEFAULT PRIVILEGES IN SCHEMA net GRANT ALL ON TABLES TO netopsapp ;

Dưới đây là danh sách các đặc quyền:

ip_spotlight# \dn+
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 doc    | postgres |                      | 
 net    | postgres |                      | 
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
(3 rows)

Và lỗi là:

python3 -m pwiz --engine=postgresql --host=x.x.x.x --port=5432 --user=netopsapp --password  --schema=doc --tables=bgp_communities ip_spotlight
Password: 
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/peewee.py", line 3768, in execute_sql
    cursor.execute(sql, params or ())
psycopg2.ProgrammingError: permission denied for schema doc
LINE 1: SELECT * FROM "doc"."bgp_communities" LIMIT 1

Bạn có thể vui lòng tư vấn về cách thiết lập các đặc quyền để netopsappngười dùng có quyền truy cập vào các bảng được xác định trong lược đồdoc

PS: 2 lệnh đầu tiên được đề cập là cách thực hành tốt nhất trong sách postgresql


Bạn đang cố gắng tạo một người dùng chỉ đọc?
Evan Carroll

Câu trả lời:


15

Điều này giải quyết nó:

postgres=# \connect ip_spotlight
You are now connected to database "ip_spotlight" as user "postgres".
ip_spotlight=# GRANT USAGE ON SCHEMA doc,net TO netops ;
ip_spotlight=# GRANT USAGE ON SCHEMA doc,net TO netopsapp ;

ip_spotlight=# GRANT SELECT ON ALL TABLES IN SCHEMA doc,net TO netops ;
ip_spotlight=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA doc,net TO netops ;
ip_spotlight-# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA doc,net TO netops ;

ip_spotlight-# GRANT ALL ON ALL TABLES IN SCHEMA doc,net TO netopsapp ;
ip_spotlight-# GRANT ALL ON ALL SEQUENCES IN SCHEMA doc,net TO netopsapp ;
ip_spotlight-# GRANT ALL ON ALL FUNCTIONS IN SCHEMA doc,net TO netopsapp ;

3
SỬ DỤNG GRANT là chìa khóa!
Fabio Bonfante

3

Bạn không chạy GRANT/ GRANT ALLkhi được kết nối với cơ sở dữ liệu phù hợp. Có lẽ bạn đang nhầm lẫn phát triển và sản xuất?

Khi bạn chạy \dn+trên ip_spotlight, bạn có thể thấy rằng bạn không có quyền nào được cấp cho a netopsapp. Điều đó nên được liệt kê ở đó.


cảm ơn, bạn có biết làm thế nào để sửa nó không?
nskalis

@NikosSkalis kết nối với cùng một cơ sở dữ liệu python3 đang kết nối và đưa ra các GRANTcâu lệnh.
Evan Carroll

Cảm ơn. nếu có thể đăng câu trả lời giải thích thì lệnh sau đây sẽ làm gì: GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;điều đó sẽ rất tuyệt :)
nskalis

Điều đó cấp chức năng được chỉ định và việc sử dụng bất kỳ toán tử nào được triển khai trên đầu hàm cho tất cả các hàm trong lược đồ publiccho người dùng some_usercho bất kỳ cơ sở dữ liệu nào bạn kết nối.
Evan Carroll

Nhưng executecó nghĩa là gì và functionscó nghĩa là gì?
nskalis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.