Registros

Visão geral

Para usar um recurso como um modelo ou uma oferta de dados em uma colaboração, primeiro você deve gravá-lo em um registro. Registro é um contêiner no nível da conta projetado para armazenar esses recursos. Depois de ser registrado, qualquer recurso no registro poderá ser vinculado a uma colaboração por qualquer usuário em sua conta que tenha acesso ao registro e as permissões de vinculação necessárias para aquela colaboração específica. Vale destacar que os registros são independentes das colaborações específicas. Um recurso registrado pode ser vinculado a qualquer número de colaborações, ou a nenhuma, nessa conta.

Cada conta Snowflake é compatível com um registro padrão. Você pode criar registros personalizados adicionais para sua conta. Os registros personalizados são uma boa maneira de agrupar e gerenciar o acesso aos seus recursos. Por exemplo, você pode criar um registro personalizado para dados de vendas e outro para dados de despesas e, em seguida, conceder acesso a esses registros para os usuários apropriados por meio de privilégios DCR e funções RBAC personalizadas.

Regras de registro

Aqui estão as principais regras sobre registros:

  • Os registros são objetos no nível da conta. Os usuários podem ver e acessar somente os registros na própria conta. Entretanto, quando um recurso em um registro é vinculado a uma colaboração, o recurso fica visível para qualquer pessoa que possa acessá-lo de acordo com a especificação. Não é necessário acesso ao registro que o contém.

  • Cada registro personalizado é compatível com um único tipo de recurso (modelo, oferta de dados, etc.). O tipo de recurso é especificado quando você cria o registro. O registro padrão é compatível com qualquer tipo de recurso.

  • Não há limite para o número de registros personalizados que você pode criar em uma conta.

  • Ao registrar um recurso, você pode usar o parâmetro de nome de registro opcional para especificar um registro personalizado. Se você não especificar um registro personalizado, o recurso será gravado no registro padrão da conta.

  • Todos os usuários têm acesso ao registro padrão de uma conta. Os registros personalizados, no entanto, são inicialmente privados para o criador, e usuários adicionais devem ter o acesso concedido explicitamente pela chamada de GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE.

  • Uma conta pode ter vários registros que armazenam o mesmo tipo de recurso.

  • Os registros não têm um número máximo de recursos.

  • Um recurso deve ter um nome exclusivo em todos os registros dessa conta para recursos desse tipo. Por exemplo, você pode ter um modelo chamado sales e uma oferta de dados chamada sales na mesma conta, mas não dois modelos chamados sales no mesmo registro ou em registros diferentes na mesma conta. O nome do recurso é definido como o valor name de nível mais alto na especificação.

  • Se duas contas diferentes vincularem recursos com o mesmo nome e tipo a uma colaboração, isso será permitido. A especificação da colaboração mostrará recursos com nomes idênticos, mas o sistema saberá qual recurso é o pretendido. O recurso com esse nome é usado da conta que vinculou o recurso à colaboração.

Exemplo

Este exemplo cria um registro personalizado, registra um modelo nele e concede acesso de leitura a esse registro por meio de uma nova função. Os usuários com essa função podem vincular os modelos nesse registro a uma colaboração.

-- Create a custom registry that can hold templates.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.CREATE_REGISTRY(
  'SALES',
  'TEMPLATE'
);

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE(
'SALES',
$$
api_version: 2.0.0
spec_type: template
name: alice_only_template
version: v1
type: sql_analysis
description: Joins two tables on hashed email and counts matches grouped by status.
template:
  SELECT t1.status, COUNT(*)
    FROM IDENTIFIER( {{ source_table[0] }} ) AS t1
    JOIN IDENTIFIER( {{ source_table[1] }} ) AS t2
    ON t1.hashed_email_b64_encoded = t2.hashed_email_b64_encoded
    GROUP BY t1.status;
$$
);

-- Create a role and grant it access to the registry.
CREATE ROLE MARKETING_USERS;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.ADMIN.GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE(
  'READ',
  'REGISTRY',
  'SALES',
  'MARKETING_USERS'
);

-- Grant access to the registry for a user by assigning the role.
GRANT ROLE MARKETING_USERS to USER willy_loman;