Integre Sharding Sphere en SpringBoot para realizar el cifrado y descifrado de datos/desensibilización de datos/texto cifrado de base de datos y consulta de texto sin formato

Escenas

Para evitar la fuga de datos, es necesario cifrar y almacenar los campos de una tabla en la base de datos durante operaciones como la inserción, y mostrarlos en texto sin formato cuando se requiera una consulta.

Esfera fragmentada

ShardingSphere es un ecosistema compuesto por una solución de middleware de base de datos distribuida de código abierto.

Consta de tres productos independientes: Sharding-JDBC, Sharding-Proxy y Sharding-Sidecar (planeado).

 Todos proporcionan fragmentación de datos estandarizados, transacciones distribuidas y funciones de control de bases de datos, y son aplicables a lenguajes Java homogéneos, heterogéneos y nativos de la nube.

y otros diversos escenarios de aplicación.

ShardingSphere se posiciona como un middleware de base de datos relacional, cuyo objetivo es utilizar completa y razonablemente las capacidades informáticas y de almacenamiento de las bases de datos relacionales en escenarios distribuidos.

En lugar de implementar una nueva base de datos relacional. Coexiste con NoSQL y NewSQL pero no se excluyen mutuamente.

Como fronteras de la exploración de nuevas tecnologías, NoSQL y NewSQL son muy recomendables para mirar hacia el futuro y aceptar los cambios.

La desensibilización de datos es solo uno de los módulos, y la siguiente es la descripción del documento oficial.

Desensibilización de datos:: ShardingSphere

Nota:

Blog:
Temperamento pícaro autoritario blog_CSDN Blog-C#, Architecture Road, Blogger en SpringBoot

lograr

1. Cree un nuevo proyecto SpringBoot e introduzca dependencias

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>

2. Modifique la configuración de la fuente de datos original en el archivo de configuración yml para shardingsphere y configure el cifrado y otras reglas relacionadas

Configuración del origen de datos antes de la modificación

# 数据源
spring:
  application:
    name: apiDataDesensitizationDemo
  datasource:
   url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    dbcp2:
      min-idle: 5                                # 数据库连接池的最小维持连接数
      initial-size: 5                            # 初始化连接数
      max-total: 5                               # 最大连接数
      max-wait-millis: 150                       # 等待连接获取的最大超时时间

Configuración de fuente de datos modificada

# 数据源
spring:
  application:
    name: apiDataDesensitizationDemo
  shardingsphere:
    datasource:
      names: ds0
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
       jdbc-url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456

Agregar configuración de reglas relacionadas con el cifrado

# 数据源
spring:
  application:
    name: apiDataDesensitizationDemo
  shardingsphere:
    datasource:
      names: ds0
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
       jdbc-url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456

    encrypt:
      tables:
        t_user:
          columns:
            name:
              #plainColumn: pwd_plain
              cipherColumn: name
              encryptor: pwdEncrypt
      encryptors:
        pwdEncrypt:
          type: AES
          props:
            aes:
              key:
                value: 123456
    props:
      query:
        with:
          cipher:
            column: true #是否使用密文列查询,false 则查询时返回密文,true则查询时返回明文

Tenga en cuenta que en el archivo de configuración aquí, se indica que el atributo de nombre de la tabla t_user debe cifrarse, y la columna de almacenamiento de texto cifrado también se especifica como nombre,

Si necesita almacenar texto sin formato, puede configurar plainColumn.

El siguiente es el cifrador especificado, el tipo AES está integrado y la clave secreta es 123456.

La siguiente configuración #Si se usa la consulta de columna de texto cifrado, false devolverá el texto cifrado al realizar la consulta, true devolverá el texto sin formato al realizar la consulta

3. Cree una nueva tabla de prueba t_user

Luego genere los códigos de cada capa de acuerdo con esta tabla, que se omite aquí.

Solo código de clase de entidad

@Data
public class User implements Serializable {

    private static final long serialVersionUID = -5514139686858156155L;

    private Integer id;

    private Integer userId;

    private String name;

    private Integer age;

}

4. Cree un nuevo controlador para consulta de prueba y consulta

@RequestMapping("user")
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("save")
    public String save() {
        User user = new User();
        user.setUserId(new Random().nextInt( 1000 ) + 1);
        user.setName("张三"+user.getUserId());
        user.setAge(new Random().nextInt( 80 ) + 1);
        userService.insert(user);
        return "save success";
    }

    @RequestMapping("findAll")
    public String findAll() {
        List<User> all = userService.findAll();
        return all.toString();
    }

}

Comience y pruebe la inserción, el resultado es como se muestra en la figura anterior y se almacena como texto cifrado en la base de datos.

Luego llame a la consulta. Cuando la configuración anterior es verdadera, la consulta devuelve texto sin formato

Cámbielo a falso, entonces la consulta es texto cifrado

 

Acho que você gosta

Origin blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131742091
Recomendado
Clasificación