• 售前

  • 售后

热门帖子
入门百科

PostgreSQL 实现快速删除一个用户

[复制链接]
shelly65321 显示全部楼层 发表于 2021-10-26 12:57:49 |阅读模式 打印 上一主题 下一主题
配景

在多租户场景或者其他场景下,许多时候必要主动清算一些用户,本文将先容PostgreSQL 下怎样快速删除一个用户(role)。
详细方法

一般情况下直接执行 drop role xxx; 就可以把这个用户删除。但是许多时候会因为用户有依赖而报错。
权限依赖
  1. postgres=# create role test with login;
  2. CREATE ROLE
  3. postgres=# grant all on database postgres to test;
  4. GRANT
  5. postgres=# drop role test;
  6. ERROR: role "test" cannot be dropped because some objects depend on it
  7. DETAIL: privileges for database postgres
复制代码
可以看出,因为我们把数据库postgres 的权限赋予了test 用户,以是直接删除的时候会报错。面临这种情况,我们必要先将role 的权限全部的权限全部revoke 掉,如下:
  1. postgres=# revoke all on database postgres from test;
  2. REVOKE
  3. postgres=# drop role test;
  4. DROP ROLE
复制代码
注意:必要把该用户在全部数据库具有权限的全部数据库对象的(表,视图,SEQUENCE)权限全部回收,才能删除该用户。
对象依赖
  1. postgres=# create role test with login;
  2. CREATE ROLE
  3. postgres=# \c - test
  4. You are now connected to database "postgres" as user "test".
  5. postgres=> create table test (id int);
  6. CREATE TABLE
  7. postgres=# \c - postgres
  8. You are now connected to database "postgres" as user "postgres".
  9. postgres=# drop role test;
  10. ERROR: role "test" cannot be dropped because some objects depend on it
  11. DETAIL: owner of table test
复制代码
可以看出,因为test 用户是test 表的owner,以是删除的时候报错owner of table test。如果不必要生存该对象,则必要先把该依赖对象删除。如果必要生存该对象,则应该在删除之前先把owner 赋予别人,如下:
  1. postgres=# alter table test OWNER TO postgres;
  2. ALTER TABLE
  3. postgres=# drop role test;
  4. DROP ROLE
复制代码
注意:必要把该用户在全部数据库具有owner 权限的全部数据库对象(表,视图,SEQUENCE)删除或者执行alter xx owner to,才能删除该用户。
更牛逼的方法

如果不生存owner 的数据库对象
  1. postgres=# REASSIGN OWNED BY test TO postgres;
  2. REASSIGN OWNED
  3. postgres=# DROP OWNED BY test;
  4. DROP OWNED
  5. postgres=# drop role test;
  6. DROP ROLE
复制代码
如果生存owner 的数据库对象
  1. postgres=# REASSIGN OWNED BY test TO postgres;
  2. REASSIGN OWNED
  3. postgres=# drop role test;
  4. DROP ROLE
复制代码
注意:REASSIGN OWNED 必要执行者所属的role (或者子集)必须包罗test 和postgres 或者是superuser。别的必须全部涉及到的数据库上都执行该以上语句才能删除用户。
补充:PostgreSQL数据库创建/删除
方法1 - 体系下令
  1. sudo su - postgres #切换到postgres用户(系统用户)
  2. createdb weichen #创建数据库
  3. psql #直接访问数据库(默认进入本地postgres数据库)
  4. \l --查看数据库列表
  5. :q --退出列表页面
  6. \q --退出客户端
  7. dropdb weichen #删除数据库
复制代码
方法2 - psql下令行
  1. sudo -u postgres psql #登录客户端
  2. create database weichen; --创建数据库
  3. create database sz owner postgres; --创建数据库
  4. select oid,datname from pg_database; --查看数据库列表
  5. drop database weichen; --删除数据库
  6. drop database sz; --删除数据库
复制代码
以上为个人经验,希望能给各人一个参考,也希望各人多多支持脚本之家。如有错误或未考虑完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作