
# DROP USER
#### 功能描述
DROP USER用于GaussDB数据库中执行对用户的删除操作，该权限需要具备创建用户的权限才能执行。当执行删除用户的指令成功后，同时会删除同名的schema。
#### 注意事项
- 须使用CASCADE级联删除依赖用户的对象（除数据库外）。当删除用户的级联对象时，如果级联对象处于锁定状态，则此级联对象无法被删除，直到对象被解锁或锁定级联对象的线程被终止。
- 在数据库中删除用户时，如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库，请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库，再删除用户。即DROP USER不支持跨数据库进行级联删除。
- 在删除用户时，需要先删除该用户拥有的所有对象并且收回该用户在其他对象上的权限，或者通过指定CASCADE级联删除该用户拥有的对象和被授予的权限。
- 在多租户场景下，删除组用户时，业务用户也会同时被删除，如果指定CASCADE级联删除，那么删除业务用户时同时也指定CASCADE。如果在删除某个用户失败时，会报错，同时其他用户也无法成功删除。
- 如果用户下存在创建GDS外表时指定的错误表，则无法通过DROP USER指定CASCADE关键字直接删除用户。
 
#### 语法格式
```
DROP USER [ IF EXISTS ] user_name [, ...] [ CASCADE | RESTRICT ];
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558217269.png "点击放大")
#### 参数说明
- **IF EXISTS**
  使用该参数时，如果指定的用户不存在，发出一个notice而不是抛出一个错误，故使用该参数可以避免出现报错。
  
- **user_name**
  待删除的用户名。
  取值范围：数据库中已存在的用户名。
  
- **CASCADE \| RESTRICT**
  - CASCADE：级联删除依赖用户的对象，并收回授予该用户的权限。
  
  - RESTRICT：如果用户还有任何依赖的对象或被授予了其他对象的权限，则拒绝删除该用户（缺省行为）。
    ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
    在GaussDB中，存在一个配置参数enable_kill_query，此参数在配置文件gaussdb.conf中。此参数影响级联删除用户对象的行为：
    - 当参数enable_kill_query为on ，且使用CASCADE模式删除用户时，会自动kill锁定用户级联对象的线程，并删除用户。
    
    - 当参数enable_kill_query为off，且使用CASCADE模式删除用户时，会等待锁定级联对象的线程结束之后再删除用户。
      
   
 
#### 示例
```
--创建用户jim，登录密码为********。
gaussdb=# CREATE USER jim PASSWORD '********';
--删除不存在的tom用户。
gaussdb=# DROP USER IF EXISTS tom;
NOTICE:  role "tom" does not exist, skipping
DROP ROLE
--删除用户。
gaussdb=# DROP USER jim CASCADE;
```
#### 相关链接
[ALTER USER](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0516.html#ZH-CN_TOPIC_0000002558945995)，[CREATE USER](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0575.html#ZH-CN_TOPIC_0000002559105917)
