GET_STATEMENT_PERMISSIONS
GET_STATEMENT_PERMISSIONS
analyzes an SQL statement and returns a list of permissions required to execute it.
Use this function to understand the permissions required, before granting them to a specific role.
Learn more about the permission system in the access control guide.
See also GRANT, CREATE ROLE.
Permissions
No special permissions are required to run GET_STATEMENT_PERMISSIONS
.
Syntax
get_statement_permissions_statement ::=
SELECT GET_STATEMENT_PERMISSIONS(query_stmt)
;
Parameters
Parameter |
Description |
---|---|
|
The statement to analyze |
Returns
This utility returns details of the required permissions to run the statement.
If the statement requires no special permissions, the utility returns an empty result set.
|
The permission type required |
---|---|
|
The object on which the permission is required |
|
The object name |
The following table describes the supported permissions:
Permission |
Object |
Description |
---|---|---|
|
Cluster |
Login permissions (with a password) allows a role to be a user and login to a database |
|
Cluster |
Sets the password for a user role |
|
Database |
Allows a user to create a Python UDF |
|
Cluster, Database, Schema |
The most privileged role, with full control over a cluster, database, or schema |
|
Database |
Allows a user to connect and use a database |
|
Database, Schema |
For a role to create and manage objects, it needs the |
|
Schema |
For a role to see tables in a schema, it needs the |
|
Table |
Allows a user to run SELECT queries on table contents |
|
Table |
Allows a user to run COPY FROM and INSERT statements to load data into a table |
|
Table |
Allows a user to modify the value of certain columns in existing rows without creating a table |
|
Table |
Allows a user to run DELETE, TRUNCATE statements to delete data from a table |
|
Database, Schema, Table, Function |
Allows a user to alter tables, rename columns and tables, etc. |
|
Function |
Allows a user to execute UDFs |
|
Cluster, Database, Schema, Table, Function |
All of the above permissions at the respective level |
Examples
Getting permission details for a simple statement
t=> SELECT GET_STATEMENT_PERMISSIONS('SELECT * from nba');
permission_type | object_type | object_name
----------------+-------------+-------------------
SELECT | table | master.public.nba
USAGE | schema | master.public
Getting permission details for a DDL statement
Tip
Use dollar quoting ($$
) to avoid escaping a statement
t=> SELECT GET_STATEMENT_PERMISSIONS($$ALTER TABLE nba RENAME COLUMN "Weight" TO "Mass"$$);
permission_type | object_type | object_name
----------------+-------------+-------------------
DDL | table | master.public.nba
USAGE | schema | master.public