Dav*_*ave 4 postgresql permissions select insert grant
我正在使用PostGres 9.5。我在将数据插入刚刚创建的表时遇到麻烦。尽管向数据库用户授予了所有特权,但我仍收到“权限被拒绝”错误。见下文 ...
localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.
postgres=# GRANT ALL ON schema public TO myapp;
GRANT
localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.
postgres=# GRANT USAGE ON schema public TO myapp;
GRANT
postgres=# \q
localhost:myapp davea$ myapp
psql (9.5.0, server 9.5.1)
Type "help" for help.
myapp=> insert into search_codes (id, code, address_id) values (1, 'atlanta', 'GA');
ERROR: permission denied for relation search_codes
myapp=> select * FROM search_codes;
ERROR: permission denied for relation search_codes
myapp=> \d search_codes;
Table "public.search_codes"
Column | Type | Modifiers
------------+-------------------+-----------------------------------------------------------
id | integer | not null default nextval('search_codes_id_seq'::regclass)
code | character varying |
address_id | character varying |
Indexes:
"search_codes_pkey" PRIMARY KEY, btree (id)
"index_search_codes_on_code" UNIQUE, btree (code)
"index_search_codes_on_address_id" btree (address_id)
Run Code Online (Sandbox Code Playgroud)
授予特权以便我的用户可以在表中插入和选择的正确方法是什么?
您的第一个命令使您能够列出表(您可以知道存在的表)
GRANT USAGE ON SCHEMA public TO myapp
Run Code Online (Sandbox Code Playgroud)
然后,您必须向模式public中的所有表授予SELECT,INSERT等权限。
GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA public TO myapp
Run Code Online (Sandbox Code Playgroud)
我建议不要将所有特权赋予特定的应用程序。
如果您有序列:
GRANT SELECT, UPDATE, USAGE ON ALL SEQUENCES IN SCHEMA public to myapp
Run Code Online (Sandbox Code Playgroud)
如果您具有功能:
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO myapp
Run Code Online (Sandbox Code Playgroud)
然后您的示例将起作用。
但是,如果您希望将来创建的表能够被访问,则仍然必须应用一些命令:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLES TO myapp
Run Code Online (Sandbox Code Playgroud)
PostgreSQL有很奇怪的机制,花了我一段时间才理解!
小智 6
首先你必须使用 postgres 用户登录你的新数据库
psql your_db_name -U postgres -h your_host_name
Run Code Online (Sandbox Code Playgroud)
提供列出表格的能力
GRANT USAGE ON SCHEMA public TO your_user_name
Run Code Online (Sandbox Code Playgroud)
然后您必须向公共架构中的所有表授予权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO your_user_name
Run Code Online (Sandbox Code Playgroud)
如果您有序列,请给予许可
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user_name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6355 次 |
| 最近记录: |