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 ]; |
参数说明
| 参数 | 描述 | 取值范围 |
|---|---|---|
| name | 将要删除所拥有对象并且撤销其权限的角色名。 | 已存在的角色名。 |
| 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报错“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;命令。