无论出于何种原因,我们的数据库不尊重 GRANT 命令。以下是新创建用户的示例。
pddbtest=> create user test_user login;
CREATE ROLE
Run Code Online (Sandbox Code Playgroud)
然后验证用户还没有架构权限
pddbtest=> SELECT rolname, has_schema_privilege(rolname, 'public', 'usage') from pg_roles where rolname='test_user';
rolname | has_schema_privilege
-----------+----------------------
test_user | f
(1 row)
Run Code Online (Sandbox Code Playgroud)
然后授予许可
pddbtest=> grant usage on schema public to test_user;
GRANT
Run Code Online (Sandbox Code Playgroud)
然后读取权限现在是否存在(不存在)
pddbtest=> SELECT rolname, has_schema_privilege(rolname, 'public', 'usage') from pg_roles where rolname='test_user';
rolname | has_schema_privilege
-----------+----------------------
test_user | f
(1 row)
Run Code Online (Sandbox Code Playgroud)
即使授予架构权限后(不会返回任何错误),数据库仍然会认为该权限未授予。(如果我之后在架构中的所有表上添加选择授权,则在尝试查询任何表时仍然会收到架构权限被拒绝的错误)
(搜索路径是“$user”,如果该信息相关则公开)
编辑:这是 SELECT version() 的输出;和 \dn+ 根据要求:
PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.9.3, 64-bit
List of schemas
Name | Owner | Access privileges | Description
-----------+----------------+----------------------------------+------------------------
fnrbaks | appuser_root | |
mask | maint_user_2 | maint_user_2=UC/maint_user_2+ |
| | readonly_viewer=U/maint_user_2 |
pganalyze | appuser_root | appuser_root=UC/appuser_root +|
| | pganalyze=U/appuser_root +|
| | pganalyze2=U/appuser_root |
public | rdsadmin | appuser_root=UC/rdsadmin +| standard public schema
| | proddb=U/rdsadmin |
(4 rows)
Run Code Online (Sandbox Code Playgroud)
此处的架构public
属于rdsadmin
. 对 GRANT 不起作用的一个可能的解释是,它是由权限不足的用户(不是rdsadmin
超级用户)运行的,该用户无权授予以下权限public
:
grant usage on schema public to test_user;
Run Code Online (Sandbox Code Playgroud)
默认情况下,如果该授权无效,则会显示警告:
WARNING: no privileges were granted for "public"
Run Code Online (Sandbox Code Playgroud)
但这取决于client_min_messages
设置。如果该设置低于警告阈值(例如设置为error
),则不会显示警告,并且您将出现问题中显示的行为。这可以通过以下方式验证:
SHOW client_min_messages;
Run Code Online (Sandbox Code Playgroud)
并更改为更详细的级别:
SET client_min_messages TO notice;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28929 次 |
最近记录: |