nsk*_*lis 21 postgresql permissions psql
我是 postgresql 的新手,如果您能就如何解决以下错误提出建议,我将不胜感激。
我发出了以下命令:
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 ;
Run Code Online (Sandbox Code Playgroud)
以下是特权列表:
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)
Run Code Online (Sandbox Code Playgroud)
错误是:
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
Run Code Online (Sandbox Code Playgroud)
您能否就如何设置权限提出建议,以便netopsapp用户可以访问架构中定义的表doc
PS:前 2 个命令在 postgresql 书中被称为最佳实践
nsk*_*lis 24
这解决了它:
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 ;
Run Code Online (Sandbox Code Playgroud)
连接到正确的数据库时,您没有运行GRANT/ 。GRANT ALL也许您混淆了开发和生产?
当您在 ip_spotlight 上运行时,\dn+您可以看到您没有授予netopsapp. 否则应该在那里列出。