首页 > 其他分享 >Kafka SASL/SCRAM认证与ACL配置

Kafka SASL/SCRAM认证与ACL配置

时间:2024-05-11 17:24:24浏览次数:22  
标签:-- kafka usr SCRAM 2.2 SASL ACL local 2.12

​ Kafka版本 2.12-2.2.0,Zookeeper版本:3.4.14,SASL/PLAIN 方式用户名密码是存储在文件中,不能动态添加,密码明文,每次想要添加新的账户都需要重启Kafka去加载静态文件,才能使之生效,十分的不方便!所以使用 SASL/SCRAM 的方式 ,这种方式的用户名/密码是存储在zookeeper中,能够支持动态添加用户,无需重启整个集群,十分方便。该种认证方式还会使用sha256或sha512对密码加密,安全性相对会高一些。本文主要介绍SASL/SCRAM方式:

一、SSL证书生成

(1)创建证书目录

#kafka部署目录为/usr/local/kafka_2.12-2.2.0
mkdir /usr/local/kafka_2.12-2.2.0/ssl

(2)生成服务端的keystore文件(server.keystore.jks

​ 每个broker节点执行

keytool -keystore server.keystore.jks -alias kafka -validity 3650 -genkey -storepass 123456 -keypass 123456 -dname "CN=192.168.11.35,OU=hc,O=hw,L=shenzhen,ST=guangdong,C=CN"

#CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码

(3)生成CA认证证书(ca-cert、ca-key

​ 在任一broker节点执行,只需要执行一次,执行完成后生成了两个文件cat-key、ca-cert,将这两个文件分别拷贝到所有broker节点上。

openssl req -new -x509 -keyout ca-key -out ca-cert -days 3650 -passout pass:123456 -subj "/C=cn/ST=guangdong/L=shenzhen/O=hw/OU=hc/CN=192.168.11.35"

(4)通过CA证书创建一个客户端信任证书(client.truststore.jks

​ 每个broker节点执行

keytool -keystore client.truststore.jks -alias CAKafka -import -file ca-cert -storepass 123456

(5)通过CA证书创建一个服务端信任证书(server.truststore.jks

​ 每个broker节点执行

keytool -keystore server.truststore.jks -alias CAKafka -import -file ca-cert -storepass 123456

以下为给服务端证书签名

(6)从密钥库导出证书服务端证书(cert-file

​ 每个broker节点执行

keytool -keystore server.keystore.jks -alias kafka -certreq -file cert-file -storepass 123456

(7)用CA给服务端证书进行签名处理(cert-signed

​ 每个broker节点执行

openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 3650 -CAcreateserial -passin pass:123456

(8)将CA证书导入到服务端keystore

​ 每个broker节点执行

keytool -keystore server.keystore.jks -alias CAKafka -import -file ca-cert -storepass 123456

(9)将已签名的服务器证书导入到服务器keystore

​ 每个broker节点执行

keytool -keystore server.keystore.jks -alias kafka -import -file cert-signed -storepass 123456

客户端SSL证书签发

(10)导出客户端证书(client.keystore.jks

keytool -keystore client.keystore.jks -alias kafka -validity 3650 -genkey -storepass 123456 -keypass 123456 -dname "CN=192.168.11.35,OU=hc,O=hw,L=shenzhen,ST=guangdong,C=CN"

(11)将证书文件导入到客户端keystore(client.cert-file

keytool -keystore client.keystore.jks -alias kafka -certreq -file client.cert-file -storepass 123456

(12)用CA给客户端证书进行签名处理(client.cert-signed

openssl x509 -req -CA ca-cert -CAkey ca-key -in client.cert-file -out client.cert-signed -days 3650 -CAcreateserial -passin pass:123456

(13)将CA证书导入到客户端keystore

keytool -keystore client.keystore.jks -alias CAKafka -import -file ca-cert -storepass 123456

(14)将已签名的证书导入到客户端keystore

keytool -keystore client.keystore.jks -alias kafka -import -file client.cert-signed -storepass 123456

四个认证文件说明:

  1. client.keystore.jks
    是客户端密钥库文件。它包含客户端的私钥和相应的证书。客户端使用该私钥进行身份验证和安全通信。客户端的私钥用于加密传输给服务器的数据,并与服务器的公钥进行握手和密钥交换,确保通信的安全性和完整性。
  2. client.truststore.jks
    是客户端信任库文件。它包含客户端信任的根证书或证书链。客户端使用该信任库来验证服务器的证书是否可信。如果服务器的证书由客户端信任库中的任何一个根证书所签发,客户端将信任服务器的证书,并继续与服务器进行安全通信。
  3. server.keystore.jks
    是服务器密钥库文件。它包含服务器的私钥和相应的证书。服务器使用该私钥进行身份验证和安全通信。服务器的私钥用于解密客户端发送的数据,并与客户端的公钥进行握手和密钥交换,确保通信的安全性和完整性。
  4. server.truststore.jks
    是服务器信任库文件。它包含服务器信任的根证书或证书链。服务器使用该信任库来验证客户端的证书是否可信。如果客户端的证书由服务器信任库中的任何一个根证书所签发,服务器将信任客户端的证书,并继续与客户端进行安全通信。

二、Zookeeper配置

2.1、 配置 SASL

(1)新建 zoo_jaas.conf 文件

​ 在 Zookeeper 的 conf 目录下新建一个 zoo_jaas.conf 文件:

vim /usr/local/zookeeper-3.4.14/conf/zoo_jaas.conf  
Server {
  org.apache.zookeeper.server.auth.DigestLoginModule required
  username="admin"
  password="1qaz@WSX"
  user_admin="1qaz@WSX"
  user_kafka="1qaz@WSX";
};

Server.username、Server.password为 Zookeeper 内部通信的用户名和密码,因此保证每个 zookeeper 节点该属性一致即可;
Server.user_xxx 中 xxx 为自定义用户名,用于 zkClient 连接所使用的用户名和密码,即为 kafka 创建的用户名。

(2)修改 zoo.conf 文件

vim /usr/local/zookeeper-3.4.14/conf/zoo.conf 
#添加以下内容
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
zookeeper.sasl.client=true

zookeeper.sasl.client 设置为 true,开启客户端身份验证,否则zoo_jaas.conf中配置的用户名将不起作用,客户端仍然可以无 jaas 文件连接,只是带有 WARNNING 而已。

(4)修改 zkEnv.sh 文件

vim /usr/local/zookeeper-3.4.14/bin/zkEnv.sh
#在ZOOKEEPER_PREFIX="${ZOOBINDIR}/.."行下面添加以下内容
SERVER_JVMFLAGS="-Djava.security.auth.login.config=/usr/local/zookeeper-3.4.14/conf/zoo_jaas.conf"

(5)重启 zookeeper

/usr/local/zookeeper-3.4.14/bin/zkServer.sh restart

三、Kafka配置

3.1、服务端配置

1)修改kafka配置文件 server.properties

/usr/local/kafka_2.12-2.2.0/config/server.properties
#修改listeners
listeners=SASL_SSL://192.168.11.35:9093,SASL_PLAINTEXT://192.168.11.35:9092
#对外发布地址,实现外网9093端口使用SASL_SSL,内网9092端口使用SASL_PLAINTEXT
advertised.listeners=SASL_SSL://39.108.132.165:9093,SASL_PLAINTEXT://192.168.11.35:9092
#添加以下为sasl安全配置
security.inter.broker.protocol=SASL_PLAINTEXT	#表示Broker间通信使用SASL_PLAINTEXT
sasl.enabled.mechanisms=SCRAM-SHA-512	#表示开启SCRAM-SHA-512认证机制
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512	#表示Broker间通信也启用SCRAM-SHA-512机制
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer	#设置身份验证使用的类
super.users=User:admin	#设置超级用户,如果是多个需要分号分割,例如:User:admin;User:root
allow.everyone.if.no.acl.found=false	#默认为true,对所有用户topic可见,要禁用。
ssl.keystore.location=/usr/local/kafka_2.12-2.2.0/ssl/server.keystore.jks
ssl.keystore.password=123456
ssl.key.password=123456
ssl.truststore.location=/usr/local/kafka_2.12-2.2.0/ssl/server.truststore.jks
ssl.truststore.password=123456
ssl.key.password=123456
# kafka2.0.x开始,将ssl.endpoint.identification.algorithm设置为了HTTPS,即:需要验证主机名
# 如果不需要验证主机名,那么可以这么设置 ssl.endpoint.identification.algorithm=即可
ssl.endpoint.identification.algorithm=
#日志目录
log.dirs=/usr/local/kafka_2.12-2.2.0/logs
#连接Zookeeper的配置
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
#其它配置使用默认即可

如果用 SASL_SSL 的认证方式,只需将以上配置文件中 SASL_PLAINTEXT 改为 SASL_SSL 即可。

如果要实现外网 9093 端口使用 SASL_SSL ,内网 9092 端口使用 SASL_PLAINTEXT ,可以将 listeners 和 advertised.listeners配置改成如下形式:

listeners=SASL_SSL://192.168.11.35:9093,SASL_PLAINTEXT://192.168.1.35:9092

advertised.listeners=SASL_SSL://39.108.132.165:9093,SASL_PLAINTEXT://192.168.11.35:9092

其它配置不变,这样可以实现在内网连接 9092 端口,不需要 jks 文件,直接使用账号密码的方式连接 kafka ,同时配合 ACL 规则实现 topic 和 group 的权限 ;外网则连接 9093 端口,并需要 jks 文件验证建立连接,再通过账号密码配合 ACL 规则实现 topic 和 group 的权限。

(2)添加SASL配置文件

​ 在kafka配置目录 **/usr/local/kafka_2.12-2.2.0/config **下创建一个 kafka_server_jaas.conf 文件。

vim /usr/local/kafka_2.12-2.2.0/config/kafka_server_jaas.conf 
KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="1qaz@WSX";
};
Client {
  org.apache.zookeeper.server.auth.DigestLoginModule required
    username="admin"
    password="1qaz@WSX";
};

KafkaServer字段是用来配置broker间通信使用的用户名和密码以及客户端连接时需要的用户名和密码,其中username和password是broker用于初始化连接到其他的broker,kafka用户为broker间的通讯。在一个Kafka集群中,这个文件的内容要一样,集群中每个Borker去连接其他Broker的时候都使用这个文件中定义的username和password来让对方进行认证。

Client部分是用来设置与Zookeeper的连接的,也就是上面我们配置到zoo_jaas.conf 文件中user_admin="1qaz@WSX" 一行所对应的。

(3)在kafka启动脚本中配置环境变量

​ 在 /usr/local/kafka_2.12-2.2.0/bin/kafka-server-start.sh 配置中增加环境变量:

-Djava.security.auth.login.config=/usr/local/kafka_2.12-2.2.0/config/kafka_server_jaas.conf

vim /usr/local/kafka_2.12-2.2.0/bin/kafka-server-start.sh
...
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/usr/local/kafka_2.12-2.2.0/config/kafka_server_jaas.conf"
fi

3.2、创建 SCRAM 凭证

​ 使用 Kafka 自带的脚本 kafka-configs.sh 创建凭证,脚本所在目录为:/usr/local/kafka_2.12-2.2.0/bin/kafka-configs.sh

(1)创建broker建通信用户(或称超级用户)

​ 将 kafka_server_jaas.conf 文件 KafkaServer 段的admin和kafka用户创建到zookeeper中。

#创建admin用户
./bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=1qaz@WSX],SCRAM-SHA-512=[password=1qaz@WSX]' --entity-type users --entity-name admin

#创建kafka用户
./bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=1qaz@WSX],SCRAM-SHA-512=[password=1qaz@WSX]' --entity-type users --entity-name kafka

(2)查看创建的用户

./bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-type users --entity-name admin

(3)启动kafka

/usr/local/kafka_2.12-2.2.0/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.12-2.2.0/config/server.properties

(4)创建客户端用户

​ 之后可以创建一些客户端连接用户,并基于后面的ACL规则,对用户进行权限管控

./bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=alice123],SCRAM-SHA-512=[password=alice]' --entity-type users --entity-name alice

3.3、客户端配置

(1)添加SASL配置文件

​ 在kafka配置目录 **/usr/local/kafka_2.12-2.2.0/config **下创建一个 kafka-client-jaas.conf 文件。

vim /usr/local/kafka_2.12-2.2.0/config/kafka_client_jaas.conf 
KafkaClient {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="kafka"
    password="1qaz@WSX";
};

说明: 这里配置用户名和密码需要和服务端配置的账号密码保持一致,这里配置了kafka这个用户。

(2)在kafka-console-producer.sh脚本中配置环境变量

​ 找到 “x$KAFKA_HEAP_OPTS”,添加以下参数:

-Djava.security.auth.login.config=/usr/local/kafka_2.12-2.2.0/config/kafka_client_jaas.conf

vim /usr/local/kafka_2.12-2.2.0/bin/kafka-console-consumer.sh
...
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx512M -Djava.security.auth.login.config=/usr/local/kafka_2.12-2.2.0/config/kafka_client_jaas.conf"
fi
...

(3)在kafka-console-consumer.sh脚本中配置环境变量

​ 找到 “x$KAFKA_HEAP_OPTS”,添加以下参数:

-Djava.security.auth.login.config=/usr/local/kafka_2.12-2.2.0/config/kafka_client_jaas.conf

...
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx512M -Djava.security.auth.login.config=/usr/local/kafka_2.12-2.2.0/config/kafka_client_jaas.conf"
fi
...

(4)配置SASL_PLAINTEXT验证信息

​ 修改 /usr/local/kafka_2.12-2.2.0/config 下的 producer.propertiesconsumer.properties配置SASL_SSL验证的基本信息:

producer.properties:

vim /usr/local/kafka_2.12-2.2.0/config/producer.properties
#添加以下内容
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512

#如果使用SASL_SSL方式,则添加以下内容
security.protocol=SASL_SSL
ssl.truststore.location=/usr/local/kafka_2.12-2.2.0/ssl/server.truststore.jks
ssl.truststore.password=123456
ssl.endpoint.identification.algorithm=
sasl.mechanism=SCRAM-SHA-512

如果要使用某个账号进行测试 topic 或 group 权限读写,可添加以下行(默认使用的用户为 kafka_client_jaas.conf 文件中提供的用户):

sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice123";

consumer.properties:

vim /usr/local/kafka_2.12-2.2.0/config/consumer.properties
#添加以下内容
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512

#如果使用SASL_SSL方式,则添加以下内容
security.protocol=SASL_SSL
ssl.truststore.location=/usr/local/kafka_2.12-2.2.0/ssl/server.truststore.jks
ssl.truststore.password=123456
ssl.endpoint.identification.algorithm=
sasl.mechanism=SCRAM-SHA-512

如果要使用某个账号进行测试 topic 或 group 权限 ,可添加以下行(默认使用的用户为 kafka_client_jaas.conf 文件中提供的用户):

sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice123";

(5)使用命令行操作测试

​ 如果使用 SASL_PLAINTEXT 方式,则连接9092端口,如下命令

/usr/local/kafka_2.12-2.2.0/bin/kafka-console-producer.sh --broker-list 192.168.11.35:9092 --topic first --producer.config /usr/local/kafka_2.12-2.2.0/config/producer.properties
>123
>adb
>qwe


/usr/local/kafka_2.12-2.2.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.11.35:9092 --topic first -consumer.config /usr/local/kafka_2.12-2.2.0/config/consumer.properties
123
adb
qwe

​ 如果使用 SASL_SSL 方式,则连接9093端口,如下命令:

/usr/local/kafka_2.12-2.2.0/bin/kafka-console-producer.sh --broker-list 192.168.11.35:9093 --topic first --producer.config /usr/local/kafka_2.12-2.2.0/config/producer.properties
>123
>adb
>qwe


/usr/local/kafka_2.12-2.2.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.11.35:9093 --topic first -consumer.config /usr/local/kafka_2.12-2.2.0/config/consumer.properties
123
adb
qwe

3.4、配置 ACL

​ 使用 kafka-acls.sh 脚本来操作ACL机制。 kafka-acls.sh 脚本位于Kafka安装目录下的bin目录,如 /usr/local/kafka_2.12-2.2.0/bin/,进入此目录执行以下相关命令:

(1)查看:在kafka-acls.sh脚本中传入list参数来查看ACL授权

./kafka-acls.sh --list --authorizer-properties zookeeper.connect=localhost:2181

(2)配置ACL来让alice用户有权限写入test这个topic

./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Write --topic test

(3)为reader用户设置test topic的读权限

./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --topic test

(4)设置访问group的权限

./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --group test-group

如果是删除操作就把上面的 --add 改成 --remove。

--operation支持的操作有:READ、WRITE、DELETE、CREATE、ALTER、DESCRIBE、ALL,所以一般我们快捷方式授权:

  • 授权给某个消费者组读取和订阅权限就直接使用--consumer参数而不使用--operation来指定,前者就包含了允许消费者在主题上READ、DESCRIBE以及在消费者组在主题上READ。
  • 授权给某个消费者组写和订阅权限就直接使用--producer参数,它包括了生产者对主题有写和订阅权限以及在集群上建立主题的权限。
# 快捷设置允许某个组使用某用户对某主题读操作
./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --consumer --topic test --group GroupA

# 快捷设置允许某用户对某主题写操作
./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --producer --topic test

如果授权用户读写那么就要手动设置--operation参数,其它一些授权实例如下:

# 允许 alice 用户读取和写入test主题
./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --operation Write --topic test

# 允许GroupA组使用alice用户对主题test读写操作
./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --operation Write --topic test --group GroupA

# 允许所有用户对某个主题有读写操作
./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --consumer --topic test

# 拒绝某个主机使用alice账号读写,允许其他所有的主机使用任何账号进行读写某个主题
./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --allow-host * --deny-principal User:alice --deny-host 198.51.100.3 --consumer --topic test

标签:--,kafka,usr,SCRAM,2.2,SASL,ACL,local,2.12
From: https://www.cnblogs.com/hovin/p/18186821

相关文章

  • Agile PLM数据库表结构(Oracle)
    刚进公司,任务是接管PLM系统,但是还在给外包团队开发,没有代码。无妨先看业务和数据库,ok,业务看不懂,只能先看数据库,数据库没有数据字典,这个系统没有任何文档产出......练手时发现数据库类型是Oracle,面对百度不成问题,数据字典只能看前端然后去数据库里面一个个找着对应自己整理了,纯折磨......
  • Apache RocketMQ ACL 2.0 全新升级
    引言RocketMQ作为一款流行的分布式消息中间件,被广泛应用于各种大型分布式系统和微服务中,承担着异步通信、系统解耦、削峰填谷和消息通知等重要的角色。随着技术的演进和业务规模的扩大,安全相关的挑战日益突出,消息系统的访问控制也变得尤为重要。然而,RocketMQ现有的ACL1.0......
  • Oracle异常(二)
    ORA-01704:字符串文字太长当我们在Oracle数据库中插入或更新一个字符串时,如果字符串的长度超过数据库的限制,就会出现ORA-01704错误。这个错误的具体描述是“字符串文字太长”。在Oracle数据库中,一个字符串的长度不能超过4000个字符。如果字符串超过了这个限制,将导致ORA-01704错误......
  • oracle 性能优化查看(DBMS_SQLTUNE.REPORT_SQL_MONITOR)
    参照查看:Oracle调优之看懂Oracle执行计划-smileNicky-博客园(cnblogs.com) 临时查看监控需添加 /*+MONITOR*/注意空格,不然监控不了select/*+MONITOR*/temp2.*from(selectrownumasrn,temp1.*from(selectBATCH_ID,PARENT_BATCH_ID......
  • Oracle异常(一)
    ORA-12537: Network Session: End of fileORA-12537:网络会话:文件结束在程序运行是报错,最后发现是连接数超过最大连接数查询连接数的语句selectusername,count(username),machinefromv$sessiongroupbyusername,machine官方文档:ORA-12537isaninformationalmes......
  • Oracle Hint "index_combine"对于like的局限性
     OracleHint"index_combine"对于like的局限性 数据库版本:11.2.0.4.0今天遇到1条问题SQL,优化遇到一点问题,SQL文本大概如下:其中,col2和col3存在索引的且选择性都很高,col1的业务特性是只有两个值选择性低没有也不适合建Btree索引。导致每次执行都是全表扫描,统计发现这条SQL......
  • Oracle修改字段长度及属性
    首发微信公众号:SQL数据库运维原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247486117&idx=1&sn=02e2cd05e5db7eaa5758c70e81cf3972&chksm=ea375ed5dd40d7c367727562bdb00788f3bd139cbbda377f599586a47ce13ad9d04c56fd4d2d&token=1479964665&la......
  • Oracle AWR 性能分析报告11g
    转自:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html1、报告总结Elapsed 为该AWR性能报告的时间跨度(自然时间的跨度,例如前一个快照snapshot是4点生成的,后一个快照snapshot是6点生成的,则若使用@?/rdbms/admin/awrrpt脚本中指定这2个快照的话,那么......
  • Oracle数据库 定时备份
    说明学习了如何Oracle如何备份数据库,实际开发过程中数据库应该每隔一段时间就要备份一次,所以我们就需要一个定时执行这个代码的功能,同时备份的文件可能进行一些处理,比如压缩。步骤建一个文本文件,添加以下内容,后缀名修改为.bat::代码页更改为Unicode(UTF-8)chcp65001@......
  • 麒麟 V10 一键安装 Oracle 11GR2(231017)单机版 2
    https://www.modb.pro/db/1762008192972820480安装准备1、安装好操作系统,建议安装图形化2、配置好网络3、挂载本地ISO镜像源4、上传必须软件安装包(安装基础包,补丁包:33991024、35574075、35685663、6880880)5、上传一键安装脚本:OracleShellInstall✨偷懒可以直接下载本......