---
title: "ALTER DEFAULT PRIVILEGES"
url: "https://docs.yugabyte.com/stable/api/ysql/the-sql-language/statements/dcl_alter_default_privileges/"
---

# ALTER DEFAULT PRIVILEGES

Use the ALTER DEFAULT PRIVILEGES statement to define the default access privileges.

## Synopsis

Use the `ALTER DEFAULT PRIVILEGES` statement to define the default access privileges.

## Syntax

- [![Grammar Icon](/icons/file-lines.svg)Grammar](#grammar-1)
- [![Diagram Icon](/icons/diagram.svg)Diagram](#diagram-1)

```output.ebnf
alter_default_priv ::= ALTER DEFAULT PRIVILEGES 
                       [ FOR { ROLE | USER } role_name [ , ... ] ]  
                       [ IN SCHEMA schema_name [ , ... ] ] 
                       abbr_grant_or_revoke

abbr_grant_or_revoke ::= a_grant_table
                         | a_grant_seq
                         | a_grant_func
                         | a_grant_type
                         | a_grant_schema
                         | a_revoke_table
                         | a_revoke_seq
                         | a_revoke_func
                         | a_revoke_type
                         | a_revoke_schema

a_grant_table ::= GRANT { grant_table_priv [ , ... ]
                          | ALL [ PRIVILEGES ] } ON TABLES TO 
                  grantee_role [ , ... ]  [ WITH GRANT OPTION ]

a_grant_seq ::= GRANT { grant_seq_priv [ , ... ]
                        | ALL [ PRIVILEGES ] } ON SEQUENCES TO 
                grantee_role [ , ... ]  [ WITH GRANT OPTION ]

a_grant_func ::= GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON 
                 { FUNCTIONS | ROUTINES } TO grantee_role [ , ... ]  
                 [ WITH GRANT OPTION ]

a_grant_type ::= GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO 
                 grantee_role [ , ... ]  [ WITH GRANT OPTION ]

a_grant_schema ::= GRANT { USAGE | CREATE | ALL [ PRIVILEGES ] } ON 
                   SCHEMAS TO grantee_role [ , ... ]  
                   [ WITH GRANT OPTION ]

a_revoke_table ::= REVOKE [ GRANT OPTION FOR ] 
                   { grant_table_priv [ , ... ] | ALL [ PRIVILEGES ] } 
                   ON TABLES  FROM grantee_role [ , ... ] 
                   [ CASCADE | RESTRICT ]

a_revoke_seq ::= REVOKE [ GRANT OPTION FOR ] 
                 { grant_seq_priv [ , ... ] | ALL [ PRIVILEGES ] } ON 
                 SEQUENCES  FROM grantee_role [ , ... ] 
                 [ CASCADE | RESTRICT ]

a_revoke_func ::= REVOKE [ GRANT OPTION FOR ] 
                  { EXECUTE | ALL [ PRIVILEGES ] } ON 
                  { FUNCTIONS | ROUTINES }  FROM grantee_role 
                  [ , ... ] [ CASCADE | RESTRICT ]

a_revoke_type ::= REVOKE [ GRANT OPTION FOR ] 
                  { USAGE | ALL [ PRIVILEGES ] } ON TYPES  FROM 
                  grantee_role [ , ... ] [ CASCADE | RESTRICT ]

a_revoke_schema ::= REVOKE [ GRANT OPTION FOR ] 
                    { USAGE | CREATE | ALL [ PRIVILEGES ] } ON SCHEMAS 
                     FROM grantee_role [ , ... ] 
                    [ CASCADE | RESTRICT ]

grant_table_priv ::= SELECT
                     | INSERT
                     | UPDATE
                     | DELETE
                     | TRUNCATE
                     | REFERENCES
                     | TRIGGER

grant_seq_priv ::= USAGE | SELECT | UPDATE

grantee_role ::= [ GROUP ] role_name
                 | PUBLIC
                 | CURRENT_USER
                 | SESSION_USER
```

#### alter\_default\_priv

ALTERDEFAULTPRIVILEGESFORROLEUSER,[role\_name](/stable/api/ysql/syntax_resources/grammar_diagrams#role-name)INSCHEMA,[schema\_name](/stable/api/ysql/syntax_resources/grammar_diagrams#schema-name)[abbr\_grant\_or\_revoke](#abbr-grant-or-revoke)

#### abbr\_grant\_or\_revoke

[a\_grant\_table](#a-grant-table)[a\_grant\_seq](#a-grant-seq)[a\_grant\_func](#a-grant-func)[a\_grant\_type](#a-grant-type)[a\_grant\_schema](#a-grant-schema)[a\_revoke\_table](#a-revoke-table)[a\_revoke\_seq](#a-revoke-seq)[a\_revoke\_func](#a-revoke-func)[a\_revoke\_type](#a-revoke-type)[a\_revoke\_schema](#a-revoke-schema)

#### a\_grant\_table

GRANT,[grant\_table\_priv](#grant-table-priv)ALLPRIVILEGESONTABLESTO,[grantee\_role](#grantee-role)WITHGRANTOPTION

#### a\_grant\_seq

GRANT,[grant\_seq\_priv](#grant-seq-priv)ALLPRIVILEGESONSEQUENCESTO,[grantee\_role](#grantee-role)WITHGRANTOPTION

#### a\_grant\_func

GRANTEXECUTEALLPRIVILEGESONFUNCTIONSROUTINESTO,[grantee\_role](#grantee-role)WITHGRANTOPTION

#### a\_grant\_type

GRANTUSAGEALLPRIVILEGESONTYPESTO,[grantee\_role](#grantee-role)WITHGRANTOPTION

#### a\_grant\_schema

GRANTUSAGECREATEALLPRIVILEGESONSCHEMASTO,[grantee\_role](#grantee-role)WITHGRANTOPTION

#### a\_revoke\_table

REVOKEGRANTOPTIONFOR,[grant\_table\_priv](#grant-table-priv)ALLPRIVILEGESONTABLESFROM,[grantee\_role](#grantee-role)CASCADERESTRICT

#### a\_revoke\_seq

REVOKEGRANTOPTIONFOR,[grant\_seq\_priv](#grant-seq-priv)ALLPRIVILEGESONSEQUENCESFROM,[grantee\_role](#grantee-role)CASCADERESTRICT

#### a\_revoke\_func

REVOKEGRANTOPTIONFOREXECUTEALLPRIVILEGESONFUNCTIONSROUTINESFROM,[grantee\_role](#grantee-role)CASCADERESTRICT

#### a\_revoke\_type

REVOKEGRANTOPTIONFORUSAGEALLPRIVILEGESONTYPESFROM,[grantee\_role](#grantee-role)CASCADERESTRICT

#### a\_revoke\_schema

REVOKEGRANTOPTIONFORUSAGECREATEALLPRIVILEGESONSCHEMASFROM,[grantee\_role](#grantee-role)CASCADERESTRICT

#### grant\_table\_priv

SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGER

#### grant\_seq\_priv

USAGESELECTUPDATE

#### grantee\_role

GROUP[role\_name](/stable/api/ysql/syntax_resources/grammar_diagrams#role-name)PUBLICCURRENT\_USERSESSION\_USER

## Semantics

`ALTER DEFAULT PRIVILEGES` defines the privileges for objects created in future. It does not affect objects that are already created.

Users can change default privileges only for objects that are created by them or by roles that they are a member of.

## Examples

- Grant SELECT privilege to all tables that are created in schema marketing to all users.
  
  ```plpgsql
  yugabyte=# ALTER DEFAULT PRIVILEGES IN SCHEMA marketing GRANT SELECT ON TABLES TO PUBLIC;
  ```
- Revoke INSERT privilege on all tables from user john.
  
  ```plpgsql
  yugabyte=# ALTER DEFAULT PRIVILEGES REVOKE INSERT ON TABLES FROM john;
  ```

## See also

- [CREATE ROLE](/stable/api/ysql/the-sql-language/statements/dcl_create_role "CREATE ROLE")
- [GRANT](/stable/api/ysql/the-sql-language/statements/dcl_grant "GRANT")
- [REVOKE](/stable/api/ysql/the-sql-language/statements/dcl_revoke "REVOKE")
