Kafka SASL/SCRAM介绍
文章目录
- Kafka SASL/SCRAM介绍
- 1. SASL/SCRAM 认证机制
- 2. SASL/SCRAM 认证工作原理
- 2.1 SCRAM 认证原理
- 2.1.1 密码存储和加盐
- 2.1.2 SCRAM 认证流程
- 2.2 SCRAM 认证的关键算法
- 2.3 SCRAM 密码存储
- 2.4 SCRAM 密码管理
- 3. 配置和使用 Kafka SASL/SCRAM
- 3.1 Kafka 服务器端配置
- 3.2 创建 SCRAM 用户并设置密码
- 3.3 Kafka 客户端配置
- 3.4 使用 SSL 加密连接
- 3.5 SCRAM 配置管理和维护
- 4. 安全性与最佳实践
- (1)使用强密码
- (2)使用 SASL_SSL
- (3)定期更新密码
- (4)启用审计日志
- 5. 总结
Kafka SASL/SCRAM介绍
Kafka SASL/SCRAM 是一种更为安全的认证机制,相比于 SASL/PLAIN,它提供了更高的密码保护和认证强度。SASL/SCRAM(Salted Challenge Response Authentication Mechanism)使用加密的密码存储和认证机制,可以有效防止密码明文传输,因此在生产环境中得到了广泛应用。
1. SASL/SCRAM 认证机制
SASL/SCRAM 是基于 Challenge-Response 的认证机制,其中客户端使用经过哈希加盐(salted hash)处理的密码进行身份验证,而 Kafka 集群通过比较存储在服务器上的加密密码来验证客户端身份。该机制具有以下特点:
- 加盐密码存储:密码通过
SCRAM算法(通常是SHA-256或SHA-512)进行加盐哈希,避免了明文密码泄露的风险。 - 双向认证:客户端和 Kafka 服务器使用相同的密钥进行相互认证,防止中间人攻击(MITM)。
- 适用于生产环境:
SASL/SCRAM提供了比SASL/PLAIN更强的安全性,适合用于需要更高安全性的生产环境。
2. SASL/SCRAM 认证工作原理
2.1 SCRAM 认证原理
SASL/SCRAM 基于挑战-响应机制(Challenge-Response)。在这种机制中,客户端和服务器在认证过程中交换加密的认证信息,而不是传递明文密码。其核心思想是,客户端和服务器都使用一个加盐哈希算法(如 SHA-256 或 SHA-512)来生成密码的散列值,以此进行身份验证。
具体步骤如下:
2.1.1 密码存储和加盐
-
密码存储:与其他认证机制不同,
SCRAM在服务器端不会存储明文密码,而是将密码经过哈希算法加盐处理后存储。加盐(salt)意味着将随机生成的盐值与密码进行拼接,然后进行哈希处理,这样即使两个用户使用相同密码,其哈希值也是不同的。 -
加盐哈希(Salted Hash):SCRAM 使用加盐和迭代哈希来增加密码的安全性,防止通过彩虹表等方式暴力破解密码。
2.1.2 SCRAM 认证流程
SASL/SCRAM 认证流程涉及多个步骤,客户端和服务器会进行一系列的相互验证:
(1)客户端发起认证请求
客户端生成请求:客户端首先向 Kafka 服务器发送认证请求。此请求包含客户端的身份(如用户名)和一个初始的响应(称为 “Client First Message”)。
客户端发送的初始消息:这个消息包含客户端的用户名和一个生成的随机 nonce(一次性使用的随机数)。
示例:
n=user,r=nonce
(2)服务器响应请求
服务器生成挑战消息:服务器收到客户端的请求后,会生成一个挑战消息,响应客户端。挑战消息包含一个随机生成的 nonce,以及一个 salt(盐值)和迭代次数等信息。服务器还会将该信息进行哈希后存储,用于后续的密码验证。
示例:
r=nonce, s=salt, i=iterations
r: 随机数(nonce),保证每次认证的唯一性。s: 盐值(salt),用于加盐哈希。i: 迭代次数(iterations),用于增加计算难度,防止暴力破解。
(3)客户端响应挑战
客户端计算密码哈希并发送响应:客户端使用自己的密码、服务器提供的盐值、迭代次数和挑战信息计算出一个响应信息(称为 “Client Final Message”)。此响应信息包含客户端生成的密码哈希值。
客户端通过以下公式生成哈希:
HMAC(Salt + Password + Iterations, Nonce)
然后将这个结果(包括一个用户名、客户端响应、以及 nonce)作为响应返回给服务器。
示例:
c=biws,r=nonce,p=HMAC(Salt + Password + Iterations, Nonce)
c: 表示编码格式,通常为biws。p: 客户端计算出的密码哈希值。
(4)服务器验证客户端响应
服务器验证客户端的响应:服务器接收到客户端的响应后,使用自己的存储的盐值、迭代次数、以及密码来验证客户端提供的密码哈希是否匹配。如果验证成功,表示客户端身份合法。
- 服务器使用相同的盐值和迭代次数进行哈希计算,然后与客户端发送过来的哈希值进行比对。如果一致,表示认证通过。
(5)服务器发送验证结果
服务器发送最终响应:如果客户端提供的密码验证成功,服务器向客户端发送一个成功的响应消息,完成认证过程。如果验证失败,则返回认证失败的错误信息。
2.2 SCRAM 认证的关键算法
SCRAM 使用以下关键算法来加密和保护密码:
-
哈希算法:
SCRAM使用标准的哈希算法(通常为SHA-256或SHA-512)对密码进行加盐处理。盐值(salt)是一个随机生成的字节序列,确保相同密码的哈希结果不同。 -
HMAC:客户端和服务器在认证过程中使用 HMAC(Hash-based Message Authentication Code) 算法来生成密码的哈希。HMAC 结合了密码、盐值、迭代次数和随机数,使得破解密码更加困难。
-
迭代次数:为了提高密码保护的强度,
SCRAM认证要求使用多次迭代的哈希操作。这意味着密码的哈希计算不仅仅是一次简单的哈希,而是重复进行多次迭代,从而增加了计算的复杂度,防止暴力破解。
2.3 SCRAM 密码存储
在 SCRAM 中,密码不以明文存储,而是存储加盐哈希值。服务器存储的是密码的哈希信息(通常是经过多次迭代的 HMAC 值),而不是密码本身。
存储结构示例:
SCRAM-SHA-256$4096:randomSalt:hashedPassword
SCRAM-SHA-256: 表示使用的哈希算法(SHA-256)。4096: 迭代次数(密码哈希计算的迭代次数)。randomSalt: 随机生成的盐值,用于加盐哈希。hashedPassword: 密码的最终哈希值。
2.4 SCRAM 密码管理
-
添加用户和设置密码:使用 Kafka 提供的
kafka-configs.sh命令或 Kafka 管理界面来添加用户,并设置用户的 SCRAM 密码。示例命令:
bin/kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config 'SCRAM-SHA-256=[password=secretpassword]' --entity-type users --entity-name user1 -
查看密码配置:管理员可以通过
kafka-configs.sh查询用户的 SCRAM 密码配置。示例命令:
bin/kafka-configs.sh --bootstrap-server localhost:9093 --describe --entity-type users --entity-name user1
3. 配置和使用 Kafka SASL/SCRAM
3.1 Kafka 服务器端配置
为了启用 SASL/SCRAM 认证机制,需要在 Kafka 服务器端进行相关配置。
(1)修改 Kafka 服务器配置文件 server.properties
- 打开 Kafka 配置文件
server.properties。 - 配置
SASL和SCRAM相关参数:
# 启用 SASL/SCRAM 认证
listeners=SASL_PLAINTEXT://0.0.0.0:9093
listener.security.protocol=SASL_PLAINTEXT # 传输层协议,支持 SASL 和 PLAIN 认证# 支持的 SASL 认证机制
sasl.enabled.mechanisms=SCRAM-SHA-256,SCRAM-SHA-512 # 选择支持的机制(SCRAM-SHA-256 或 SCRAM-SHA-512)# Kafka 集群与集群之间的通信协议配置(如分区副本等)
security.inter.broker.protocol=SASL_PLAINTEXT# 使用 SCRAM 算法(通常为 SCRAM-SHA-256 或 SCRAM-SHA-512)
scram.algorithm=SCRAM-SHA-256
listeners: 配置 Kafka 接受连接的端口,这里设置为SASL_PLAINTEXT,代表使用没有加密的 SASL 认证。sasl.enabled.mechanisms: 启用SCRAM-SHA-256或SCRAM-SHA-512机制,可以选择其中之一。security.inter.broker.protocol: 配置 Kafka 集群内的节点间通信协议。
(2)启动或重启 Kafka 服务
配置完成后,重启 Kafka 服务器使配置生效:
bin/kafka-server-start.sh config/server.properties
3.2 创建 SCRAM 用户并设置密码
Kafka 中的 SCRAM 用户和密码信息可以通过命令行工具 kafka-configs.sh 配置。我们使用 kafka-configs.sh 命令来创建 SCRAM 用户并为其设置密码。
(1)创建 SCRAM 用户并设置密码
bin/kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config 'SCRAM-SHA-256=[password=secretpassword]' --entity-type users --entity-name kafka-client
--alter: 修改现有配置。--add-config: 添加新的配置项,这里是添加密码信息。SCRAM-SHA-256=[password=secretpassword]: 指定使用SCRAM-SHA-256并设置密码为secretpassword。--entity-type users: 指定要操作的实体类型为users。--entity-name kafka-client: 指定用户名为kafka-client。
(2)检查用户配置
可以使用以下命令查看已配置用户的 SCRAM 信息:
bin/kafka-configs.sh --bootstrap-server localhost:9093 --describe --entity-type users --entity-name kafka-client
这将列出与 kafka-client 用户相关的 SCRAM 配置信息,包括算法、密码哈希值等。
3.3 Kafka 客户端配置
Kafka 客户端(如生产者或消费者)需要配置 SASL/SCRAM 认证来连接到 Kafka 集群。
(1)配置 Kafka 生产者
在 Kafka 生产者的配置文件中,设置使用 SASL/SCRAM 进行认证:
# Kafka 生产者配置
bootstrap.servers=localhost:9093
security.protocol=SASL_PLAINTEXT # 配置为使用 SASL 认证
sasl.mechanism=SCRAM-SHA-256 # 选择 SCRAM-SHA-256 认证机制# 配置 JAAS 登录模块(用户名和密码)
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \username="kafka-client" \password="secretpassword";
security.protocol: 配置为SASL_PLAINTEXT,表示 Kafka 客户端与服务器之间的通信使用 SASL 认证。sasl.mechanism: 指定使用的认证机制,这里设置为SCRAM-SHA-256。sasl.jaas.config: 配置 JAAS(Java Authentication and Authorization Service)认证模块,设置用户名和密码。
(2)配置 Kafka 消费者
对于 Kafka 消费者的配置,与生产者类似,只需确保配置正确的认证信息:
# Kafka 消费者配置
bootstrap.servers=localhost:9093
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256# 配置 JAAS 登录模块
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \username="kafka-client" \password="secretpassword";
(3)使用 Kafka 客户端
在客户端配置好之后,可以启动生产者或消费者应用,进行数据的发送和消费。
示例:Kafka 生产者代码
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9093");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.mechanism", "SCRAM-SHA-256");
props.put("sasl.jaas.config", "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"kafka-client\" password=\"secretpassword\"");KafkaProducer<String, String> producer = new KafkaProducer<>(props);ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key", "value");
producer.send(record);producer.close();
3.4 使用 SSL 加密连接
如果需要加密通信,建议使用 SASL_SSL,结合 SSL/TLS 进行数据加密,避免密码和数据被中间人攻击者截取。
(1)配置 Kafka 服务器启用 SSL
在 server.properties 文件中进行 SSL 配置:
listeners=SASL_SSL://0.0.0.0:9094 # 启用加密的 SASL 连接
security.inter.broker.protocol=SASL_SSL # 配置集群内部通信协议
ssl.keystore.location=/path/to/keystore.jks # 配置 keystore 路径
ssl.keystore.password=<keystore-password>
ssl.truststore.location=/path/to/truststore.jks # 配置 truststore 路径
ssl.truststore.password=<truststore-password>
(2)客户端启用 SSL 加密
客户端(生产者或消费者)也需要启用 SSL 配置:
bootstrap.servers=localhost:9094
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256# 配置 JAAS 登录模块
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \username="kafka-client" \password="secretpassword";# 配置 SSL
ssl.truststore.location=/path/to/truststore.jks
ssl.truststore.password=<truststore-password>
(3)启动客户端
在配置完成后,客户端可以通过 SSL 加密连接到 Kafka 集群,确保所有数据都在加密通道中传输。
3.5 SCRAM 配置管理和维护
(1)修改用户密码
如果需要修改 SCRAM 用户的密码,可以通过 kafka-configs.sh 工具进行更改:
bin/kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config 'SCRAM-SHA-256=[password=newpassword]' --entity-type users --entity-name kafka-client
(2)查看用户配置
可以查看 SCRAM 配置的详细信息,检查用户的认证状态和密码配置:
bin/kafka-configs.sh --bootstrap-server localhost:9093 --describe --entity-type users --entity-name kafka-client
4. 安全性与最佳实践
SASL/SCRAM 提供了比 SASL/PLAIN 更强的安全性,但在使用时需要注意以下几点:
(1)使用强密码
- 配置
SASL/SCRAM时,确保使用强密码。避免使用简单、易猜的密码,如password123。 - 可以通过强密码策略来保证密码的复杂性。
(2)使用 SASL_SSL
- 虽然
SASL/SCRAM本身提供了强大的认证机制,但在公开网络中传输认证信息时,仍然推荐使用SASL_SSL,以保证数据的加密传输,防止中间人攻击。 - 配置 SSL/TLS 加密后,密码和认证过程会通过加密的通道传输,增加额外的安全性。
(3)定期更新密码
- 定期更换 Kafka 用户的密码,以增强集群的安全性。
- 可以通过
kafka-configs.sh命令轻松更换用户密码。
(4)启用审计日志
- 对于生产环境,建议启用 Kafka 的审计日志,记录认证过程中的活动。可以通过外部日志管理系统来审计和追踪认证请求。
5. 总结
SASL/SCRAM 是一种比 SASL/PLAIN 更安全的 Kafka 认证机制。它通过使用加盐哈希密码存储方式避免了明文密码的泄露,并提供了强大的认证保障,特别适合用于生产环境。配置过程相对简单,但在部署时需要配合 SSL/TLS 以确保认证过程的安全性。正确的用户管理、强密码策略以及定期更新密码是保证系统安全的最佳实践。
相关文章:
Kafka SASL/SCRAM介绍
文章目录 Kafka SASL/SCRAM介绍1. SASL/SCRAM 认证机制2. SASL/SCRAM 认证工作原理2.1 SCRAM 认证原理2.1.1 密码存储和加盐2.1.2 SCRAM 认证流程 2.2 SCRAM 认证的关键算法2.3 SCRAM 密码存储2.4 SCRAM 密码管理 3. 配置和使用 Kafka SASL/SCRAM3.1 Kafka 服务器端配置3.2 创建…...
ARM内核:嵌入式时代的核心引擎
引言 在当今智能设备无处不在的时代,ARM(Advanced RISC Machines)处理器凭借其高性能、低功耗的特性,成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集(RISC)的典范,ARM核…...
一文大白话讲清楚webpack进阶——8——Module Federation
文章目录 一文大白话讲清楚webpack进阶——8——Module Federation1. 啥是Module Federation2. 这里讲两个基础概念3. 容器应用配置4. 远程应用配置5. 模块使用5. ModuleFederation好在哪里6. ModuleFederation实战 一文大白话讲清楚webpack进阶——8——Module Federation 1.…...
Airflow:选择合适执行器扩展任务执行
Apache Airflow是面向开发人员使用的,以编程方式编写、调度和监控的数据流程平台。可伸缩性是其关键特性之一,Airflow支持使用不同的执行器来执行任务。在本文中,我们将深入探讨如何利用这些执行器在Airflow中有效地扩展任务执行。 理解Airfl…...
DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力
论文链接: [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长,自行扔到 Model 里,去翻译去提问吧。 工作原理: 主要技术,就是训练出一些专有用途小模型&…...
CoRAG 来自微软与人大的创新RAG框架技术
微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…...
Qt Creator 中使用 vcpkg
Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE,做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强,但是由于和 Qt 集成的比较深,用来开发 Qt 程序还是很顺手的。 早期…...
mysql中in和exists的区别?
大家好,我是锋哥。今天分享关于【mysql中in和exists的区别?】面试题。希望对大家有帮助; mysql中in和exists的区别? 在 MySQL 中,IN 和 EXISTS 都是用于子查询的操作符,但它们在执行原理和适用场景上有所不…...
智慧园区管理系统推动企业智能运维与资源优化的全新路径分析
内容概要 在当今快速发展的商业环境中,园区管理的数字化转型显得尤为重要。在这个背景下,快鲸智慧园区管理系统应运而生,成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术,以智能化的方式解决了传统管理模式…...
pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)
以下是一个完整的词嵌入(Word Embedding)示例代码,使用 modelscope 下载 tiansz/bert-base-chinese 模型,并通过 transformers 加载模型,获取中文句子的词嵌入。 from modelscope.hub.snapshot_download import snaps…...
物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】
物联网(IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术,实时采集并连接任何需要监控、连接、互动的物体或过程,实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…...
谭浩强C语言程序设计(4) 8章(下)
1、输入三个字符串按照字母顺序从小到大输出 #include <cstdio> // 包含cstdio头文件,用于输入输出函数 #include <cstring> // 包含cstring头文件,用于字符串处理函数#define N 20 // 定义字符串的最大长度为20// 函数:…...
使用朴素贝叶斯对散点数据进行分类
本文将通过一个具体的例子,展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型,对二维散点数据进行分类,并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据,每个类别包含若干个点。我们将这些点分别存…...
【Pytorch和Keras】使用transformer库进行图像分类
目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理,transformer库能关联到huggface中对应的模型&am…...
Python 深拷贝与浅拷贝:数据复制的奥秘及回溯算法中的应用
引言 在 Python 编程领域,数据复制是极为常见的操作。而深拷贝和浅拷贝这两个概念,如同紧密关联却又各具特色的双子星,在数据处理过程中扮演着重要角色。深入理解它们,不仅有助于编写出高效、准确的代码,还能避免许多…...
Node.js 和 npm 安装教程
Node.js 和 npm 安装教程 Node.js 和 npm 安装教程什么是 Node.js 和 npm?Node.jsnpm 安装前的注意事项在 Windows 上安装 Node.js 和 npm步骤 1:访问 Node.js 官网步骤 2:选择适合的版本步骤 3:下载安装包步骤 4:运行…...
简单易懂的倒排索引详解
文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构,…...
初级数据结构:栈和队列
目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三)…...
在K8S中,pending状态一般由什么原因导致的?
在Kubernetes中,资源或Pod处于Pending状态可能有多种原因引起。以下是一些常见的原因和详细解释: 资源不足 概述:当集群中的资源不足以满足Pod或服务的需求时,它们可能会被至于Pending状态。这通常涉及到CPU、内存、存储或其他资…...
阿里云 - RocketMQ入门
前言 云消息队列 RocketMQ 版产品具备异步通信的优势,主要应用于【异步解耦】、【流量削峰填谷】等场景对于同步链路,需要实时返回调用结果的场景,建议使用RPC调用方案阿里云官网地址RocketMQ官网地址 模型概述 生产者生产消息并发送至服务…...
Agentic Automation:基于Agent的企业认知架构重构与数字化转型跃迁---我的AI经典战例
文章目录 Agent代理Agent组成 我在企业实战AI Agent企业痛点我构建的AI Agent App 项目开源 & 安装包下载 大家好,我是工程师令狐,今天想给大家讲解一下AI智能体,以及企业与AI智能体的结合,文章中我会列举自己在企业中Agent实…...
分享10个实用的Python工具的源码,支持定制
1.音频处理工具 【免费】一个功能丰富的音频处理工具箱,支持音频格式转换、剪辑和音量调节等功能资源-CSDN文库 2.视频转换工具 【免费】一个简单易用的视频格式转换工具,支持多种常见视频格式之间的转换资源-CSDN文库 3.PDF工具箱 【免费】一个功能…...
Denavit-Hartenberg DH MDH坐标系
Denavit-Hartenberg坐标系及其规则详解 6轴协作机器人的MDH模型详细图_6轴mdh-CSDN博客 N轴机械臂的MDH正向建模,及python算法_mdh建模-CSDN博客 运动学3-----正向运动学 | 鱼香ROS 机器人学:MDH建模 - 哆啦美 - 博客园 机械臂学习——标准DH法和改进MDH…...
WebPages 表单:设计与实现指南
WebPages 表单:设计与实现指南 引言 在当今的互联网时代,表单是WebPages与用户交互的重要手段。它不仅收集用户信息,还提供了一种便捷的交互方式。本文将详细介绍WebPages表单的设计与实现,旨在帮助开发者更好地理解并运用表单&…...
列表标签(无序列表、有序列表)
无序列表 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…...
每天学点小知识之设计模式的艺术-策略模式
行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解模板方法模式 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基…...
AI开发学习之——PyTorch框架
PyTorch 简介 PyTorch (Python torch)是由 Facebook AI 研究团队开发的开源机器学习库,广泛应用于深度学习研究和生产。它以动态计算图和易用性著称,支持 GPU 加速计算,并提供丰富的工具和模块。 PyTorch的主要特点 …...
SAP HCM insufficient authorization, no.skipped personnel 总结归纳
导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限,结构化权限就是按照部门ID授权,颗粒度更细,对分工明细化的单位尤其重要,今天遇到的问题就是结构化权限的问题。 作者:vivi,来源&…...
机器学习算法在网络安全中的实践
机器学习算法在网络安全中的实践 本文将深入探讨机器学习算法在网络安全领域的应用实践,包括基本概念、常见算法及其应用案例,从而帮助程序员更好地理解和应用这一领域的技术。"> 序言 网络安全一直是信息技术领域的重要议题,随着互联…...
DeepSeek V3 vs R1:大模型技术路径的“瑞士军刀“与“手术刀“进化
DeepSeek V3 vs R1:——大模型技术路径的"瑞士军刀"与"手术刀"进化 大模型分水岭:从通用智能到垂直突破 2023年,GPT-4 Turbo的发布标志着通用大模型进入性能瓶颈期。当模型参数量突破万亿级门槛后,研究者们开…...
