Este artigo é compartilhado pela comunidade Huawei Cloud " GaussDB (DWS) 3A Security Capabilities ", autor: yd_281561943.
1. Introdução
- Versão aplicável: [8.0.0 (e superior)]
A segurança do banco de dados refere-se à tecnologia que protege os bancos de dados para evitar que usuários não autorizados roubem, adulterem e destruam informações de dados no banco de dados. A tecnologia de segurança de banco de dados pode ser simplesmente dividida em três As:
- Autenticação: A autenticação resolve o problema de quem tem permissão para entrar (entrada)
- Autorização: Autorização para resolver o problema do que pode ser feito (trabalho)
- Auditoria: A auditoria resolve o problema do que foi feito (monitoramento)
2. Autenticação —— Autenticação
A autenticação de conexão resolve o problema de os usuários poderem efetuar login no banco de dados. Este produto oferece suporte aos seguintes métodos de autenticação:
- Autenticação baseada em host: O servidor verifica o arquivo de configuração com base no endereço IP do cliente, nome de usuário e banco de dados a ser acessado para determinar se o usuário passou na autenticação.
- Autenticação por senha: incluindo autenticação por senha criptografada para conexões remotas e autenticação por senha não criptografada para conexões locais.
- Autenticação de certificado: Este modo requer configuração de conexão SSL e o cliente precisa fornecer um certificado SSL válido, não sendo necessária nenhuma senha de usuário.
- Autenticação de terceiros: ldap, oneaccess, etc.
Todos esses métodos precisam configurar o arquivo "pg_hba.conf", formato de arquivo pg_hba.conf, pg_hba consiste em várias linhas de registros HBA:
O significado de um registro HBA é quais usuários (USER) são permitidos, de quais endereços IP (ADDRESS), em qual tipo de conexão (TYPE), em qual método de autenticação (METHOD) e a quais bancos de dados (DATABASE) conectar.
Durante a autenticação, os registros no arquivo hba são verificados de baixo para baixo para cada solicitação de conexão. Se o registro atual corresponder, ele será retornado. A ordem dos registros do HBA é muito crítica. Essa lógica do hba é muito importante e não deve ser alterada facilmente, caso contrário causará problemas muito sérios.
Caso: Problemas causados por alterações na lógica hba
Houve um problema com a conexão ldap Durante o processo de atualização, os registros no arquivo pg_hba.conf foram classificados, fazendo com que a ordem das linhas de configuração ldap antes e depois da atualização mudasse para o final da linha de configuração sha256. Devido ao mecanismo de passagem sequencial do pg_hba.conf, após a atualização, o usuário ldap corresponde incorretamente à linha de configuração sha256 e a conexão falha.
Para resolver os problemas causados pela mudança de ordem, a primeira versão do plano de modificação é colocar a lógica de julgamento ldap no início da travessia do loop: primeiro observe o tipo de autenticação. Se for autenticação ldap, julgue se o tipo de autenticação. O campo de método da linha de configuração é ldap. Caso contrário, pule para A próxima linha é até que o método seja ldap.
Nesta versão do plano de modificação, as conexões de autenticação ldap correspondem a todos os registros ldap hba. Quando o usuário se conecta ao banco de dados, a conexão pode ser bem-sucedida, mas o negócio não pode ser executado e uma mensagem de erro é relatada: "Nome de usuário/senha inválidos, login negado". A razão é que quando os nós internos executam instruções, a autenticação entre os nós será realizada. O tipo de autenticação é confiável e nenhuma senha será fornecida. Após a modificação, apenas os registros ldap serão correspondidos e o método ldap requer uma senha, reportando assim um erro.
Antes e depois da atualização, os locais das linhas de configuração ldap e sha256 são os seguintes:
Antes de atualizar: hospedar todos @/etc/ldap/ldap_user 0.0.0.0/0 ldap ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com" hospedar todos todos 0.0.0.0/0 sha256 Após a atualização: hospedar todos todos 0.0.0.0/0 sha256 hospedar todos @/etc/ldap/ldap_user 0.0.0.0/0 ldap ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com"
TYPE : type é um dos quatro tipos: local, host, hostssl e hostnossl.
Respectivamente:
local: Somente conexões de soquete de domínio unix são permitidas.
host: permite conexões TCP/IP e pode corresponder a solicitações de conexão SSL e não SSL.
hostssl: Permite conexões TCP/IP e corresponde apenas a solicitações de conexão SSL.
hostnossl: permite conexões TCP/IP e corresponde apenas a solicitações de conexão não SSL.
DATABASE : Você pode usar all para representar todos os bancos de dados ou pode especificar bancos de dados explicitamente separando-os com vírgulas.
USUÁRIO : você pode usar all para representar todos os usuários ou pode especificar usuários explicitamente separando-os com vírgulas. Pode ser o nome de um usuário específico do banco de dados ou um nome de grupo precedido por +. A marca + na verdade significa "corresponder a qualquer função que pertença direta ou indiretamente a esta função", enquanto um nome sem a marca + corresponde apenas a essa função específica.
ENDEREÇO : O endereço ao qual o registro da declaração corresponde e ao qual permite acesso. Quando o tipo é local, significa conexão local e nenhum endereço IP precisa ser especificado.
MÉTODO : Os métodos de autenticação incluem confiança, rejeição, md5, sha256, ldap, cert, oneaccess, etc.
confiança: lista de permissões, permitindo conexões incondicionalmente.
Rejeitar: lista negra, rejeita conexões incondicionalmente.
md5: o método de autenticação de senha do pg não é seguro.
sha256: Autenticação por senha para gaussdb.
ldap: Use LDAP para autenticação de terceiros.
cert: modo de autenticação de certificado de cliente. Este modo requer configuração de conexão SSL e exige que o cliente forneça um certificado SSL válido.
oneaccess: Use oneaccess para autenticação de terceiros.3. Autorização —— Autorização
As permissões indicam se as operações de um usuário em um objeto de banco de dados são permitidas. As permissões no GaussDB (DWS) incluem três cenários: permissões do sistema, permissões de objetos de dados e permissões de usuário.
3.1 Permissões do sistema
3.1.1 Separação de poderes
Por padrão, os administradores do sistema com o atributo SYSADMIN possuem a autoridade mais alta no sistema. Na gestão empresarial real, a fim de evitar altos riscos causados pela concentração excessiva de direitos dos administradores do sistema, a separação de poderes pode ser configurada, e as permissões do atributo CREATEROLE e do atributo AUDITADMIN do administrador do sistema são concedidas ao administrador de segurança e ao administrador de auditoria, respectivamente .
3.1.2 Autorização de permissão do sistema
As permissões do sistema também são chamadas de atributos do usuário, incluindo SYSADMIN, CREATEDB, CREATEROLE, AUDITADMIN e LOGIN.
As permissões do sistema podem ser autorizadas ao criar ou modificar funções ou usuários Na opção da instrução de opção CREATE/ALTER ROLE/USER user_name [WITH], os campos a seguir podem ser configurados para implementar a autorização de permissão do sistema.
SISADMIN | NOSYSADMIN
Determine se uma nova função é um "administrador do sistema". A função com o atributo SYSADMIN possui a autoridade mais alta no sistema. O padrão é NOSYSADMIN.
AUDITADMINISTRAÇÃO | NOAUDITADMIN
Defina se a função possui atributos de gerenciamento de auditoria. O padrão é NOAUDITADMIN.
CRIADODB | NOCREATEDB
Determina se uma nova função pode criar bancos de dados. A nova função não tem permissão para criar bancos de dados. O padrão é NOCREATEDB.
CRIAROL | NOCREATEROLE
Determina se uma função pode criar novas funções (ou seja, executar CREATE ROLE e CREATE USER). Uma função com permissões CREATEROLE também pode modificar e excluir outras funções. O padrão é NOCREATEROLE.
ENTRAR | NOLOGIN
Somente funções com o atributo LOGIN podem efetuar login no banco de dados. Uma função com o atributo LOGIN pode ser considerada um usuário. O padrão é NOLOGIN.3.2 Permissões de objetos de dados
Os objetos de dados incluem tabelas e visualizações, campos designados, bancos de dados, funções, esquemas, etc. Operações como criar, adicionar, excluir, modificar e consultá-los são permissões de objetos de dados. O formato da sintaxe de autorização é: GRANT [privilégios] ON [objetos] TO [usuários], e o formato da sintaxe de revogação de permissão é REVOKE [privilégios] ON [objetos] FROM [usuários].
3.3 Permissões do usuário
3.3.1 Autorização de direitos do usuário
Conceda as permissões de uma função ou usuário a uma ou mais funções ou usuários. Uma função ou usuário autorizado tem as permissões da função ou usuário autorizado. Quando WITH ADMIN OPTION é declarado, o usuário autorizado pode conceder a permissão novamente a outras funções ou usuários e revogar todas as permissões herdadas pela função ou usuário. Quando uma função ou usuário autorizado é alterado ou revogado, as permissões de todos os usuários que herdam a função ou as permissões de usuário serão alteradas de acordo. O formato da sintaxe é GRANT role TO user.
3.3.2 Funções predefinidas
GaussDB (DWS) fornece um conjunto de funções predefinidas, nomeadas começando com "gs_role_". Essas funções predefinidas têm algumas permissões fixas. Quando alguns usuários precisam realizar operações relacionadas, eles só precisam conceder as funções predefinidas aos usuários. As funções predefinidas atuais do GaussDB (DWS) são as seguintes:
4. Auditoria —— Auditoria
Auditoria refere-se ao registro do login e saída do usuário, bem como do comportamento e operações no banco de dados após o login, para que o administrador de segurança do banco de dados possa usar essas informações de log para descobrir o usuário, horário e conteúdo das operações ilegais.
4.1 Definir itens de configuração de auditoria
Para permitir que o banco de dados audite uma determinada função, você precisa ativar a chave principal de auditoria (audit_enabled) e a chave de item de auditoria correspondente (audit_operation_exec). A modificação do valor deste item de configuração durante a operação do banco de dados terá efeito. imediatamente. Não há necessidade de reiniciar o banco de dados.
Há dois pontos a serem observados. Primeiro, se você auditar operações ddl, será necessário configurar audit_system_object para auditar as operações ddl de um objeto específico. itens de configuração específicos são configurados. Controle de parâmetros de itens de auditoria:
4.2 Ver registros de auditoria
O comando de consulta de auditoria é pgxc_query_audit:
selecione * em pgxc_query_audit(timestamptz starttime,timestamptz endtime,audit_log);
starttime e endtime representam respectivamente o horário de início e término do registro de auditoria audit_log representa o novo caminho do arquivo físico do log de auditoria que está sendo visualizado. Quando audit_log não é especificado, as informações do log de auditoria conectadas à instância atual são visualizadas por padrão. Os resultados da consulta de auditoria são os seguintes:
postgres=# cria tabela t1(id int); ERRO: a relação "t1" já existe postgres=# select * from pgxc_query_audit('2021-03-21','2021-03-30') ordenar por limite de descrição de horário de término 1; -[REGISTRO 1]---+-------------------------------- horário de início | 2021-03-21 11:49:41.643+08 hora final | 2021-03-21 11:49:41.652+08 tipo_operação | ddl tipo_auditoria | ddl_table resultado | fracassado nome de usuário | perfadm banco de dados | postgres cliente_conninfo | gsql@[local] nome_objeto | t1 texto_comando | criar tabela t1(id int); detalhe_info | a relação "t1" já existe transação_xid | 0 consulta_id | 1062177 nome_do_nó | cn_5001 thread_id | 139916885260032@669613657906735 porta_local | 6.000 porta_remota |
5. Outras tecnologias de segurança de data warehouse
Exibição de segurança de dados: dessensibilização de dados, controle de acesso em nível de linha.
Armazenamento de segurança de dados: criptografia de armazenamento de dados, criptografia transparente.
Clique para seguir e conhecer as novas tecnologias da Huawei Cloud o mais rápido possível~