Postgresql user1创建的表,user2是没有权限做DDL的解决方式

通过下sql查出表所属的owner,一个user创建的表,另一个用户是不能使用DDL的,超级用户除外  select t.table_name, t.table_type, c.relname, c.relowner, u.usename  from information_sch...

通过下sql查出表所属的owner,一个user创建的表,另一个用户是不能使用DDL的,超级用户除外


 select t.table_name, t.table_type, c.relname, c.relowner, u.usename

 from information_schema.tables t

 join pg_catalog.pg_class c on (t.table_name = c.relname)

 join pg_catalog.pg_user u on (c.relowner = u.usesysid)

 where t.table_schema='org';


postgresql使用grant 授权的时候,是没有mysql alter权限可以授予的,如果想做其他用户创建的 schema或table或sequence 做DDL(管理),你只能通过变更  owner的方式,把schema,table ,sequence的owner授予操作人才可以。

然后使用alter table org.org_company owner to db_user;  把原来有postgres创建的变成db_user 创建。

修改一个表的名字,alter table org.org_company rename to org_company     ,修改成的新名字,前面不需要加schema,否则报错



  1. PG 的 superuser 拥有几乎全部的数据库权限,甚至可以直接修改系统表,潜在风险相当大;
  2. RDS PG 使用 superuser 运维 DB,例如管理用、管理流复制、备份等,这些操作用户是不需要关心的,换句话说它应该完全的交给云服务来处理;
  3. 对于用户而言,PG 的普通用户权限是完全够用的。使用普通用户,可以管理自己在云上的数据(对表进行DDL、DML、创建修改和管理其他数据库对象)。

之前的 PG 用户习惯使用 superuser 进行日常运维,一方面 superuser 完全不用做任何的授权,使用方便;另一方面这样的操作带来了潜在的风险,容易误操作。

最近碰到了较多的用户反馈,没有了超级用户,无法使用 RDS 的普通用户,管理其他普通用户创建的对象,经常出现操作对象无权限的问题,尤其存在多用户的情况下。通常情况下:

  1. 一个普通用户只能在自己 owner 的DB下创建 schema;
  2. DB 下的对象有一个所属的 schema,普通用户可以在 public 下创建对象(如 table),在其他 schema 下创建对象需要 schema 的 owner 是当前用户或特别的授权;
  3. 管理一个数据库对象,需要是超级用户、或对象的 owner 是当前用户(在用户组权限之外)。

很多用户,使用了很多个 user 在 public 模式下创建了多张表,但是单个用户却没有权限同时管理他们, 更没有权限切换他们的 owner 到一个统一的用户下做统一处理,十分恼


POSTGRESQL 的结构是这样的, database-schema-各类对象的权限:

r -- SELECT ("读")
w -- UPDATE ("写")
a -- INSERT ("追加")
d -- DELETE
D -- TRUNCATE
x -- REFERENCES
t -- TRIGGER
X -- EXECUTE
U -- USAGE
C -- CREATE
c -- CONNECT
T -- TEMPORARY
arwdDxt -- ALL PRIVILEGES (对于表,对其他对象会变化)
* -- 用于前述特权的授权选项


  • 发表于 2021-03-31 12:38
  • 阅读 ( 36 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章