我在postgresql中有一个名为testview的视图.
我创建了一个名为testuser的新用户.
我希望testuser拥有数据库中所有表和视图的所有权限.
为此,我运行了以下命令:
GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
GRANT USAGE ON SCHEMA public TO testuser;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser;
Run Code Online (Sandbox Code Playgroud)
testuser现在可以访问数据库中的所有表,但是如果我尝试运行SELECT*FROM testview,我会收到以下错误:关系testview的权限被拒绝.
怎么了?testuser如何访问testview?
Pau*_*rth 18
我同意它应该有效.权限GRANT ... ON ALL TABLES
应该包括视图.
在授予权限后是否创建了视图testuser
?如果是,那么它没有与其他表相同的权限.这是因为GRANT ... ON ALL TABLES
"在当前存在的所有表上".要包含您将来创建的表/视图,您可以说:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO testuser;
Run Code Online (Sandbox Code Playgroud)
或者如果你想给予更多SELECT
,你可以说ALL PRIVILEGES
.
我认为这种行为ON ALL TABLES
是关于Postgres权限的最容易被误解的内容之一,并且它在标准文档中并没有真正被提及,所以我试着在我自己的Postgres权限概述中强调它.
小智 5
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser;
GRANT USAGE on schema: GRANT USAGE ON SCHEMA schema_name TO username;
Grant SELECT for a specific table: GRANT SELECT ON tbl_loans_new TO oloffm;
Grant SELECT for multiple tables: GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO username;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15817 次 |
最近记录: |