# DROP ROLE


> Delete a custom role and remove it from all members who hold it.

**Requires permission:** Manage custom role definitions — included by default in the Admin preset role. A custom role qualifies when it inherits a role that includes the permission. Creating, configuring, and dropping custom roles share this permission. See [Roles and access control](/concepts/roles-and-access-control/#what-each-role-can-do).

Delete a custom role that is no longer needed. Only custom roles can be dropped. See [Roles and access control](/concepts/roles-and-access-control/) for the model.

## Syntax

```sql
DROP ROLE [ IF EXISTS ] <role_name>;
```

Dropping a role removes it from every user who holds it, along with the grants made to that role. Users keep their other roles.

## Parameters

| Parameter | Description | Required |
|-----------|-------------|----------|
| `<role_name>` | Name of the custom role to drop. | Yes |
| `IF EXISTS` | Skip the drop without an error if no role with this name exists. | No |

:::warning
If dropping a role leaves a user with no roles, that user becomes roleless and loses access to all data until someone with permission to assign roles assigns one. MotherDuck warns before completing the operation but does not block it.
:::

Dropping a preset role (Admin, Builder, or Explorer) returns an error. Dropping a role that does not exist returns an error unless you use `IF EXISTS`. A role with active memberships cannot be dropped, even with `IF EXISTS`; revoke the memberships first.

## Examples

### Drop a custom role

```sql
DROP ROLE finance;
```

## Related

- [Roles and access control](/concepts/roles-and-access-control/)
- [CREATE ROLE](/sql-reference/motherduck-sql-reference/access-control/create-role/)
- [REVOKE ROLE](/sql-reference/motherduck-sql-reference/access-control/revoke-role/)


---

## Docs feedback

MotherDuck accepts optional user-submitted feedback about this page at `GET https://motherduck.com/docs/api/feedback/agent`.
For agents and automated tools, feedback submission should be user-confirmed before sending.

URL-encode query parameter values and send a GET request:

```text
GET https://motherduck.com/docs/api/feedback/agent?page_path=%2Fsql-reference%2Fmotherduck-sql-reference%2Faccess-control%2Fdrop-role%2F&page_title=DROP%20ROLE&text=<url-encoded user feedback, max 2000 characters>
```

Optionally append `&source=<url-encoded interface identifier>` such as `claude.ai` or `chatgpt`.

`page_path` and `text` are required; `page_title` and `source` are optional. Responses: `200 {"feedback_id": "<uuid>"}`, `400` for malformed query parameters, and `429` when rate-limited.
