O LindormTSDB protege seus dados por meio de controle de acesso multicamada. No nível do mecanismo, a autenticação de usuário e a verificação de permissões aplicam o controle de acesso — esse recurso vem desativado por padrão. Este tópico explica como ativar a autenticação, adicionar credenciais às conexões do cliente e compreender o modelo de permissões.
Controle de acesso no LindormTSDB
O LindormTSDB aplica o controle de acesso em três camadas:
RAM: o Resource Access Management (RAM) da Alibaba Cloud define quais contas podem acessar a instância.
Camada física: listas de permissões de IP no nível da instância. Para obter mais informações, consulte Configurar listas de permissões.
Camada lógica: autenticação de usuário e verificação de permissões no nível do mecanismo, conforme descrito neste tópico.
Antes de ativar a autenticação
A ativação da autenticação interrompe qualquer conexão de serviço existente sem credenciais. Antes de prosseguir, conclua as etapas a seguir:
Verifique as credenciais do usuário inicial. Toda instância do Lindorm possui um usuário inicial. Nas instâncias com LindormTSDB 3.4.30 ou anterior, o nome de usuário e a senha padrão são
root. Nas versões posteriores, ambos sãoroot_tsdb. Altere a senha imediatamente após criar a instância.Atualize todas as strings de conexão das aplicações para incluir as credenciais.
Planeje as reinicializações dos serviços. Após ativar a autenticação, qualquer serviço em execução sem credenciais na conexão falhará. Programe janelas de manutenção adequadamente.
Ativar a autenticação
Execute a seguinte instrução SQL para ativar a autenticação:
ALTER SYSTEM SET USER_AUTH=TRUE;
Para verificar se a autenticação está ativada:
SHOW PARAMETER USER_AUTH;
Para desativar a autenticação, execute ALTER SYSTEM SET USER_AUTH=FALSE;. Desativar a autenticação remove todos os controles de acesso e expõe a instância a riscos de segurança. Mantenha a autenticação ativada em ambientes de produção.
Conectar-se com credenciais
Após ativar a autenticação, todas as conexões de cliente devem incluir nome de usuário e senha. O usuário também precisa ter as permissões apropriadas no banco de dados ou tabela de destino.
lindorm-cli
lindorm-cli -url <Endpoint for LindormTSDB SQL> -username <Username> -password <Password> -database <Database name>
Para obter mais informações, consulte Usar o Lindorm-cli para conectar e utilizar o LindormTSDB.
JDBC
String url = "<Endpoint for LindormTSDB SQL>";
String username = "<Username>";
String password = "<Password>";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
// Perform operations after the client is connected to LindormTSDB.
} catch (SQLException e) {
e.printStackTrace();
}
Para obter mais informações, consulte Tutorial: Usar o driver JDBC do Lindorm para conectar e utilizar o LindormTSDB.
Pool de conexões Druid
dataSource.setDriver(DriverManager.getDriver("<Endpoint for LindormTSDB SQL>"))
dataSource.setUrl("<Endpoint for LindormTSDB SQL>")
dataSource.setUsername("<Username>")
dataSource.setPassword("<Password>")
Para obter mais informações, consulte Tutorial: Usar o pool de conexões Druid para conectar ao LindormTSDB.
HTTP API
Aplicações que utilizam operações da HTTP API compatível com OpenTSDB devem incluir credenciais no cabeçalho Authorization como uma string codificada em Base64.
O exemplo a seguir constrói o cabeçalho de autorização e envia uma solicitação SQL:
import base64
import requests
url = "<HTTP Endpoint for LindormTSDB>/api/v2/sql"
username = "<Username>"
password = "<Password>"
# Encode credentials as Base64
credentials = base64.b64encode(f"{username}:{password}".encode()).decode()
headers = {
"Content-Type": "text/plain",
"Authorization": f"Basic {credentials}"
}
response = requests.post(url, headers=headers, data="SELECT * FROM my_table LIMIT 10")
print(response.json())
Para aplicações que usam SDKs do TSDB, passe as credenciais pelo método basicAuth ao criar um objeto TSDBConfig.
Para consultar a especificação completa de autenticação, veja Especificar credenciais de usuário para autenticação. Para obter detalhes sobre o formato da solicitação, consulte Conteúdo da solicitação.
Modelo de permissões
Tipos de permissão
O LindormTSDB define quatro tipos de permissão:
|
Permissão |
Descrição |
|
READ |
Necessária para consultar dados em tabelas. |
|
WRITE |
Necessária para gravar dados em tabelas. |
|
ADMIN |
Necessária para gerenciar objetos de dados (criar, alterar ou excluir bancos de dados e tabelas). |
|
SYSTEM |
Necessária para operações que afetam toda a instância. |
As permissões efetivas de um usuário correspondem à união de todas as permissões concedidas. Por exemplo, um usuário com GLOBAL READ e DATABASE READ em DB1 pode consultar dados em todos os bancos de dados.
Escopos de permissão
As permissões são concedidas em dois escopos:
GLOBAL: aplica-se a todos os bancos de dados e tabelas da instância. Um usuário com GLOBAL READ pode consultar qualquer tabela de séries temporais em qualquer banco de dados.
DATABASE: aplica-se a todas as tabelas dentro de um banco de dados específico. Um usuário com READ em
DB1pode consultar qualquer tabela de séries temporais nessa base.
Regras de autorização
O escopo da permissão SYSTEM é sempre GLOBAL e não pode ser restrito a um único banco de dados.
Somente usuários com permissões GLOBAL ADMIN ou SYSTEM podem criar, excluir, modificar ou autorizar outros usuários.
Gerencie usuários e permissões
Usar SQL
Utilize as seguintes instruções SQL para gerenciar usuários e permissões:
|
Tarefa |
Referência SQL |
|
Crie um usuário |
|
|
Exclua um usuário |
|
|
Modifique a senha de um usuário |
|
|
Listar todos os usuários |
|
|
Conceder permissões |
|
|
Revogar permissões |
Usar o sistema de gerenciamento de cluster
O LindormTSDB e o LindormTable compartilham dados de usuários e permissões. Se o LindormTable estiver ativado, faça login no sistema de gerenciamento de cluster do LindormTable para gerenciar usuários e permissões. Para obter mais informações, consulte Fazer login no sistema de gerenciamento de cluster.
O sistema de gerenciamento de cluster suporta a permissão TRASH, mas ela não se aplica ao LindormTSDB.
Se um namespace no LindormTable tiver o mesmo nome de um banco de dados no LindormTSDB, qualquer usuário com permissões nesse namespace terá automaticamente acesso ao banco de dados homônimo no LindormTSDB.
Referência de permissões
Permissões necessárias para instruções SQL
A tabela a seguir lista as permissões necessárias para executar instruções SQL comuns. Para identificar as permissões exigidas por uma instrução específica, localize a linha correspondente e verifique quais colunas estão marcadas com ○.
○ = obrigatório, × = não obrigatório.
|
Instrução SQL |
GLOBAL READ |
GLOBAL WRITE |
GLOBAL ADMIN |
GLOBAL SYSTEM |
DATABASE READ |
DATABASE WRITE |
DATABASE ADMIN |
|
|
○ |
× |
× |
× |
○ |
× |
× |
|
|
× |
○ |
× |
× |
× |
○ |
× |
|
|
○ |
○ |
× |
× |
○ |
○ |
× |
|
|
× |
× |
○ |
× |
× |
× |
○ |
|
|
× |
× |
○ |
× |
× |
× |
× |
|
|
× |
× |
○ |
× |
× |
× |
○ |
|
|
× |
× |
○ |
× |
× |
× |
○ |
|
|
× |
× |
○ |
× |
× |
× |
× |
|
|
○ |
× |
× |
× |
○ |
× |
× |
|
|
× |
× |
○ |
× |
× |
× |
○ |
|
|
× |
× |
○ |
× |
× |
× |
○ |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
○ |
○ |
× |
× |
× |
|
|
× |
× |
× |
○ |
× |
× |
× |
|
|
× |
× |
× |
○ |
× |
× |
× |
A instrução INSERT INTO...SELECT... exige permissão WRITE na tabela de destino e READ na tabela de origem.
Permissões necessárias para operações da HTTP API compatível com OpenTSDB
Todas as operações da HTTP API compatível com OpenTSDB exigem permissões no escopo GLOBAL. ○ = obrigatório, × = não obrigatório.
|
Operação da API |
GLOBAL WRITE |
GLOBAL READ |
GLOBAL ADMIN |
|
|
○ |
× |
× |
|
|
× |
○ |
× |
|
|
× |
○ |
× |
|
|
○ |
× |
× |
|
|
× |
○ |
× |
|
|
× |
○ |
× |
|
|
× |
○ |
× |
|
|
× |
○ |
× |
|
|
× |
○ |
× |
|
|
× |
× |
○ |
|
|
× |
× |
○ |