更新时间:2026-10-28 GMT+08:00

DROP OWNED

功能描述

在数据库的日常运维中,管理员经常需要进行角色清理或迁移操作。例如,当某个应用下线、员工离职或系统迁移时,需要删除特定角色拥有的所有数据库对象(如表、视图、序列等)并撤销其在共享对象上的权限。此时,可使用DROP OWNED命令一次性完成这些操作,避免逐个对象手动删除的繁琐过程。

DROP OWNED命令用于删除一个数据库角色所拥有的数据库对象,并撤销该角色在当前数据库和共享对象(数据库、表空间)上的所有权限。

DROP OWNED与DROP ROLE是角色管理中密切相关的命令,其适用场景对比如下:

命令

作用

对象处理方式

角色本身

典型场景

DROP OWNED

删除角色拥有的所有对象并撤销其权限。

删除对象。

仍然存在。

角色清理:需要删除对象且不再需要这些对象。

DROP ROLE

直接删除角色本身。

如果角色仍拥有对象则报错。

删除角色。

角色删除:需先通过DROP OWNED清理对象后才能执行。

注意事项

  • 所有该角色在当前数据库里和共享对象(数据库,表空间) 上的所有对象上的权限都将被撤销。
  • DROP OWNED仅删除角色拥有的对象和权限,角色本身不会被删除,仍保留在系统中。如需删除角色本身,需在执行DROP OWNED后配合使用DROP ROLE命令。
  • 使用CASCADE选项时会级联删除所有依赖对象,可能影响其他角色的对象,请谨慎使用。

语法格式

1
DROP OWNED BY name [, ...] [ CASCADE | RESTRICT ];

参数说明

表1 DROP OWNED参数说明

参数

描述

取值范围

name

将要删除所拥有对象并且撤销其权限的角色名。

已存在的角色名。

CASCADE | RESTRICT

当执行删除操作时,如何处理依赖对象中的相关数据。

  • CASCADE:级联删除所有依赖于被删除对象的对象。
  • RESTRICT:缺省值,拒绝删除那些有任何依赖对象存在的对象。

示例

创建角色u1并创建一个由u1拥有的表。

1
2
3
CREATE ROLE u1 IDENTIFIED BY '{password}';
CREATE TABLE u1_table (id int);
ALTER TABLE u1_table OWNER TO u1;

删除名称为u1的角色拥有的所有数据库对象。

1
DROP OWNED BY u1;

相关文档

DROP ROLE

常见问题

执行DROP ROLE报错“role "xx" cannot be dropped because some objects depend on it”

原因:角色仍拥有数据库对象,直接执行DROP ROLE会被拒绝。

解决方法:先执行DROP OWNED BY 角色名 CASCADE;清除所有对象和权限,然后再执行DROP ROLE。

执行DROP OWNED后发现其他数据库中的对象未被删除

原因:DROP OWNED仅作用于当前连接的数据库,不会跨数据库删除对象。

解决方法:切换到其他数据库,分别执行DROP OWNED BY name;命令。