Oracle数据库查询权限管理:从GRANT命令到安全策略实战
1. 项目概述从“授权”这个日常操作说起在Oracle数据库的日常运维和开发工作中“给用户授权查询权限”这个操作听起来简单得就像把钥匙递给别人。但如果你真把它当成一个简单的GRANT SELECT命令那可能就错过了数据库安全与权限管理的精髓。我见过太多项目初期为了图方便直接给用户授予了SELECT ANY TABLE这种“超级查询权限”结果后期数据安全审计时漏洞百出甚至引发数据泄露风险。权限管理尤其是查询权限的授予绝不是一次性的操作而是一个贯穿数据库生命周期的、需要精心设计的策略。简单来说这个项目的核心就是如何安全、高效、合规地将Oracle数据库中特定对象的“读”权限授予给指定的用户或角色。它涉及的对象不仅仅是表Table还包括视图View、物化视图Materialized View、同义词Synonym等。而“安全”二字意味着你需要考虑权限的粒度是整张表还是几个字段、权限的传播用户能否把权限再给别人、以及权限的时效性。无论是开发人员需要查询生产环境的某些表进行问题排查还是报表系统用户需要定期拉取数据或是不同业务部门之间需要数据共享都离不开这个基础却又关键的环节。2. 权限体系核心概念解析知其然更要知其所以然在动手敲命令之前我们必须先理清Oracle权限体系的几个核心概念。这就像你要管理一栋大楼得先搞清楚钥匙、门禁卡和权限级别的区别。2.1 系统权限 vs. 对象权限这是Oracle权限的两大基石绝对不能混淆。系统权限关乎用户能在数据库里“做什么”是一种全局性的能力。例如CREATE SESSION连接数据库、CREATE TABLE建表、SELECT ANY TABLE查询任何表。系统权限通常由DBA数据库管理员授予普通开发人员或应用用户很少需要。注意SELECT ANY TABLE是一个典型的、危险但又被滥用的系统权限。它允许用户查询任何用户模式下的任何表包括SYS、SYSTEM等系统核心表。在生产环境中除非有极其特殊的全局审计需求否则应严格避免直接授予普通用户此权限。我们的“授权查询权限”项目99%的场景指的是对象权限而非此系统权限。对象权限关乎用户能对“哪个具体的东西”“做什么”是最精细的权限控制单元。这就是我们本次项目的焦点。针对表TABLE、视图VIEW等具体对象常见的对象权限包括SELECT查询数据。INSERT插入数据。UPDATE更新数据。DELETE删除数据。ALTER修改对象结构。INDEX在表上创建索引。REFERENCES创建外键约束引用该表。ALL上述所有权限的快捷方式。2.2 用户、角色与模式理解这三者的关系是设计合理授权方案的前提。用户访问数据库的账户。每个用户都有一个同名的模式。模式是用户所拥有对象的逻辑容器。模式用户创建的表、视图等对象都存放在该用户的模式下。当用户A想查询用户B的表EMP时完整的对象名是B.EMP。角色一组权限的集合。这是实现高效权限管理的核心工具。我们不应该直接将权限授予成千上万个用户而是创建具有不同职能的角色如REPORT_ROLE、DEV_QUERY_ROLE将权限授予角色再将角色授予用户。这样当权限需要变更时只需修改角色所有拥有该角色的用户会自动继承变更。2.3 GRANT 命令与 WITH GRANT OPTION授权操作的核心命令是GRANT。其基本语法对于对象权限来说是GRANT 权限 ON 对象 TO 用户或角色 [WITH GRANT OPTION];那个可选的WITH GRANT OPTION子句是权限管理的“双刃剑”。作用获得权限的用户/角色可以将该权限再次授予其他用户/角色。风险这会导致权限传播链难以追溯和管理。用户A授予B带此选项B可以授予CC可以授予D……一旦A收回权限整个链条的权限可能不会自动级联回收取决于Oracle版本和具体操作容易留下权限孤岛形成安全隐患。实操心得在正规的生产环境授权中我强烈建议禁用WITH GRANT OPTION。所有授权操作应通过DBA或指定的权限管理员集中管控确保权限清单清晰可审计。如果确有跨部门授权需求应通过审批流程后由管理员操作。3. 标准授权场景与实战操作详解下面我们进入实战环节通过几个最典型的场景来拆解授权的每一步。3.1 场景一授权查询单张表这是最基本、最频繁的操作。假设用户SCOTT拥有表EMP需要允许另一个用户REPORT_USER查询这张表。操作命令-- 以SCOTT用户或具有DBA权限的用户连接数据库 GRANT SELECT ON scott.emp TO report_user;执行后效果REPORT_USER现在可以执行SELECT * FROM scott.emp;了。注意事项对象所有者命令必须在表所有者SCOTT的模式下执行或者由具有GRANT ANY OBJECT PRIVILEGE系统权限的DBA来执行。完整对象名在授权时建议始终使用schema.object_name的完整格式避免歧义。权限验证授权后可以查询数据字典来确认-- 以REPORT_USER或其他用户查询 SELECT * FROM user_tab_privs_recd WHERE table_name EMP; -- 或 SELECT * FROM all_tab_privs WHERE table_name EMP AND grantee REPORT_USER;3.2 场景二通过角色进行批量授权直接给用户授权在用户量少时可行但用户一多管理就是噩梦。角色是解决之道。步骤拆解创建角色首先创建一个专门用于查询的角色。CREATE ROLE dev_query_role;向角色授权将多个相关表的查询权限授予这个角色。GRANT SELECT ON scott.emp TO dev_query_role; GRANT SELECT ON scott.dept TO dev_query_role; GRANT SELECT ON hr.employees TO dev_query_role; -- 跨用户授权将角色授予用户将创建好的角色授予一个或多个用户。GRANT dev_query_role TO user_a, user_b, user_c;启用角色用户登录后默认角色可能未激活。用户或DBA可能需要显式启用-- 用户会话中执行 SET ROLE dev_query_role; -- 或者DBA将角色设为用户默认角色 ALTER USER user_a DEFAULT ROLE dev_query_role;优势分析管理便捷新增查询表只需GRANT SELECT ... TO dev_query_role;所有相关用户立即生效。权限清晰通过查询DBA_ROLE_PRIVS和ROLE_TAB_PRIVS数据字典可以清晰看到角色-用户、角色-权限的对应关系。灵活控制可以临时禁用用户的某个角色REVOKE角色或SET ROLE NONE实现权限的快速回收。3.3 场景三精细化到列级的查询授权有时出于安全考虑例如表中含有薪资SALARY、身份证号等敏感列我们只允许用户查询部分列。Oracle提供了列级权限控制。操作命令GRANT SELECT (empno, ename, job, deptno) ON scott.emp TO report_user;执行后效果REPORT_USER可以执行SELECT empno, ename FROM scott.emp;但如果尝试SELECT salary FROM scott.emp或SELECT * FROM scott.emp将会收到“ORA-01031: 权限不足”的错误。实操心得与局限视图是更好的替代方案列级授权虽然能实现需求但在实际管理中比较繁琐尤其是当需要授权的列经常变化时。更通用的最佳实践是创建视图。-- 在SCOTT模式下创建一个屏蔽敏感列的视图 CREATE OR REPLACE VIEW scott.emp_public_v AS SELECT empno, ename, job, mgr, hiredate, deptno FROM scott.emp; -- 然后将视图的SELECT权限授予用户 GRANT SELECT ON scott.emp_public_v TO report_user;这样做的好处是逻辑更清晰视图即接口可以定义更复杂的逻辑如连接表、计算列并且可以通过COMMENT ON VIEW为视图添加说明维护性远胜于直接列授权。性能无差异从性能角度看对基表进行列授权和查询视图最终的执行计划是基本一致的Oracle优化器会进行有效的处理。3.4 场景四授权查询同义词在实际应用中我们很少直接使用schema.table_name来访问对象因为这会将模式名硬编码在应用里缺乏灵活性。同义词Synonym提供了对象的别名是实现位置透明性和简化访问的关键。授权流程创建私有同义词为特定用户创建-- 以REPORT_USER登录 CREATE SYNONYM emp_syn FOR scott.emp;但创建同义词本身需要CREATE SYNONYM系统权限且前提是用户已有scott.emp的SELECT权限。创建公有同义词所有用户可访问需DBA权限-- 以DBA身份 CREATE PUBLIC SYNONYM public_emp FOR scott.emp;重要警告创建公有同义词并不会自动授予任何用户对底层表的权限用户仍需被授予SELECT ON scott.emp的权限。公有同义词只是提供了一个大家都能识别的名字。授权的最佳实践路径步骤A对象所有者SCOTT或DBA授予用户REPORT_USER对象权限。GRANT SELECT ON emp TO report_user;步骤B可选但推荐为用户创建一个指向该对象的私有同义词或由DBA创建一个公有同义词。-- 为用户创建私有同义词 CREATE SYNONYM my_emp FOR scott.emp; -- 此后REPORT_USER可以直接使用 SELECT * FROM my_emp;4. 权限回收与审计管“放”更要管“收”授权只是开始权限的定期审查和回收同样重要。误授权或权限冗余是安全漏洞的主要来源。4.1 使用 REVOKE 回收权限回收权限的命令是REVOKE语法与GRANT对应。-- 回收用户对单表的查询权 REVOKE SELECT ON scott.emp FROM report_user; -- 回收角色 REVOKE dev_query_role FROM user_a; -- 回收带WITH GRANT OPTION的权限需谨慎 REVOKE SELECT ON scott.emp FROM user_b CASCADE CONSTRAINTS;注意CASCADE CONSTRAINTS当回收REFERENCES权限或可能影响外键约束时需要使用。对于SELECT权限通常不需要。4.2 关键数据字典视图你的权限地图作为管理员你必须熟悉以下数据字典视图它们是你进行权限审计和排查的“火眼金睛”。USER_TAB_PRIVS当前用户拥有的所有对象权限。USER_TAB_PRIVS_RECD当前用户被授予的所有对象权限。ALL_TAB_PRIVS当前用户可以访问的所有对象权限包括直接授予的和通过角色授予的。DBA_TAB_PRIVSDBA视图数据库中所有的对象权限授予情况。这是全局审计的核心视图。DBA_ROLE_PRIVS显示所有用户被授予了哪些角色。ROLE_TAB_PRIVS显示角色被授予了哪些表权限。SESSION_PRIVS显示当前会话实际生效的系统权限。SESSION_ROLES显示当前会话实际生效的角色。排查案例用户REPORT_USER报告说无法查询SCOTT.EMP表。首先检查他是否拥有权限SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE REPORT_USER AND OWNER SCOTT AND TABLE_NAME EMP AND PRIVILEGE SELECT;如果查询无结果说明权限未被直接授予。接着检查他拥有的角色以及角色是否有权限-- 查看用户拥有的角色 SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE REPORT_USER; -- 假设他拥有DEV_QUERY_ROLE查看该角色的权限 SELECT * FROM ROLE_TAB_PRIVS WHERE ROLE DEV_QUERY_ROLE AND OWNERSCOTT AND TABLE_NAMEEMP;最后检查用户当前会话是否启用了该角色-- 以REPORT_USER登录后查询 SELECT * FROM SESSION_ROLES;如果角色不在其中可能需要SET ROLE命令来激活。5. 高级策略与常见避坑指南掌握了基础操作后一些高级策略和“坑点”能让你在权限管理的道路上走得更稳。5.1 利用视图实现行级权限控制GRANT SELECT只能控制到表和列无法控制到行。例如只想让部门经理看到本部门员工的数据。这时就需要视图应用上下文的高级组合拳。创建应用上下文Application Context用于安全地存储会话属性如当前用户的部门号。CREATE OR REPLACE CONTEXT dept_ctx USING set_dept_ctx_pkg;创建上下文设置包在用户登录时通过此包的过程将其部门号设置到上下文中。CREATE OR REPLACE PACKAGE set_dept_ctx_pkg IS PROCEDURE set_deptno; END; / CREATE OR REPLACE PACKAGE BODY set_dept_ctx_pkg IS PROCEDURE set_deptno IS v_deptno NUMBER; BEGIN -- 假设从员工表获取当前用户的部门号 SELECT deptno INTO v_deptno FROM scott.emp WHERE ename SYS_CONTEXT(USERENV, SESSION_USER); DBMS_SESSION.SET_CONTEXT(dept_ctx, deptno, v_deptno); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_SESSION.SET_CONTEXT(dept_ctx, deptno, NULL); END; END; /创建安全策略视图CREATE OR REPLACE VIEW scott.emp_secure_v AS SELECT * FROM scott.emp WHERE deptno SYS_CONTEXT(dept_ctx, deptno) OR SYS_CONTEXT(dept_ctx, deptno) IS NULL; -- 处理无上下文情况授权与登录后设置GRANT SELECT ON scott.emp_secure_v TO manager_user;并在用户登录后触发器或应用连接池初始化时调用set_dept_ctx_pkg.set_deptno;。这样当MANAGER_USER查询scott.emp_secure_v时他只能看到自己所在部门的记录。这是一种非常强大的行级安全实现。5.2 常见“坑”与解决方案实录坑1授权成功但查询时报“ORA-00942: 表或视图不存在”原因最常见的原因是用户使用了错误的对象名。授权是对SCOTT.EMP但用户执行的是SELECT * FROM EMP;。在当前用户模式下没有EMP表又没有创建指向SCOTT.EMP的同义词Oracle自然找不到。解决使用带模式名的完整名称SCOTT.EMP或者创建一个同义词。CREATE SYNONYM emp FOR scott.emp; -- 为当前用户创建私有同义词坑2通过角色授予的权限在存储过程中失效原因在Oracle中默认情况下存储过程、函数、视图等命名PL/SQL块在执行时使用的是定义者权限而非调用者权限。这意味着在存储过程内部直接引用对象时它检查的是存储过程所有者的权限而不是执行该存储过程的用户的权限。如果权限是通过角色授予给用户的在定义者权限模式下角色是禁用的。解决直接授权将存储过程内涉及的对象权限直接授予存储过程的所有者用户。使用调用者权限在创建存储过程时使用AUTHID CURRENT_USER。CREATE OR REPLACE PROCEDURE my_proc AUTHID CURRENT_USER IS BEGIN -- 现在这里检查调用者的权限 SELECT ... FROM scott.emp; END;使用动态SQL在定义者权限过程中使用EXECUTE IMMEDIATE执行动态SQL动态SQL会以调用者权限执行。坑3大量授权导致性能问题分析单纯的大量GRANT SELECT授权操作本身会在数据字典表如SYS.OBJ$,SYS.TAB$,SYS.USER$等中插入记录。当授权对象和用户数量达到极端规模例如数十万时可能会对涉及这些字典表的查询如权限检查、依赖分析产生轻微影响。优化建议多用角色这是最有效的优化。1000个用户通过1个角色获得权限在权限检查链路上比1000个用户各自被直接授权要高效。定期清理使用DBA_TAB_PRIVS视图审计回收长期不用或无效的权限保持权限清单精简。分区与归档对于超大型系统考虑按业务模块使用不同的数据库用户模式进行物理隔离减少跨模式授权需求。坑4PUBLIC角色的滥用风险PUBLIC是一个Oracle内置的、所有用户都自动拥有的角色。将权限授予PUBLIC意味着数据库中的每一个用户包括未来创建的所有新用户都会自动获得该权限。这极其危险。原则永远不要将业务表的SELECT或其他权限授予PUBLIC。仅将一些无害的、工具性的权限如EXECUTE ON DBMS_OUTPUT授予PUBLIC。

相关新闻

C语言函数指针深度解析:从语法到实战应用与优化

C语言函数指针深度解析:从语法到实战应用与优化

1. 项目概述:为什么函数指针是C语言的“灵魂”之一干了这么多年C语言开发,我越来越觉得,指针这东西,你要是只把它当成一个“存地址的变量”,那可就太亏了。尤其是函数指针,它远不止是语法书里一个晦涩难懂的…

2026/8/17 7:48:41 阅读更多 →
构建智能网址收藏系统:从浏览器书签升级到个人知识链接库

构建智能网址收藏系统:从浏览器书签升级到个人知识链接库

1. 项目概述:重新定义你的数字收藏夹“特殊网址收藏”这个标题,听起来简单,甚至有点老派,不就是浏览器书签吗?但如果你真这么想,可能就错过了数字时代信息管理的一个巨大痛点。作为一个在信息管理领域摸爬滚…

2026/8/17 7:48:41 阅读更多 →
Grok 4.6登顶Realm Tax基准:大模型评测新标杆与开发者实战指南

Grok 4.6登顶Realm Tax基准:大模型评测新标杆与开发者实战指南

这次我们来看一个在 AI 模型评测领域引发关注的事件:Grok 4.6 在 Realm Tax 基准测试中登顶。对于关注大模型能力进展的开发者来说,这不仅仅是一个排名变化,更是一个信号,预示着开源或可访问模型在特定任务上的能力边界正在被重新…

2026/8/17 7:48:41 阅读更多 →

最新新闻

智能汽车安全演进:从被动防护到主动防御与数据安全

智能汽车安全演进:从被动防护到主动防御与数据安全

1. 从“铁皮盒子”到“移动智能终端”:汽车安全的内涵变迁 十几年前,我们聊汽车安全,脑子里蹦出来的多半是“这车钢板厚不厚”、“有几个气囊”、“碰撞测试几颗星”。那时候,汽车安全的核心是“被动安全”——在事故发生时&#…

2026/8/18 12:57:00 阅读更多 →
ChatGPT、Codex实战:为什么Agent任务越长,越容易从“解决问题”变成“扩大问题”?

ChatGPT、Codex实战:为什么Agent任务越长,越容易从“解决问题”变成“扩大问题”?

真实场景:为什么Codex改着改着,开始改更多东西?很多开发者都有类似经历。最开始给Codex一个任务:“帮我修复用户登录失败的问题。”然后Agent开始分析:检查认证逻辑。查看数据库。修改相关代码。运行测试。看起来一切正…

2026/8/18 12:57:00 阅读更多 →
告别反复切换窗口:macOS 窗口置顶工具 Topit 快速上手指南

告别反复切换窗口:macOS 窗口置顶工具 Topit 快速上手指南

告别反复切换窗口:macOS 窗口置顶工具 Topit 快速上手指南 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 写代码写到一半,切出去翻一眼…

2026/8/18 12:57:00 阅读更多 →
题目中描述的现象是:Web应用的CPU使用率正常,但响应时间随着并发数增加而急剧上升

题目中描述的现象是:Web应用的CPU使用率正常,但响应时间随着并发数增加而急剧上升

题目中描述的现象是:Web应用的CPU使用率正常,但响应时间随着并发数增加而急剧上升。这表明系统并未因CPU计算能力不足而受限(排除A),也未表现出内存持续增长(暂不支持C),磁盘空间不足…

2026/8/18 12:56:59 阅读更多 →
DeepSeek Harness Snowsalt 魔改分支部署与插件商城实战指南

DeepSeek Harness Snowsalt 魔改分支部署与插件商城实战指南

DeepSeek Harness 作为一款基于 DeepSeek 模型的本地化部署工具,在开发者社区中一直备受关注。Snowsalt 魔改分支的发布,特别是“一键插件商城”和“skills管理”这两个核心功能的实现,标志着这个项目从单纯的大模型部署工具向更完整的开发者…

2026/8/18 12:56:59 阅读更多 →
Visual Studio中DataSet设计器文件生成问题解决方案

Visual Studio中DataSet设计器文件生成问题解决方案

1. 问题现象与背景分析 在Visual Studio中使用DataSet设计器时,不少开发者遇到过这样的困扰:当修改并保存DataSet后,系统会自动生成一个名为"Dataset1.Designer.cs"的文件,而不是更新原有的Designer.cs文件。这种情况通…

2026/8/18 12:55:59 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →