SHOW_GRANTS (Lakehouse v1)
Lista os privilégios concedidos explicitamente a um usuário, a uma função ou sobre um objeto específico.
Sintaxe SQL
Seção intitulada “Sintaxe SQL”SHOW_GRANTS('role', '<role_name>')SHOW_GRANTS('user', '<user_name>')SHOW_GRANTS('stage', '<stage_name>')SHOW_GRANTS('udf', '<udf_name>')SHOW_GRANTS('table', '<table_name>', '<catalog_name>', '<db_name>')SHOW_GRANTS('database', '<db_name>', '<catalog_name>')Configuração de enable_expand_roles
Seção intitulada “Configuração de enable_expand_roles”A configuração enable_expand_roles controla se a função SHOW_GRANTS expande a herança de funções ao exibir os privilégios.
-
enable_expand_roles=1(padrão):- SHOW_GRANTS expande recursivamente os privilégios herdados, ou seja, se uma função recebeu outra função, são exibidos todos os privilégios herdados.
- Os usuários também veem todos os privilégios concedidos por meio das funções atribuídas a eles.
-
enable_expand_roles=0:- SHOW_GRANTS exibe apenas os privilégios atribuídos diretamente à função ou ao usuário especificado.
- No entanto, o resultado ainda inclui instruções GRANT ROLE para indicar a herança de funções.
Por exemplo, a função a tem o privilégio SELECT sobre t1, e a função b tem o privilégio SELECT sobre t2:
SELECT grants FROM show_grants('role', 'a') ORDER BY object_id;
┌──────────────────────────────────────────────────────┐│ grants │├──────────────────────────────────────────────────────┤│ GRANT SELECT ON 'default'.'default'.'t1' TO ROLE `a` │└──────────────────────────────────────────────────────┘
SELECT grants FROM show_grants('role', 'b') ORDER BY object_id;
┌──────────────────────────────────────────────────────┐│ grants │├──────────────────────────────────────────────────────┤│ GRANT SELECT ON 'default'.'default'.'t2' TO ROLE `b` │└──────────────────────────────────────────────────────┘Se você conceder a função b à função a e verificar novamente as concessões da função a, verá que o privilégio SELECT sobre t2 agora está incluído na função a:
GRANT ROLE b TO ROLE a;SELECT grants FROM show_grants('role', 'a') ORDER BY object_id;
┌──────────────────────────────────────────────────────┐│ grants │├──────────────────────────────────────────────────────┤│ GRANT SELECT ON 'default'.'default'.'t1' TO ROLE `a` ││ GRANT SELECT ON 'default'.'default'.'t2' TO ROLE `a` │└──────────────────────────────────────────────────────┘Se você definir enable_expand_roles como 0 e verificar novamente as concessões da função a, o resultado mostrará a instrução GRANT ROLE em vez de listar os privilégios específicos herdados da função b:
SET enable_expand_roles=0;SELECT grants FROM show_grants('role', 'a') ORDER BY object_id;
┌──────────────────────────────────────────────────────┐│ grants │├──────────────────────────────────────────────────────┤│ GRANT SELECT ON 'default'.'default'.'t1' TO ROLE `a` ││ GRANT ROLE b to ROLE `a` ││ GRANT ROLE public to ROLE `a` │└──────────────────────────────────────────────────────┘Exemplos de SQL
Seção intitulada “Exemplos de SQL”Este exemplo ilustra como listar os privilégios concedidos a um usuário, a uma função e sobre um objeto específico.
-- Create a new userCREATE USER 'user1' IDENTIFIED BY 'password';
-- Create a new roleCREATE ROLE analyst;
-- Grant the analyst role to the userGRANT ROLE analyst TO 'user1';
-- Create a stageCREATE STAGE my_stage;
-- Grant privileges on the stage to the roleGRANT READ ON STAGE my_stage TO ROLE analyst;
-- List privileges granted to the userSELECT * FROM SHOW_GRANTS('user', 'user1');
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ privileges │ object_name │ object_id │ grant_to │ name │ grants │├────────────┼─────────────┼──────────────────┼──────────┼────────┼─────────────────────────────────────────────┤│ Read │ my_stage │ NULL │ USER │ user1 │ GRANT Read ON STAGE my_stage TO 'user1'@'%' │└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- List privileges granted to the roleSELECT * FROM SHOW_GRANTS('role', 'analyst');
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ privileges │ object_name │ object_id │ grant_to │ name │ grants │├────────────┼─────────────┼──────────────────┼──────────┼─────────┼────────────────────────────────────────────────┤│ Read │ my_stage │ NULL │ ROLE │ analyst │ GRANT Read ON STAGE my_stage TO ROLE `analyst` │└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-- List privileges granted on the stageSELECT * FROM SHOW_GRANTS('stage', 'my_stage');
┌─────────────────────────────────────────────────────────────────────────────────────┐│ privileges │ object_name │ object_id │ grant_to │ name │ grants │├────────────┼─────────────┼──────────────────┼──────────┼─────────┼──────────────────┤│ Read │ my_stage │ NULL │ ROLE │ analyst │ │└─────────────────────────────────────────────────────────────────────────────────────┘