使用postgresql驱动和MyBatis连接OpenGauss,识别数据库三权分立的管理员权限,识别用户或角色对数据库和表格的操作权限,识别所有用户列表。
使用方法
通过git下载源码
导入/lib/opengauss-jdbc-3.1.0.jar /lib/postgresql.jar jar包,
更新Maven依赖
更新数据库链接信息
软件需求
-
JDK 8
-
SpringBoot 2.4.2
-
Maven
-
mybatis-plus 3.5.3
-
LayUI
F:\项目\gaussTest>tree /F
卷 work 的文件夹 PATH 列表
卷序列号为 D4FA-828F
F:.
│ .gitignore
│ pom.xml
│ README.md
│
├─lib
│ └─openGauss-3.1.0-JDBC
│ opengauss-jdbc-3.1.0.jar
│ postgresql.jar
│ README_cn.md
│ README_en.md
│
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─mcx
│ │ │ └─gaussprivilege
│ │ │ │ GaussTestApplication.java
│ │ │ │
│ │ │ ├─controller
│ │ │ │ AuditAdminController.java
│ │ │ │ CreateRoleAdminController.java
│ │ │ │ PgUserController.java
│ │ │ │ RolDatPrivilegeController.java
│ │ │ │ RolTablePrivilegeController.java
│ │ │ │ SysAdminController.java
│ │ │ │ TableController.java
│ │ │ │ TestController.java
│ │ │ │
│ │ │ ├─dao
│ │ │ │ AuditAdminMapper.java
│ │ │ │ CreateRoleAdminMapper.java
│ │ │ │ PgUserMapper.java
│ │ │ │ RolDatPrivilegeMapper.java
│ │ │ │ RolTablePrivilegeMapper.java
│ │ │ │ SysAdminMapper.java
│ │ │ │ TableMapper.java
│ │ │ │ TbClassMapper.java
│ │ │ │
│ │ │ ├─entity
│ │ │ │ PgUser.java
│ │ │ │ RolDatPrivilege.java
│ │ │ │ RoleAdmin.java
│ │ │ │ RolTablePrivilege.java
│ │ │ │ Table.java
│ │ │ │ TbClass.java
│ │ │ │
│ │ │ ├─service
│ │ │ │ AuditAdminService.java
│ │ │ │ CreateRoleAdminService.java
│ │ │ │ PgUserService.java
│ │ │ │ RolDatPrivilegeService.java
│ │ │ │ RolTablePrivilegeService.java
│ │ │ │ SysAdminService.java
│ │ │ │ TableService.java
│ │ │ │ TbClassService.java
│ │ │ │
│ │ │ └─test
│ │ │ jdbcDriverTest.java
│ │ │
│ │ └─resources
│ │ │ application.properties
│ │ │ GaussApiTest.http
│ │ │
│ │ ├─JDBCLIB
│ │ │ opengauss-jdbc-3.1.0.jar
│ │ │ postgresql.jar
│ │ │
│ │ └─static
│ │ │ index.html
│ │ │
│ │ ├─image
│ │ │ 三权分立-安全.drawio.svg
│ │ │ 三权分立-审计.drawio.svg
│ │ │ 三权分立-系统.drawio.svg
│ │ │ 三权分立.drawio
│ │ │ 三权分立.pngpom.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>gaussTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gaussTest</name>
<description>gaussTest</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.4.2</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.mcx.gaussprivilege.GaussTestApplicationcom.mcx.gaussprivilege.GaussTestApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
手动导入postgresql和opengauss的jar包。
application.properties
server.port=8080
#spring.datasource.url=jdbc:postgresql://103.91.210.232:11343/db_department
spring.datasource.url=jdbc:postgresql://192.168.161.18:5432/db_department
spring.datasource.username=admin_department
spring.datasource.password=OpenGauss@123
spring.datasource.driver-class-name=org.postgresql.Driver
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.configuration.map-underscore-to-camel-case=true举例:
在entitys目录下创建“RolTablePrivilege.java”实体类
package com.example.gausstest.entity;
import lombok.Data;
@Data
public class RolTablePrivilege {
private String rolName;
private String tableName;
private String privileges;
}在dao目录下创建“RolTablePrivilegeMapper.java”
package com.example.gausstest.dao;
import entity.com.mcx.gaussprivilege.RolTablePrivilege;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface RolTablePrivilegeMapper {
@Select("SELECT grantee AS rol_name, table_name, string_agg(privilege_type, ', ') AS privileges FROM information_schema.role_table_grants GROUP BY grantee,table_name")
List<RolTablePrivilege> getAllRolTablePrivileges();
}在service目录下创建“RolTablePrivilegeService.java”文件。
package com.example.gausstest.service;
import dao.com.mcx.gaussprivilege.RolTablePrivilegeMapper;
import entity.com.mcx.gaussprivilege.RolTablePrivilege;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RolTablePrivilegeService {
@Autowired
RolTablePrivilegeMapper rolTablePrivilegeMapper;
public List<RolTablePrivilege> getAllRolTablePrivileges() {
return rolTablePrivilegeMapper.getAllRolTablePrivileges();
}
}在controller目录下创建“RolTablePrivilege.java"文件。
package com.example.gausstest.controller;
import entity.com.mcx.gaussprivilege.RolTablePrivilege;
import service.com.mcx.gaussprivilege.RolTablePrivilegeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class RolTablePrivilegeController {
@Autowired
RolTablePrivilegeService rolTablePrivilegeService;
@GetMapping("/rolTablePrivileges")
public List<RolTablePrivilege> getAllRolTablePrivileges() {
return rolTablePrivilegeService.getAllRolTablePrivileges();
}
}package com.example.gausstest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GaussTestApplication {
public static void main(String[] args) {
SpringApplication.run(GaussTestApplication.class, args);
}
}浏览器中访问: localhost:8080
接口调试:
IDEA中打印的日志
这里设置了一个端口转发:
转发自:https://www.cnblogs.com/probezy/p/16742417.html
在没有公网IP的情况下,想要实现外网访问内网,可以通过cpolar内网穿透来解决,只需要简单安装客户端,就可以创建隧道,将本地端口映射到公网上,生成公网地址。
- 支持永久免费使用(随机域名、1M带宽、4条免费隧道)
- 支持http/https/tcp协议
- 不限制流量
比如将本地8080端口下的web服务发布到公网可访问:
cpolar下载地址:https://www.cpolar.com/
注册并安装cpolar内网穿透。 浏览器访问http://localhost:9200/,登录cpolar web UI管理界面 左侧仪表盘——隧道管理——创建隧道 隧道名称:可自定义 协议:http 本地地址:8080(填写你想要映射的本地端口号) 域名类型:免费选择“随机域名”,付费用户可选择配置固定的二级子域名或者自定义域名 地区:选择合适的
隧道创建成功后,可在状态——在线隧道列表查看到所映射的公网地址,公网用户访问该公网地址,就可以访问到在本地内网搭建的web服务。








