Configuração do controle de acesso¶
Este tópico descreve como configurar a segurança do controle de acesso para objetos protegíveis em sua conta.
Neste tópico:
Administração de contas¶
Designação de usuários adicionais como administradores de conta¶
Por padrão, cada conta tem um usuário que foi designado como administrador de conta (ou seja, o usuário tem a função ACCOUNTADMIN definida pelo sistema). Recomendamos designar pelo menos um outro usuário como administrador de conta. Isto ajuda a garantir que sua conta tenha sempre pelo menos um usuário que possa executar tarefas em nível de conta, especialmente se um dos administradores de sua conta não conseguir fazer o login.
Para estes administradores de conta adicionais, você pode optar por criar novos usuários ou designar usuários existentes, mas certifique-se de especificar o seguinte:
Conceda a função ACCOUNTADMIN ao(s) usuário(s), mas não defina esta função como o padrão dele(s). Em vez disso, designe uma função administrativa de nível inferior (por exemplo, SYSADMIN) ou uma função personalizada como o padrão. Isto ajuda a evitar que os administradores de conta utilizem inadvertidamente a função ACCOUNTADMIN para criar objetos.
Certifique-se de que um endereço de e-mail seja especificado para cada usuário (necessário para autenticação multifator).
Por exemplo, conceda as funções ACCOUNTADMIN e SYSADMIN a um usuário existente chamado user2
e especifique SYSADMIN como a função padrão:
GRANT ROLE ACCOUNTADMIN, SYSADMIN TO USER user2; ALTER USER user2 SET EMAIL='user2@domain.com', DEFAULT_ROLE=SYSADMIN;
Habilitação da MFA para cada administrador de conta¶
Para garantir o mais alto nível de segurança para sua conta Snowflake, recomendamos fortemente que qualquer usuário que possa modificar ou visualizar dados confidenciais seja obrigado a usar a autenticação multifator (MFA) para o login.
Esta recomendação aplica-se particularmente aos usuários com a função ACCOUNTADMIN, mas também pode ser expandida para incluir usuários com as funções SECURITYADMIN e SYSADMIN.
Para obter mais detalhes, consulte Considerações sobre o controle de acesso e Autenticação multifator (MFA).
Criação de funções personalizadas¶
Para seguir o princípio geral do “menor privilégio”, recomendamos a criação de funções personalizadas que se alinhem com as funções empresariais em sua organização para permitir ações SQL sobre um conjunto restrito de objetos protegíveis.
O fluxo de trabalho é o seguinte:
Crie uma função personalizada.
Conceda um conjunto de privilégios para a função.
Conceda a função a um ou mais usuários que necessitam dos privilégios concedidos à função para realizar ações SQL para suas necessidades comerciais.
Conceda a função a outra função para criar ou adicionar a uma hierarquia de funções. Embora não seja necessário, esta etapa é altamente recomendada. Para obter mais informações, consulte Criação de uma hierarquia de funções (neste tópico).
Esta seção fornece instruções para a criação de uma função chamada r1
e a concessão dos seguintes privilégios à função. Os privilégios permitem a um usuário que ativa a função em uma sessão consultar uma única tabela, d1.s1.t1
:
Privilégio |
Objeto |
Notas |
---|---|---|
USAGE |
Warehouse Banco de dados Esquema |
Para consultar um objeto (por exemplo, uma tabela ou exibição), uma função deve ter o privilégio USAGE para um warehouse. O warehouse fornece os recursos computacionais para executar a consulta. Para operar em qualquer objeto de um esquema, uma função deve ter o privilégio USAGE para o banco de dados e o esquema de contêiner. |
SELECT |
Tabela |
Depois que uma função é criada, privilégios adicionais podem ser concedidos a ela para permitir que usuários com a função executem ações SQL adicionais sobre os mesmos objetos ou objetos adicionais.
Criar uma função¶
Crie a função
r1
, usando CREATE ROLE.Somente administradores de usuários (ou seja, usuários com a função do sistema USERADMIN ou superior), ou outra função com o privilégio CREATE ROLE para a conta podem criar funções.
CREATE ROLE r1 COMMENT = 'This role has all privileges on schema_1';
Conceder privilégios para a função¶
Conceda à função
r1
os privilégios definidos na tabela anterior desta seção.A função SECURITYADMIN do sistema pode ser usada para conceder privilégios em objetos a funções. Para obter opções adicionais, consulte GRANT <privilégios>.
GRANT USAGE ON WAREHOUSE w1 TO ROLE r1; GRANT USAGE ON DATABASE d1 TO ROLE r1; GRANT USAGE ON SCHEMA d1.s1 TO ROLE r1; GRANT SELECT ON TABLE d1.s1.t1 TO ROLE r1;
Conceder a função a usuários¶
Atribua a função
r1
ao usuáriosmith
.A função SECURITYADMIN pode ser usada para conceder funções aos usuários. Para obter opções adicionais, consulte GRANT ROLE.
GRANT ROLE r1 TO USER smith;
Opcionalmente, defina a nova função personalizada como a função padrão para o usuário. Da próxima vez que o usuário entrar no Snowflake, a função padrão estará automaticamente ativa na sessão.
Somente a função com o privilégio OWNERSHIP para o usuário, ou uma função superior, pode executar este comando.
O seguinte comando define a função padrão para o usuário
smith
:ALTER USER smith SET DEFAULT_ROLE = r1;
Criação de funções somente leitura personalizadas¶
Suponha que você precise de uma função que se limite a consultar todas as tabelas em um esquema específico (por exemplo, d1.s1
). Os usuários que executam comandos usando esta função não podem atualizar os dados da tabela, criar objetos de banco de dados adicionais ou descartar tabelas. A função limita-se a consultar os dados da tabela.
Para criar uma função somente leitura, complete as etapas básicas descritas em Criação de funções personalizadas (neste tópico). Na seção Conceder privilégios para a função, conceda à função somente leitura (denominada read_only
nestas instruções) os seguintes privilégios de objeto:
Privilégio |
Objeto |
Notas |
---|---|---|
USAGE |
Warehouse |
Para consultar um objeto (por exemplo, uma tabela ou exibição), uma função deve ter o privilégio USAGE para um warehouse. O warehouse fornece os recursos computacionais para executar a consulta. |
SELECT |
Tabela |
Para operar em qualquer objeto de um esquema, uma função deve ter o privilégio USAGE para o banco de dados e o esquema de contêiner. |
As instruções de GRANT <privilégio> são:
GRANT USAGE
ON DATABASE d1
TO ROLE read_only;
GRANT USAGE
ON SCHEMA d1.s1
TO ROLE read_only;
GRANT SELECT
ON ALL TABLES IN SCHEMA d1.s1
TO ROLE read_only;
GRANT USAGE
ON WAREHOUSE w1
TO ROLE read_only;
Nota
A instrução GRANT SELECT ON ALL TABLES IN SCHEMA <esquema>
concede o privilégio SELECT apenas para todas as tabelas existentes. Para conceder à função o privilégio SELECT para todas as tabelas futuras, execute a seguinte instrução:
GRANT SELECT ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE read_only;
Criação de uma hierarquia de funções¶
Ao criar funções personalizadas, considere a possibilidade de criar uma hierarquia de funções atribuída em última instância a uma função de administrador de alto nível. Em geral, a função SYSADMIN funciona bem como a função à qual todas as outras funções são atribuídas em uma hierarquia, embora seja importante notar que qualquer função com privilégios suficientes poderia servir a esta função. A função SYSADMIN é uma função definida pelo sistema que tem privilégios para criar warehouses, bancos de dados e objetos de banco de dados em uma conta e conceder esses privilégios a outras funções. Na hierarquia padrão do sistema, a função de nível superior ACCOUNTADMIN gerencia a função de administrador do sistema.
Crie uma hierarquia de funções concedendo uma função a uma segunda função. Você pode então conceder essa segunda função a uma terceira função. Os privilégios associados a uma função são herdados por quaisquer funções acima dessa função na hierarquia (ou seja, a função pai).
O diagrama a seguir mostra um exemplo de hierarquia de funções e os privilégios concedidos a cada função:
Atribuir uma função a outra função¶
Atribua a função a uma função de nível superior em uma hierarquia de funções. Neste exemplo, estamos atribuindo a função r1
criada em Criação de funções personalizadas (neste tópico) à função SYSADMIN. A função SYSADMIN herda qualquer privilégio de objeto concedido à função r1
:
GRANT ROLE r1 TO ROLE sysadmin;
Nota
Em um exemplo mais complexo, você pode atribuir a função custom
a outra função filha de SYSADMIN (ou outra função de administrador, tal como uma função personalizada com privilégios suficientes para criar bancos de dados). A função SYSADMIN herdaria os privilégios combinados atribuídos à função custom
e à sua função pai. Se a função acima de custom
na hierarquia possuísse algum objeto, então a hierarquia de funções asseguraria que os membros da função SYSADMIN também fossem proprietários desses objetos (indiretamente) e pudessem administrá-los como esperado.
Visualização dos privilégios concedidos¶
Para visualizar o conjunto atual de privilégios concedidos para um objeto, você pode executar o comando SHOW GRANTS.
Nota
A execução do comando SHOW GRANTS em um objeto específico requer os mesmos privilégios de objeto que a execução do comando SHOW para esse tipo de objeto.
Por exemplo, a execução do comando SHOW GRANTS em uma tabela requer os seguintes privilégios na tabela e no banco de dados e esquema de contêiner:
- Banco de dados:
USAGE
- Esquema:
USAGE
- Tabela:
qualquer privilégio
Por exemplo, para visualizar as permissões atuais em um esquema, execute o seguinte comando:
SHOW GRANTS ON SCHEMA <database_name>.<schema_name>;
Por exemplo, execute o seguinte comando para ver os privilégios em database_a.schema_1
que foram concedidos em Criação de funções personalizadas (neste tópico):
SHOW GRANTS ON SCHEMA database_a.schema_1;
O Snowflake retorna os seguintes resultados:
+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+ | created_on | privilege | granted_on | name | granted_to | grantee_name | grant_option | granted_by | |-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------| | 2022-03-07 09:04:23.635 -0800 | USAGE | SCHEMA | D1.S1 | ROLE | R1 | false | SECURITYADMIN | +-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+
Você também pode executar o comando SHOW GRANTS para visualizar o conjunto atual de privilégios concedidos a uma função, ou o conjunto atual de funções concedidas a um usuário:
SHOW GRANTS TO ROLE <role_name>; SHOW GRANTS TO USER <user_name>;
Por exemplo, execute o seguinte comando para visualizar os privilégios concedidos para a função r1
criada em Criação de funções personalizadas (neste tópico):
SHOW GRANTS TO ROLE r1;
O Snowflake retorna os seguintes resultados:
+-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+ | created_on | privilege | granted_on | name | granted_to | grantee_name | grant_option | granted_by | |-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------| | 2022-03-07 09:08:43.773 -0800 | USAGE | DATABASE | D1 | ROLE | R1 | false | SECURITYADMIN | | 2022-03-07 09:08:55.253 -0800 | USAGE | SCHEMA | D1.S1 | ROLE | R1 | false | SECURITYADMIN | | 2022-03-07 09:09:07.206 -0800 | SELECT | TABLE | D1.S1.T1 | ROLE | R1 | false | SECURITYADMIN | | 2022-03-07 09:08:34.838 -0800 | USAGE | WAREHOUSE | W1 | ROLE | R1 | false | SECURITYADMIN | +-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+
Atribuição de concessões futuras para objetos¶
Para simplificar o gerenciamento de concessões, concessões futuras permitem definir um conjunto inicial de privilégios para conceder para objetos novos (ou seja, futuros) de um determinado tipo em um banco de dados ou esquema. À medida que novos objetos são criados no banco de dados ou esquema, os privilégios definidos são automaticamente concedidos a uma função específica.
As concessões futuras somente definem o conjunto inicial de privilégios concedidos para novos objetos de um tipo específico. Depois que um objeto individual é criado, os administradores podem conceder explicitamente privilégios adicionais ou revogar privilégios para o objeto. Isto permite um controle de acesso refinado para todos os objetos do esquema ou banco de dados.
Considerações¶
Quando concessões futuras são definidas no mesmo tipo de objeto para um banco de dados e um esquema no mesmo banco de dados, as concessões no nível do esquema têm precedência sobre as concessões no nível do banco de dados, e as concessões no nível do banco de dados são ignoradas. Esse comportamento se aplica a privilégios sobre objetos futuros concedidos a uma função ou funções diferentes.
Por exemplo, as seguintes instruções concedem privilégios diferentes sobre objetos do mesmo tipo nos níveis do banco de dados e do esquema.
Conceder o privilégio SELECT em todas as tabelas futuras do banco de dados
d1
à funçãor1
:GRANT SELECT ON FUTURE TABLES IN DATABASE d1 TO ROLE r1;
Conceder os privilégios INSERT e DELETE em todas as tabelas futuras no esquema
d1.s1
à funçãor2
:GRANT INSERT,DELETE ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE r2;
As futuras concessões atribuídas à função
r1
nos tipos de objeto no esquemad1.s1
são completamente ignoradas. Quando novas tabelas são criadas no esquemad1.s1
, somente os privilégios futuros definidos nas tabelas para a funçãor2
são concedidos.Concessões futuras em nível de banco de dados se aplicam tanto a esquemas de acesso regular quanto a esquemas de acesso gerenciado.
Definição de concessões futuras para objetos de banco de dados ou esquema¶
Conceda privilégios em objetos futuros de um tipo específico usando o comando GRANT <privilégios> com as palavras-chave ON FUTURE.
Revogação de concessões futuras para objetos de banco de dados ou esquema¶
Revogue concessões em objetos futuros usando o comando REVOKE <privilégios> com as palavras-chave ON FUTURE.
Clonagem de objeto e concessões futuras¶
Quando um banco de dados ou esquema é clonado, as concessões futuras são copiadas para seu clone. Este comportamento mantém a coerência com as concessões de objetos regulares; isto é, concessões de privilégios em um objeto de origem (ou seja, banco de dados) não são copiadas para seus clones, mas concessões de privilégios em todos os objetos filho (ou seja, tabelas no banco de dados) são copiadas para os clones.
Quando um objeto em um esquema é clonado, quaisquer concessões futuras definidas para esse tipo de objeto no esquema são aplicadas ao objeto clonado, a menos que a opção COPY GRANTS esteja especificada na instrução CREATE <objeto> para a operação de clonagem. Nesse caso, o novo objeto reterá as permissões de acesso do objeto original e não herdará qualquer futura concessão para objetos desse tipo.
Gerenciamento de concessões futuras usando o console clássico¶
Você também pode definir concessões futuras usando a Classic Console:
- Concessões para objetos de banco de dados futuros:
Selecione a linha para um banco de dados específico. O painel de segurança é aberto.
Selecione Grant Privileges. A caixa de diálogo Grant Privileges é aberta.
A partir da lista suspensa Grant privileges on, selecione future
object_type
para definir concessões futuras para novos objetos de um tipo específico de objeto.Nas listas suspensas restantes, selecione os privilégios que você está concedendo para novos objetos do tipo especificado, bem como a função à qual os privilégios serão concedidos.
Selecione Grant Privileges.
- Concessões para objetos de esquema futuros:
Selecione a linha para um esquema específico. O painel de segurança é aberto.
Selecione Grant Privileges. A caixa de diálogo Grant Privileges é aberta.
A partir da lista suspensa Grant privileges on, selecione future
object_type
para definir concessões futuras para novos objetos de um tipo específico de objeto.Nas listas suspensas restantes, selecione os privilégios que você está concedendo para novos objetos do tipo especificado, bem como a função à qual os privilégios serão concedidos.
Selecione Grant Privileges.
Para gerenciar concessões futuras em Snowsight, execute instruções SQL em uma planilha.
Criação de esquemas de acesso gerenciado¶
Os esquemas de acesso gerenciados melhoram a segurança ao bloquear o gerenciamento de privilégios para objetos.
Em esquemas regulares (ou seja, não gerenciados), os proprietários de objetos (ou seja, uma função com o privilégio OWNERSHIP para um objeto) podem conceder acesso a seus objetos para outras funções, com a opção de também conceder a essas funções a capacidade de gerenciar concessões de objetos.
Com esquemas de acesso gerenciado, os proprietários de objetos perdem a capacidade de tomar decisões de concessão. Somente o proprietário do esquema (ou seja, a função com o privilégio OWNERSHIP para o esquema) ou uma função com o privilégio MANAGE GRANTS pode conceder privilégios para objetos no esquema, incluindo concessões futuras, centralizando o gerenciamento de privilégios.
Você pode criar um esquema de acesso gerenciado usando a interface da Web ou SQL:
- Classic Console:
- SQL:
Execute uma instrução CREATE SCHEMA com as palavras-chave WITH MANAGED ACCESS.
Você pode mudar um esquema regular para um esquema de acesso gerenciado (ou vice-versa) usando a interface da Web ou SQL:
- Classic Console:
Clique em Databases » <nome_bd> » Schemas » <nome_esquema> » Alter a schema.
- SQL:
Execute uma instrução ALTER SCHEMA com as palavras-chave ENABLE | DISABLE MANAGED ACCESS.
A tabela a seguir indica quais funções podem gerenciar privilégios de objetos em um esquema de acesso regular ou gerenciado:
Função |
Pode conceder privilégios de objeto em um esquema regular |
Pode conceder privilégios de objeto em um esquema de acesso gerenciado |
---|---|---|
SYSADMIN |
Não |
Não |
SECURITYADMIN ou superior |
Sim |
Sim |
Proprietário do banco de dados |
Não |
Não |
Proprietário do esquema |
Não |
Sim |
Proprietário do objeto |
Sim |
Não |
Qualquer função com o privilégio MANAGE GRANTS |
Sim |
Sim |
Gerenciamento de privilégios de objetos com o Snowsight¶
Você pode usar Snowsight para gerenciar concessões de privilégios de objeto de banco de dados para funções. Para gerenciar essas concessões, use uma função com o privilégio OWNERSHIP no objeto ou com o privilégio global MANAGE GRANTS.
Quando você usa Snowsight para gerenciar concessões, isso é equivalente a executar um comando GRANT PRIVILEGE ou REVOKE PRIVILEGE em SQL. Por exemplo, você pode usar Snowsight para conceder o privilégio USAGE em uma exibição à função ACCOUNTADMIN.
Concessão de privilégios nos objetos¶
Para conceder privilégios de objeto de banco de dados a uma função, faça o seguinte:
Entre em Snowsight.
Selecione Data » Databases.
Para um banco de dados e um esquema específicos, selecione um objeto de banco de dados ao qual você deseja conceder privilégios.
Em Object Details, localize a seção Privileges.
Selecione + Privilege.
Selecione a função à qual deseja conceder os privilégios.
Selecione o privilégio que você deseja conceder à função.
Se você quiser que a função possa conceder o privilégio a outras funções, selecione Grant option.
Repita os passos para cada privilégio do objeto que você deseja conceder à função.
Selecione Grant Privileges.
Revogação de privilégios nos objetos¶
Para revogar privilégios de objeto de banco de dados de uma função, faça o seguinte:
Entre em Snowsight.
Selecione Data » Databases.
Para um banco de dados e um esquema específicos, selecione um objeto de banco de dados do qual você deseja revogar privilégios.
Em Object Details, localize a seção Privileges.
Para uma função específica listada, selecione o ícone de lápis Edit Role que aparece quando você passa o mouse sobre a linha.
Na caixa de diálogo exibida, selecione x para revogar um privilégio de uma função específica.
Selecione Update Privileges.
Identificação dos privilégios concedidos às funções¶
Para mostrar os privilégios concedidos em uma função específica, você pode executar o comando SHOW GRANTS ou fazer o seguinte em Snowsight:
Entre em Snowsight.
Selecione Admin » Users & Roles » Roles.
Selecione Table e localize a função para a qual deseja visualizar os privilégios concedidos.
Selecione a função para a qual deseja visualizar os privilégios concedidos para visualizar os detalhes.
Revise a seção Privileges da função.
Habilitação de administradores sem conta para monitorar o uso e o histórico de faturamento no console clássico¶
O Snowflake fornece extensas informações de uso de conta e faturamento sobre armazenamento/transferência de dados e uso/carga de warehouse:
- Snowsight:
Select Admin » Cost Management.
- Classic Console:
- SQL:
Consulte qualquer um dos seguintes:
Funções de tabela (em Snowflake Information Schema):
Exibições (em Account Usage):
Por padrão, estas informações podem ser acessadas/visualizadas somente por administradores de conta.
Nota
Atualmente, o Snowsight exibe informações de uso e faturamento apenas aos administradores de conta. Não é possível conceder a outras funções a capacidade de visualizar estas informações.
Para permitir aos usuários que não são administradores de conta acessar/visualizar estas informações, conceda os seguintes privilégios a uma função definida pelo sistema ou personalizada. A concessão de privilégios a uma função permite que todos os usuários a quem é concedida a função tenham acesso a essas informações históricas/de utilização:
Privilégio
Objeto
Descrição
MONITOR USAGE
Conta (ou seja, privilégio global)
Permite aos usuários a quem foi concedida a função visualizar as informações de uso e faturamento na interface da Web e consultar as funções da tabela correspondente no Information Schema.
Além disso, com este privilégio, os comandos SHOW DATABASES e SHOW WAREHOUSES retornam as listas de todos os bancos de dados e warehouses da conta, respectivamente, independentemente de outras concessões de privilégio.
IMPORTED PRIVILEGES
Banco de dados
snowflake
Permite aos usuários a quem foi concedida a função consultar todas as exibições ACCOUNT USAGE, incluindo as exibições que contêm informações de uso e faturamento.
Para obter mais informações, consulte Habilitação do uso do banco de dados SNOWFLAKE para outras funções.
Por exemplo, para conceder estas permissões para a função custom
:
GRANT MONITOR USAGE ON ACCOUNT TO ROLE custom;
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE custom;