KingbaseES数据库:从 MySQL 到金仓数据库,权限隔离与安全增强的进阶之路
在数字化时代,数据安全至关重要,数据库权限管理是核心保障。MySQL 作为广泛使用的开源数据库,虽有多种权限类型和层级,但存在权限粒度粗、缺乏有效隔离的局限,难以满足高安全需求场景。金仓数据库则在权限隔离上优势显著,通过多维度隔离策略(用户角色、模式、表空间层面)和细粒度权限控制(可精确到列级),实现严格的数据安全防护。同时,金仓数据库高度兼容 MySQL 的语法与基本功能,降低应用迁移成本,还在权限管理上实现功能增强,能满足金融、医疗等领域复杂需求,为企业数字化转型提供可靠数据安全支撑。
一、前言
中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。
电科金仓自成立起始终坚持自主创新,专注数据库领域二十余载,具备出色的数据库产品研发及服务能力,核心产品金仓数据库管理系统KingbaseES(简称“KES”)是面向全行业、全客户关键应用的企业级大型通用数据库。KES产品V9版本已通过国家权威机构认证,产品核心源代码自主率达到100%。2018年,电科金仓申报的“数据库管理系统核心技术的创新与金仓数据库产业化”项目荣获国家科学技术进步二等奖。金仓数据库管理系统KES于2022年入选国务院国资委发布的十项国有企业数字技术典型成果,彰显数据库领域国家队硬实力。继2023年金仓数据库管理系统V8通过第一批《安全可靠测评》后,2024年金仓数据库管理系统V9、金仓分布式HTAP数据库软件集群V3再度入围,至此电科金仓共计2款产品3个版本通过《安全可靠测评》*。
🥇 点击进入金仓数据库专栏,本专栏聚焦金仓数据库(KingbaseES)这一国产企业级融合数据库,为开发者及技术决策者提供从基础操作到架构设计的系统化学习路径。从多语法兼容(Oracle/MySQL/PostgreSQL)、多模数据存储(关系 / 文档 / 时序 / GIS)等功能展开讲解!
在如今这个数字化时代,数据早就成了企业最值钱的资产之一,而数据库的权限管理,就像是守护这份资产的“安全卫士”。它通过精细控制用户能访问哪些数据、能做哪些操作,牢牢守住了数据的安全、完整和可用。你想想,企业数据库里存着多少客户的敏感信息?身份证号、联系方式、财务数据,哪一样泄露出去都可能出大麻烦。
MySQL作为一款开源数据库,在全球范围内用的人特别多,在数据库领域的地位不用多说。但要是说到权限隔离,它就有点力不从心了,这也让它在那些对数据安全要求极高的场景里很难施展。比如它的权限体系比较简单,遇到多用户、多角色的复杂情况,就没法做到精细控制,数据安全自然就有了隐患。
而金仓数据库在权限隔离这块儿,优势就很明显了,能给企业数据安全上一道更靠谱的保险。它不仅有各种各样的权限设置选项,还支持灵活的角色管理和细粒度的访问控制,不管企业遇到哪种复杂场景,它的权限管理都能hold住。金仓数据库的出现,实现了从功能兼容到功能增强的大跨越,给企业数据安全管理带来了新方案,也让数据库权限管理迈入了新阶段。
二、MySQL 权限管理现状剖析
(一)MySQL 权限管理机制概述
MySQL的权限管理机制,可是保障数据库安全的关键防线。在MySQL里,用户是权限管理的核心,每个用户都用“用户名@主机名”来唯一标识,比如“admin@localhost”,指的就是本地主机上的admin用户。这种标识方式能让MySQL精准控制不同来源的用户访问,安全性也跟着提高了。
MySQL的权限类型特别多,数据操作、数据定义、管理等层面都覆盖到了。数据操作权限里,SELECT能查数据、INSERT能插数据、UPDATE能改数据、DELETE能删数据,有了这些权限,用户就能对数据库里的数据做基本的增删改查。数据定义权限包括CREATE(建表、视图等数据库对象)、ALTER(改数据库对象结构)、DROP(删数据库对象),主要用来管理数据库架构。管理权限像CREATE USER(创建用户)、GRANT OPTION(授予权限)这些,能让管理员管好用户和权限。
再看权限层级,MySQL的权限体系是有明显层级的。全局权限作用于整个MySQL服务器实例,有了这个权限,用户能操作所有数据库、表和用户,一般只有数据库管理员(DBA)才会拿到这种权限,这样他们才能全面管理和维护整个数据库系统。数据库级权限只在单个数据库里有效,用户有了这个权限,就能操作指定数据库里的所有表、视图、索引等,比如在特定数据库里建表、插数据都没问题。表级权限更细致,只针对单个表,用户有了它,能对指定表查、插、改、删数据,但没法影响其他表。列级权限是最精细的,只作用于表中的特定列,用户只能访问和修改被授权的列,没授权的列根本碰不到,这样敏感数据就安全多了。比如员工信息表里,能只让某些用户查“姓名”“职位”列,不让他们看“薪资”列。例程级权限主要针对存储过程、函数这些数据库例程,控制用户能不能执行这些例程,确保只有授权用户才能调用特定的存储过程或函数。
(二)MySQL 权限管理的局限性(无严格权限隔离)
1. 权限粒度问题
MySQL的权限粒度不够细,要是遇到对数据访问控制要求特别高的场景,就很难满足需求。拿电商数据库来说,里面有商品信息、订单信息、用户信息,假设需要一个数据分析人员查商品表里的“商品名称”“商品价格”“库存数量”字段来做销售分析。但在MySQL里,要给这个人授查询商品表的权限,只能用“GRANT SELECT ON database_name.products TO ‘analyst’@‘localhost’;”这样的语句,把整个商品表的查询权限都给他,没法精确到只授那几个特定字段的权限。这就意味着,数据分析人员能看到商品表里所有字段的信息,包括商品成本价这种敏感数据,数据泄露的风险可不就来了嘛。
2. 缺乏有效隔离
在多用户、多业务的场景下,MySQL的权限系统很难把不同业务的数据和操作严格隔离开,安全隐患也就跟着出现了。比如有个数据库系统,既支持电商业务又支持金融业务,电商用户要操作订单表、商品表,金融用户要操作账户表、交易记录表。用MySQL的权限管理,给电商用户授订单表和商品表的操作权限时,可能因为权限管理不到位,让他们不小心访问到金融业务的账户表和交易记录表,敏感金融数据就可能泄露。而且在一些大企业里,不同部门的数据需要严格隔离,但MySQL的权限系统做不到这么细致,不同部门的数据很容易互相干扰、泄露。
三、金仓数据库权限隔离功能深度解析
(一)金仓数据库权限隔离的特性与优势
金仓数据库在权限隔离方面,特性突出、优势明显,能给企业数据安全提供全方位、多层次的保障。
1. 多维度隔离策略
从用户角色来看,金仓数据库有一套完善的角色管理体系。不同用户可以被赋予不同角色,每个角色都对应着特定的权限集合。比如在企业资源规划(ERP)系统里,财务人员可以被赋予“财务角色”,这个角色有对财务相关表的查询、插入、更新权限,但不能访问销售、库存等其他业务表;销售人员则被赋予“销售角色”,只能访问和操作客户订单表、销售业绩表这些和销售业务相关的数据,碰不到财务数据。这种基于角色的权限管理,让权限分配更清晰合理,既降低了权限管理的难度,又能有效防止用户越权访问。
在模式(Schema)层面,金仓数据库支持把不同业务的数据存在不同的Schema里,实现逻辑上的数据隔离。比如有个企业既做电商又做物流,电商业务的商品信息、订单信息可以存在“e***merce_schema”模式下,物流业务的货物运输记录、仓储信息存在“logistics_schema”模式下。不同用户或角色根据业务需求,会被授予对特定Schema的访问权限。像电商运营人员能访问“e***merce_schema”,物流调度员能访问“logistics_schema”,两者的数据互不干扰,有效避免了数据交叉污染和非法访问。
再看表空间层面,金仓数据库能给不同业务或用户分配独立的表空间。表空间是数据库里存储数据文件的逻辑容器,把不同数据存在不同表空间里,就能实现物理层面的数据隔离。比如企业的财务报表数据对安全性要求极高,可以给它分配独立的表空间,设置严格的访问权限,只有授权的管理员和财务人员能访问;而产品宣传资料这种公共数据,可以存在公共表空间里,供更多用户查看。这种表空间级别的隔离,让数据安全性和独立性又上了一个台阶。
2. 细粒度权限控制
金仓数据库的细粒度权限控制能力特别强,能精确到给表的某一列设置特定权限,在满足复杂业务场景安全需求上表现特别好。拿医疗行业来说,患者信息管理系统里的患者个人信息表,可能有“姓名”“年龄”“性别”“病历”“过敏史”等多列。医生需要全面了解患者信息,包括病历和过敏史,才能准确诊断和治疗;护士日常护理只需要知道“姓名”“年龄”“性别”这些基本信息,不用看病历和过敏史这些敏感信息。金仓数据库可以这样实现细粒度权限控制:
-- 授予医生对患者信息表所有列的访问权限
GRANT SELECT, INSERT, UPDATE, DELETE ON patient_information TO doctor_role;
-- 授予护士对患者信息表部分列的访问权限
GRANT SELECT (name, age, gender) ON patient_information TO nurse_role;
通过这种方式,金仓数据库能根据不同角色的实际需求,精准控制对表中每一列的访问权限,确保敏感数据只有授权人员能看,很好地保护了数据安全和隐私,也满足了医疗行业这种对数据安全要求极高的复杂业务场景需求。
(二)金仓数据库权限隔离的实现方式与关键技术
1. 基于模式(Schema)的隔离
在金仓数据库里,模式(Schema)是个很重要的逻辑概念,能帮着实现数据和操作的隔离。创建不同的Schema,把不同业务的数据分开存储和管理,就能实现逻辑上的隔离。比如有个大型企业的数据库系统,有多个业务部门,每个部门的数据都要独立、保密。以人力资源部门和市场营销部门为例,可以给它们分别创建独立的Schema:
-- 创建人力资源部门的Schema
CREATE SCHEMA hr_schema;
-- 创建市场营销部门的Schema
CREATE SCHEMA marketing_schema;
Schema创建好后,就能把相应业务的数据表建在对应的Schema里。比如人力资源部门的员工信息表“employees”,可以建在“hr_schema”里:
CREATE TABLE hr_schema.employees (
employee_id serial PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
同样,市场营销部门的客户信息表“customers”,可以建在“marketing_schema”里:
CREATE TABLE marketing_schema.customers (
customer_id serial PRIMARY KEY,
name VARCHAR(100),
contact_number VARCHAR(20),
purchase_history TEXT
);
为了让不同部门用户只能访问自己部门Schema的数据,还可以创建不同的用户角色,给它们授相应Schema的访问权限。比如创建一个人力资源部门的用户角色“hr_user”,给它授“hr_schema”的所有权限:
CREATE ROLE hr_user;
GRANT ALL PRIVILEGES ON SCHEMA hr_schema TO hr_user;
再创建一个市场营销部门的用户角色“marketing_user”,给它授“marketing_schema”的所有权限:
CREATE ROLE marketing_user;
GRANT ALL PRIVILEGES ON SCHEMA marketing_schema TO marketing_user;
这样一来,人力资源部门的用户通过“hr_user”角色,只能访问“hr_schema”里的数据,看不了“marketing_schema”的数据;市场营销部门的用户通过“marketing_user”角色,也只能访问自己部门Schema的数据,实现了基于Schema的逻辑隔离,保障了不同业务数据的安全和独立。
2. 用户角色与权限分配
在金仓数据库里,管好用户和角色、做好权限分配,是实现权限隔离的关键。用户是实际访问数据库的主体,角色则是一堆权限的集合,把角色赋给用户,就能灵活分配和管理权限。
创建用户时,金仓数据库有很多选项,能满足不同的安全需求。比如可以给用户设密码,指定默认的表空间和角色:
-- 创建用户user1,并设置密码为'password1',默认表空间为'default_tablespace',默认角色为'***mon_role'
CREATE USER user1 WITH PASSWORD 'password1' DEFAULT TABLESPACE default_tablespace DEFAULT ROLE ***mon_role;
创建角色也很灵活,能根据业务需求定义不同角色,给它们授相应权限。比如创建一个“数据分析师”角色,给它授对特定数据库某些表的查询权限:
-- 创建数据分析师角色data_analyst
CREATE ROLE data_analyst;
-- 授予数据分析师对sales数据库中sales_data表的查询权限
GRANT SELECT ON sales.sales_data TO data_analyst;
给用户分配权限时,只要把相应角色赋给用户就行。比如把“数据分析师”角色赋给用户“user1”:
GRANT data_analyst TO user1;
这样用户“user1”就有了“数据分析师”角色的权限,能查“sales.sales_data”表。而且金仓数据库还支持角色继承,就是一个角色能继承另一个角色的权限。比如创建一个“高级数据分析师”角色,让它继承“数据分析师”角色的权限,再额外给它授对其他表的统计分析权限:
-- 创建高级数据分析师角色senior_data_analyst,并使其继承data_analyst角色的权限
CREATE ROLE senior_data_analyst INHERIT;
GRANT data_analyst TO senior_data_analyst;
-- 授予高级数据分析师对sales数据库中market_trends表的统计分析权限
GRANT EXECUTE ON FUNCTION sales.calculate_market_trends() TO senior_data_analyst;
通过这种用户角色与权限分配的机制,金仓数据库实现了权限的灵活管理和精细控制,不管多复杂的业务场景,都能满足权限隔离需求,确保只有授权用户能访问和操作对应数据,让数据库的安全性和可靠性都提高了不少。
四、代码示例与效果展示
(一)MySQL 权限相关代码示例及问题呈现
- 创建用户与授权:在MySQL里,创建用户并授权可以用下面这些代码:
-- 创建用户test_user,密码为test_password,允许从任何主机连接
CREATE USER 'test_user'@'%' IDENTIFIED BY 'test_password';
-- 授予test_user对test_db数据库中所有表的SELECT和INSERT权限
GRANT SELECT, INSERT ON test_db.* TO 'test_user'@'%';
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
用上面这些代码,我们创建了一个叫test_user的用户,还给他授了对test_db数据库所有表的查询和插入权限。实际操作中,就可以用这个用户连接数据库,做相应操作:
-- 使用test_user连接数据库
mysql -utest_user -ptest_password -Dtest_db
-- 执行查询操作
SELECT * FROM test_table;
-- 执行插入操作
INSERT INTO test_table (column1, column2) VALUES ('value1', 'value2');
-
权限不足与越权风险:假设
test_db数据库里有个sensitive_table表,存着敏感信息,我们本来只让特定管理员能访问这张表。但MySQL权限管理有漏洞,要是不小心给test_user授了访问sensitive_table的权限,麻烦就来了。比如:
-- 错误地授予test_user对sensitive_table的SELECT权限
GRANT SELECT ON test_db.sensitive_table TO 'test_user'@'%';
这时候test_user就能查sensitive_table里的敏感信息,明显违反了数据安全原则。另外,要是我们想让test_user能改test_table的数据,但之前只给了他查询和插入权限,那他尝试改数据的时候,就会因为权限不够报错:
-- 使用test_user连接数据库
mysql -utest_user -ptest_password -Dtest_db
-- 执行更新操作,会报错
UPDATE test_table SET column1 = 'new_value' WHERE id = 1;
上面这个操作会返回类似“ERROR 1142 (42000): UPDATE ***mand denied to user ‘test_user’@‘%’ for table ‘test_table’”的错误信息,说明用户权限不够,没法执行操作。这也能看出来MySQL权限管理的局限,想实现更精细的权限控制,得做更多复杂操作和配置才行。
(二)金仓数据库权限隔离代码示例与运行效果
- 创建用户与模式,分配权限:在金仓数据库里,创建用户、模式并分配权限,代码可以这么写:
-- 创建模式test_schema
CREATE SCHEMA test_schema;
-- 创建用户test_user,密码为test_password,允许登录
CREATE USER test_user WITH PASSWORD 'test_password' LOGIN;
-- 授予test_user对test_schema模式的USAGE权限
GRANT USAGE ON SCHEMA test_schema TO test_user;
-- 在test_schema模式下创建test_table表
CREATE TABLE test_schema.test_table (
id serial PRIMARY KEY,
column1 VARCHAR(100),
column2 VARCHAR(100)
);
-- 授予test_user对test_schema.test_table表的SELECT和INSERT权限
GRANT SELECT, INSERT ON test_schema.test_table TO test_user;
通过上面这些代码,我们在金仓数据库里创建了test_schema模式和test_user用户,还给用户授了对test_schema模式的使用权限,以及对test_schema.test_table表的查询和插入权限。
2. 权限隔离效果验证:我们用test_user连接金仓数据库,试试各种操作,看看权限隔离有没有效果:
-- 使用test_user连接数据库
ksql -Utest_user -dyour_database
-- 尝试查询test_schema.test_table表,操作成功
SELECT * FROM test_schema.test_table;
-- 尝试插入数据到test_schema.test_table表,操作成功
INSERT INTO test_schema.test_table (column1, column2) VALUES ('value1', 'value2');
-- 尝试更新test_schema.test_table表,由于未授予UPDATE权限,操作失败
UPDATE test_schema.test_table SET column1 = 'new_value' WHERE id = 1;
-- 尝试查询其他模式下的表,由于未授予相应权限,操作失败
SELECT * FROM other_schema.other_table;
上面这些操作里,test_user做授权过的查询和插入操作时,都能成功;但想做没授权的更新操作,或者查其他模式的表,就会返回类似“ERROR: permission denied for relation test_table”和“ERROR: schema “other_schema” does not exist”的错误信息,说明操作被拒绝了。这充分证明金仓数据库的权限隔离是有效的,只有授权操作能成功,未授权操作会被严格限制,数据的安全和完整也就有了保障。
五、从功能兼容到功能增强的转变
(一)金仓数据库对 MySQL 的功能兼容
- 语法兼容:金仓数据库在语法上和MySQL兼容性很高,这让基于MySQL开发的应用程序,能比较顺利地迁移到金仓数据库环境里。金仓数据库支持MySQL的大部分SQL语法,数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)这些都包含在内。比如建表的时候,MySQL用这样的语法:
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
);
金仓数据库也支持这种常见的建表语法,开发者不用大改SQL语句,就能在金仓数据库里建出结构一样的表。查询语句也是如此,像常见的多表关联查询:
SELECT s.name, c.course_name
FROM students s
JOIN courses c ON s.course_id = c.id;
这样的MySQL查询语句,在金仓数据库里能直接执行,不用额外调整语法,大大降低了应用迁移的难度和成本。
- 基本功能兼容:在数据类型方面,金仓数据库有和MySQL相似的数据类型集合,整数类型(像INT、SMALLINT)、字符串类型(像VARCHAR、CHAR)、日期时间类型(像DATE、DATETIME)、浮点数类型(像FLOAT、DOUBLE)这些都有。这就意味着,在MySQL里定义的数据表结构,在金仓数据库里能轻松复制,不用复杂转换数据类型。比如在MySQL里建一个包含不同数据类型字段的表:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
total_amount DECIMAL(10, 2)
);
在金仓数据库里,也能用上面这个语句建出结构一样的表,保证数据存储和操作的一致性。操作语句方面,金仓数据库对MySQL的INSERT、UPDATE、DELETE等操作语句也兼容得很好。比如往orders表里插数据:
INSERT INTO orders (order_id, order_date, total_amount)
VALUES (1, '2024-10-01', 100.50);
不管在MySQL还是金仓数据库里,这条插入语句都能正常执行,完成数据插入操作。这也进一步说明金仓数据库在基本功能上和MySQL高度兼容,能帮用户降低从MySQL迁移到金仓数据库的技术门槛和成本。
(二)金仓数据库在权限管理上的功能增强
- 对比分析:先看权限粒度,MySQL虽然有多种权限类型,但粒度比较粗。比如在MySQL里,要给用户授某个表的查询权限,只能用“GRANT SELECT ON table_name TO user;”这样的语句,把整个表的查询权限都给用户,没法精确到表的某一列。而金仓数据库的权限控制粒度更细,能精确到给表的某一列设置特定权限。就像前面说的医疗行业案例,金仓数据库可以用“GRANT SELECT (name, age, gender) ON patient_information TO nurse_role;”这样的语句,给护士角色授对患者信息表“姓名”“年龄”“性别”列的查询权限,不让他们看其他敏感列,数据安全性大大提高。
再看隔离效果,MySQL在多用户、多业务场景下,很难把不同业务的数据和操作严格隔离开。不同用户或角色的权限边界不清晰,很容易出现越权访问的情况。而金仓数据库通过基于模式(Schema)的隔离、精细分配用户角色与权限等机制,能把不同业务的数据和操作严格隔离开。不同业务的数据存在不同Schema里,不同用户角色只能访问被授权的Schema和对象,有效避免了数据交叉访问和非法操作,让系统更安全、更稳定。
- 实际应用优势:在金融行业的客户信息管理系统里,不同岗位的员工需要访问和操作不同级别的客户信息。客户经理得看客户的基本信息、交易记录,才能拓展业务、服务客户;风险评估人员则需要看客户的财务状况、信用记录这些敏感信息,用来做风险评估和控制。要是用MySQL的权限管理,很难实现这么精细的控制,敏感信息很容易泄露。但金仓数据库的权限增强功能就能很好地满足这个需求。
我们可以创建不同的用户角色,比如“客户经理角色”和“风险评估角色”,然后给它们分别授对客户信息表相应列和相关业务Schema的访问权限。这样每个岗位的员工只能访问和操作自己工作需要的信息,客户信息安全有了保障,系统的安全性和稳定性也提高了。同时,金仓数据库的权限管理机制让权限分配和管理更灵活高效,减少了因为权限管理不当出现的安全漏洞,降低了管理成本,也提高了企业的运营效率。
六、总结
国产金仓数据库的权限隔离功能,在数据库安全领域的地位可不容小觑。它的多维度隔离策略,覆盖了用户角色、模式、表空间等层面,给数据穿上了“防护衣”,能有效避免不同业务数据和操作之间的干扰,防止非法访问。而细粒度权限控制更是金仓数据库的一大亮点,能精确到列级别设置权限,不管多复杂的业务场景,都能满足数据安全要求,大大降低数据泄露风险,保障数据的机密性和完整性。
从功能兼容到功能增强,是金仓数据库发展过程中的重要一步。在语法和基本功能上和MySQL高度兼容,让基于MySQL开发的应用程序能轻松迁移到金仓数据库,大大降低了企业的迁移成本和技术门槛,也减少了因为切换数据库导致业务中断的风险。而在权限管理上的功能增强,不仅解决了MySQL权限管理的局限,还让企业有了更强大、更灵活的权限管理能力,提升了系统的安全性和稳定性,为企业数字化转型打下了坚实基础。
这种转变让金仓数据库能更好地适应不断变化的业务需求和越来越高的数据安全挑战,帮助企业在数字化时代充分挖掘数据价值,实现可持续发展。
联系博主
xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
💞 关注博主 🌀 带你实现畅游前后端!
🥇 从零到一学习Python 🌀 带你玩转Python技术流!
🏆 人工智能学习合集 🌀 搭配实例教程与实战案例,帮你构建完整 AI 知识体系
💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.***/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌