从公共架构中撤消特权“创建表”,但不是从定制架构中撤消

Posted

技术标签:

【中文标题】从公共架构中撤消特权“创建表”,但不是从定制架构中撤消【英文标题】:Revoke privilege "create table" from public schema but not from custom made schema 【发布时间】:2015-10-27 21:49:48 【问题描述】:

我正在尝试创建一个只能在 mydb_schema 中使用“SELECT”的帐户。

我能够从特定角色撤消在我的数据库 (mydb) 中的公共架构中创建表,但我无法撤消在架构 (mydb_schema) 中创建表的创建角色 (user_role)到。

有人可以帮忙吗?我错过了什么?

以下是我作为用户 postgres 和架构所有者使用的命令。最后,我还通过使用 noinherit 作为绝望的测试来更改 postgres 帐户。没有结果。

\c mydb
 mydb=# create role user_account
 mydb=# alter role user_account login noinherit;
 mydb=# alter role user_account set search_path = 'mydb_schema';
 ##Up until this point I don't have SELECT pivileges but I can create a table within mydb_schema only and not in public.
 mydb=# grant select on all tables in schema mydb_schema to user_account;
 mydb=# revoke CREATE on SCHEMA public from public;

这些是我的数据库:

List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description
--------------------------------------------------------------------------
postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 6820 kB | pg_default | default administrative connection database
mydb      | seeker   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/seeker           +| 3465 MB | pg_default |
                                                              seeker=CTc/seeker 

这些是我的架构:

                          List of schemas
  Name      |  Owner   |  Access privileges   |      Description
----------------+----------+----------------------+------------------------
 public         | postgres | postgres=UC/postgres | standard public schema
 mydb_schema    | seeker   | seeker=UC/seeker    +|
                |          | =UC/seeker           |

【问题讨论】:

【参考方案1】:

找到解决方案here in dba.stackexchange

alter role servers_admin set default_transaction_read_only = 'ON';

【讨论】:

以上是关于从公共架构中撤消特权“创建表”,但不是从定制架构中撤消的主要内容,如果未能解决你的问题,请参考以下文章

在 Snowflake DWH 中撤销从架构创建表

内存管理技术一:页表

在 postgresql 中将模式添加到路径

授予对 PostgreSQL 中未来创建的模式的使用和特权

测试和设置(或其他原子RMW操作)是否是任何架构上的特权指令?

手把手带你搭建SpringCloud, 从公共模块搭建一套完整微服务架构