SAP HANA账号创建与授权配置完全指南:从权限模型到角色实践
发布时间:2026/10/7 1:41:43 锦皓数字建站

最近在给项目上的FICO顾问开HANA查询账号又顺手把新建账号和授权设置完整走了一遍。SAP HANA里的账号创建看着就是一条CREATE USER的事实际上坑全在授权这一层很多人建完账号能连上一执行查询就报insufficient privilege然后开始怀疑人生。这篇文章我就把自己日常在HANA里新建账号、做授权设置的一套流程整理出来分享给刚接触HANA的BASIS顾问、DBA以及那些需要跟HANA数据库打交道又不想被权限折腾的FICO/ABAP开发同事。这活儿本身不复杂但涉及的东西很碎账号类型、系统权限、对象权限、分析权限、角色封装每一层都有讲究。尤其在S4 HANA项目里FICO模块的底层表全在HANA库里业务顾问要导数、做校验开发要调存储过程应用要连库读写各类场景对授权的要求完全不一样。最简单的做法是直接甩一个ALL PRIVILEGES给所有人但那等于在数据库层裸奔等审计找你谈话的时候肠子都能悔青。1. 动手前必须先弄清楚的权限模型和账号类型1.1 HANA用户账号到底有哪几种HANA的账号体系和我最早接触的传统Oracle、MySQL不太一样。你打开HANA Studio的Security节点能看到用户列表里有SYSTEM、技术用户、业务账号偶尔还有一堆_ SYS开头的神秘用户。先说结论_ SYS_REPO、_SYS_STATISTICS这类系统内部账号是HANA自身运行和仓库管理用的千万不能动也别试图改成密码或删掉否则整个系统都可能出问题。真正需要我们操心的是两类账号普通用户Standard User和受限用户Restricted User。普通用户有完整的登录能力可以访问目录Catalog、执行查询、创建自己的对象是日常使用最多的类型。受限用户是后来版本里为了物联网、边缘计算这类轻量场景加的它只能通过HTTP/SQL端点访问而且不能拥有对象不能创建会话基本就是个“专用通道型”账号。咱们做企业应用百分之九十九的情况选普通用户就行。还有一点必须分清HANA数据库用户和SAP应用层ECC、S4 HANA里的用户是两个完全不同的概念。S4 HANA的业务登录账号存在应用服务器里数据库账号只是应用服务器连接HANA时用的底层身份。所以你经常看到SAP顾问说“权限在SU01里配”那是应用层的权限而HANA数据库账号的权限是在数据库层单独配的。项目里如果分不清这两层后面做FICO全套角色导入时特别容易绕晕。1.2 权限体系速览系统权限、对象权限、分析权限、包权限HANA数据库的授权体系可以用一个表先概括清楚权限类型控制范围典型操作对应SQL关键字系统权限数据库级管理动作创建用户、创建角色、备份恢复、查目录GRANT USER ADMIN, CATALOG READ对象权限Schema、表、视图、存储过程等对象查表、读写数据、执行存储过程GRANT SELECT, INSERT, EXECUTE分析权限分析视图、计算视图里的数据行级可见性控制用户能看到哪些公司代码/成本中心的数据GRANT ANALYTIC PRIVILEGE包权限HANA repository里的开发包Package读取/写入/导出开发对象GRANT REPO.READ, REPO.EDIT这四个层级理解起来可以类比一栋大楼的门禁系统权限是物业总钥匙能开门、能管监控、能进设备间对象权限是各房间门锁财务室的门卡开不了机房分析权限是房间里文件柜的抽屉权限同一个财务室有人能看全公司账有人只能看自己公司代码包权限则决定了你能不能往这栋楼的图纸上改结构。很多刚接触HANA的人会犯一个错以为给了某个Schema的SELECT用户就能看这个Schema下所有视图了。实际上如果视图引用了别的Schema的表你还需要同时授权底层表的访问权限。这个在传统数据库里也有但HANA的计算视图因为跨Schema建模很普遍踩坑概率直线上升。1.3 前置条件用什么账号登录才能创建账号创建用户和授权本身就需要权限。通常我们用SYSTEM账号登录HANA Studio或hdbsql来操作因为SYSTEM默认拥有USER ADMIN、ROLE ADMIN等关键系统权限。有些企业会禁掉SYSTEM那至少需要一个拥有USER ADMIN和ROLE ADMIN系统权限的账号才能执行CREATE USER和GRANT语句。拿到登录账号后建议先查一下自己有没有权限免得写一堆SQL全是报错。在SQL控制台执行SELECT * FROM SYS.USER_SYSTEM_PRIVILEGES WHERE USER_NAME CURRENT_USER;看到USER ADMIN、ROLE ADMIN、CATALOG READ这些字段为TRUE就说明你有资格建账号和分配权限。另外提醒一句HANA 2.0之后密码策略默认要求大写字母、小写字母、数字、特殊字符都要有至少8位长度上限和复杂度可以通过密码策略配置调整。创建用户之前先把密码准备好不要等到CREATE USER报“password does not meet policy”再回来改。1.4 明确授权需求建这个账号是给谁用的这是整个授权设置里最容易被忽略、却最关键的一步。我见过太多人上来就CREATE USER然后随口问一句“你要啥权限”对方说“给我全部吧”就把ALL PRIVILEGES扔过去了。真要这么干审计检查时直接就红了。动手前先把场景理清楚应用连接账号S4 HANA应用服务器连数据库用的通常只需要连接权限、执行特定Schema过程的权限不需要开发权限更不能有USER ADMIN。FICO/开发顾问账号顾问要查会计凭证表BSEG、BKPF、ACDOCA做数据核对要给对应Schema的SELECT偶尔需要EXECUTE存储过程但没必要给INSERT/UPDATE/DELETE。报表分析账号给业务用户跑报表的如果报表基于HANA分析视图需要配分析权限按公司代码、成本中心做行级过滤。运维/开发账号需要写代码、建表、传传输请求的这类账号才考虑给SCHEMA的DDL权限、包权限。想清楚这层后面所有授权步骤就都围绕“够用就好”的原则展开这也是我在S4项目里给FICO全套相关顾问开账号时坚持的标准做法。2. 一步步新建HANA账号三种常用方式实测2.1 方式一HANA Studio图形界面创建HANA Studio虽然官方推广力度不如HANA Database Explorer但老项目里依然大量使用。打开HANA Studio切换到Administration透视图依次展开Security - Users右键选择New User。在General选项卡里User Name填账号名Authentication选Password下面输入密码和确认密码。这里有个关键下拉框Force password change如果你希望用户第一次登录后必须改密码就选YES如果是给应用用的技术账号选NO不然应用连不上还得你手动去改。接下来是其他选项卡System Privileges勾选这个用户需要的系统权限比如CATALOG READ。Object Privileges点绿色加号选择Schema或具体的表/视图再勾选SELECT/INSERT/UPDATE/DELETE/EXECUTE等。Analytic Privileges添加已有的分析权限对象。Package Privileges选择Repository里的包分配开发权限。下方的Validity可以设置账号有效期比如只开3个月的临时账号过期自动失效这个对项目上短期借调的外部顾问特别实用。全部设置完后点Deploy用户就建好了。这个方式肉眼所见即所得适合不想记SQL的人。但要批量创建或者要写自动化脚本时图形界面效率就太低了。2.2 方式二HANA Database ExplorerHDB快速操作现在很多新项目直接走HANA Database Explorer也就是网页版的SQL开发工具。在HDB里左侧SQL Console连接目标数据库然后在SQL命令窗口里写SQL创建用户或者通过Security菜单创建用户。HDB比传统Studio更轻量我用下来最舒服的一点是它自带了权限检查视图可以直接查当前用户有没有某权限不用记一堆系统视图名。如果你是刚接触HANA的新手建议直接用HDB。打开HANA实例后用SYSTEM账号登录在SQL控制台执行创建命令右侧结果区可以直接看到执行成功与否比Studio的Deploy机制直观。后面文章里的SQL示例我都默认在HDB里跑。2.3 方式三HDBSQL命令行创建DBA或运维同事通常离不开命令行特别是要批量处理几十个账号时写个shell脚本比手动点半天快得多。HDBSQL连接命令的通用写法hdbsql -n 10.10.1.20:30015 -u SYSTEM -p 你的密码 -d SYSTEMDB连接进去之后创建用户的SQL很直观CREATE USER FICO_READER PASSWORD Init_2025! NO FORCE_FIRST_PASSWORD_CHANGE;这条语句创建了一个名为FICO_READER的普通用户密码是Init_2025!不强制首次登录修改密码应用账号必须这么设。如果你希望用户第一次登录就改密码把NO FORCE_FIRST_PASSWORD_CHANGE换成FORCE_FIRST_PASSWORD_CHANGE。建好之后先验证一下SELECT USER_NAME, CREATE_TIME FROM SYS.USERS WHERE USER_NAME FICO_READER;能看到记录说明创建成功。此时你尝试用这个账号登录会发现能建立连接但查不了任何业务表因为还没有任何授权。这就到了下一节的重点授权设置才是重头戏。2.4 删除、锁定与解锁账号的日常操作账号建得多自然有清理的一天。临时项目结束、外包顾问离场、应用下线都涉及账号回收。删除用户用DROP USER但建议先停用观察一段时间防止有后台任务还在依赖这个账号。锁定账号ALTER USER FICO_READER DEACTIVATE USER NOW;解锁恢复ALTER USER FICO_READER ACTIVATE USER NOW;真正确认不需要了再删除DROP USER FICO_READER;这个顺序是我踩过坑之后的习惯操作。我之前直接DROP了一个还在被后台调度任务使用的账号导致当晚批量作业大面积失败半夜被电话叫醒。所以现在一律先DEACTIVATE观察至少一个完整业务周期确认没有报错和告警再DROP。另外删除账号之前最好先查一下它拥有的对象表、视图、存储过程如果账号名下创建了对象DROP USER会连带处理产生的影响可能比你想象的大。3. 授权设置的完整实操从零到能查表3.1 最小可用授权建一个能连接、能查Schema表的账号还是拿FICO_READER这个账号举例。目标是让它能连接数据库并且只查SAPFICO这个Schema下的会计凭证相关表。假设应用层的角色已经配好了但数据库层必须先给它打开通道。首先默认情况下任何新建的普通用户会自动获得PUBLIC角色这是HANA内建的公共角色只包含最基础的连接权限相当于“允许进门”。所以这时候FICO_READER已经能连上数据库但看不到任何业务数据。接下来要补两类授权一是系统层面的CATALOG READ允许这个账号查看目录信息二是对象层面的Schema查询权限。SQL如下GRANT CATALOG READ TO FICO_READER; GRANT SELECT ON SCHEMA SAPFICO TO FICO_READER;执行完这两条用FICO_READER登录执行SELECT TOP 100 * FROM SAPFICO.BSEG;这里BSEG是会计凭证行项目表FICO顾问最常查的表之一。能出数据说明最小链路已经通了。这个组合我用在最常见的顾问取数场景上既满足查数需求又不至于给太多权限。3.2 常用系统权限明细与授权写法系统权限是控制数据库级操作能力的给的时候务必克制。我把平时最常用的几个列出来系统权限作用说明CATALOG READ读取目录对象查询表结构、视图定义顾问查数常用USER ADMIN创建和管理用户只有DBA或权限管理员才该有ROLE ADMIN创建和管理角色和USER ADMIN配套出现DATA ADMIN管理数据带这个权限基本等于数据层“半个管理员”BACKUP ADMIN管理备份一般仅DBAMONITORING查看监控信息运维同事用的EXECUTE执行存储过程但实际上过程执行权限也可以走对象授权授权的标准写法GRANT CATALOG READ TO FICO_READER; GRANT MONITORING TO DBA_MONITOR_USER;回收系统权限REVOKE CATALOG READ FROM FICO_READER;每次执行完GRANT之后如果用户已经连接通常不需要重启数据库但已建立的会话可能不会立刻感知到新权限。遇到权限改了但行为没变的情况让用户重新登录一下会话就好。3.3 对象权限从Schema级到表、视图、存储过程对象权限的粒度可以粗也可以细。最粗的是Schema级别授权一条命令管整个Schema的所有表最细的是单表单视图级别。如果FICO_READER只需要读SAPFICO下的部分表更严谨的做法是逐个授权GRANT SELECT ON SAPFICO.BSEG TO FICO_READER; GRANT SELECT ON SAPFICO.BKPF TO FICO_READER; GRANT SELECT ON SAPFICO.ACDOCA TO FICO_READER;如果场景允许顾问看整个Schema的表结构再考虑Schema级授权。这里有个重要细节Schema-Specific权限中如果给用户SELECT ON SCHEMA SAPFICO用户能看到该Schema下所有表但只能查自己有权限的表。换句话说Schema级SELECT授权意味着新增表后用户自动获得新表的查询权。这在项目初期很方便但也意味着风险业务顾问可能无意间查到敏感字段比如薪资。所以我的原则是能明细到表就不偷懒用Schema一把梭。存储过程的执行权限单独授GRANT EXECUTE ON SAPFICO.Z_GET_OPEN_ITEM TO FICO_READER;写入权限同理GRANT INSERT, UPDATE, DELETE ON SAPFICO.TMP_DATA TO FICO_READER;这类写权限给临时表、接口表还好给核心日志表就要谨慎评估了。数据的最终一致性是生命线别因为权限给了写导致业务数据乱套。3.4 HANA特有分析权限到底怎么配分析权限Analytic Privileges是HANA里比较独特的设计它解决的是行级数据可见性问题。比如FICO顾问说“我要查ACDOCA表”但公司规定上海的财务顾问只能看“1000公司代码”的数据其他公司代码的数据一概不能看。如果只靠表级SELECT授权做不到这种过滤分析权限就是专门干这个的。创建分析权限的路径在HANA Studio/HDB的Content区找到你想要放置权限的包Package右键New - Analytic Privilege。给权限起个名字比如AP_FICO_1000然后在Business Object里选择一个分析视图或计算视图在Where Used标签页配置过滤条件。比如ACDOCA视图里有一个关键字段RCOMP公司代码在分析权限里配置RCOMP 1000保存、激活这个分析权限再把它授予用户GRANT ANALYTIC PRIVILEGE AP_FICO_1000 TO FICO_READER;分析权限是HANA的“行级安全门禁”报表跑出来的数据只显示你权限内的公司代码。我后来在S4 HANA FICO项目里给十几个财务顾问开报表账号就是靠分析权限实现了“不同公司代码各看各的数”避免了给每个人单独建视图的麻烦。这也是搜索热词里那个“intouch授权路径设置步骤”思路的一个数据库层落地参考先梳理清楚数据权限路径再在HANA里通过分析权限对象去落地。3.5 包权限开发人员传Repository对象时用到如果账号是给HANA开发人员用的他们需要直接创建或修改Repository包里的计算视图、存储过程等开发对象。这个时候就需要包权限。比如给开发账号授权某个包下所有操作权限GRANT REPO.READ, REPO.EDIT, REPO.ACTIVATE ON PACKAGE FICO_REPORTS TO HANA_DEV;包权限和前面的对象权限互相独立别以为给了SELECT ON SCHEMA就自动能改Repository里的视图。HANA的Repository是独立于Catalog的一套对象体系很多从传统数据库转过来的开发会在这里卡住明明表都能看到但计算视图就是打不开因为没配包权限。4. 更规范的做法把授权做进角色Role里4.1 为什么不建议直接给用户授权环境里如果只有三五个用户直接对用户授权问题不大。但企业环境里用户数量动辄几十上百今天给这个授权明天给那个回收信息全在管理员脑子里时间一长完全失控。角色的逻辑思维上特别像“岗位说明书”。你先定义好“FICO报表查询顾问”这个岗位需要哪些权限把它做进一个角色然后谁担任这个岗位就把角色赋予谁。员工离职了把角色收回换给新人就行。权限定义只改一处所有使用该角色的用户同步更新这才是可持续的管理方式。另外SAP HANA的权限有一个特性用户的有效权限 直接授予的权限 所有角色带来的权限。如果你通过角色管理权限审计时可以按角色梳理授权路径如果直接授权审计时只能一个用户一个用户查工作量成倍增加。4.2 创建角色并授权的标准SQL创建角色CREATE ROLE FICO_REPORT_ROLE;给角色授权GRANT SELECT ON SCHEMA SAPFICO TO FICO_REPORT_ROLE; GRANT ANALYTIC PRIVILEGE AP_FICO_1000 TO FICO_REPORT_ROLE; GRANT CATALOG READ TO FICO_REPORT_ROLE;角色创建和授权需要当前用户有ROLE ADMIN权限。然后把这个角色赋予FICO_READER用户GRANT FICO_REPORT_ROLE TO FICO_READER;用户在角色里的权限变更会自动生效精确说用户下一次会话刷新后生效不需要每个用户单独维护。如果某天你想让这个角色下的所有人都不能再查ACDOCA表只需要REVOKE SELECT ON SAPFICO.ACDOCA FROM FICO_REPORT_ROLE;一次性搞定这就是角色的意义。4.3 结合S4 HANA FICO的权限应用案例说一个我实际做过几次的场景。S4 HANA项目刚上线FICO模块顾问陆续进场他们需要核对差异频繁查表。几个人在群里喊“帮我开个账号我要能查BSEG、BKPF、ACDOCA还要能执行几个标准函数。”如果按最简单的做法直接给每个人授权后面肯定乱。我是这么处理的第一步先梳理出FICO顾问需要访问的全部对象清单。以S4 HANA 2025环境为例通常包括SAPFICO.Schema下的BKPF凭证抬头、BSEG凭证行项目、ACDOCA通用日记账一些自定义函数Z_*标准视图V_GL_ACCOUNT等第二步建一个角色FICO_QUERY_ALLCREATE ROLE FICO_QUERY_ALL; GRANT SELECT ON SAPFICO.BKPF TO FICO_QUERY_ALL; GRANT SELECT ON SAPFICO.BSEG TO FICO_QUERY_ALL; GRANT SELECT ON SAPFICO.ACDOCA TO FICO_QUERY_ALL; GRANT EXECUTE ON SCHEMA SAPFICO TO FICO_QUERY_ALL;第三步再建一个受限查询角色只给部分公司代码分析权限CREATE ROLE FICO_QUERY_1000; GRANT SELECT ON SAPFICO.BKPF TO FICO_QUERY_1000; GRANT SELECT ON SAPFICO.BSEG TO FICO_QUERY_1000; GRANT ANALYTIC PRIVILEGE AP_FICO_1000 TO FICO_QUERY_1000;然后给不同顾问授予不同角色GRANT FICO_QUERY_ALL TO FIN_AUDITOR; GRANT FICO_QUERY_1000 TO FIN_CONSULTANT_01;这样整个授权路径就非常清晰用户 - 角色 - 权限对象。后面谁要加表改角色谁离职收用户上的角色。这套方法放在大项目里尤其管用也方便交接给下一位管理员。4.4 授权变更后为什么经常“不生效”这是一个高频问题。明明REVOKE了某个权限用户也确认重新登录了结果还能查到数据。先别急着怀疑HANA出bug大概率是下面几个原因一是连接池缓存。应用服务器连接HANA通常用连接池账号权限变更后连接池里的旧连接还在用旧权限上下文。让应用侧重启连接池或者干脆重启应用实例才能强制刷新。二是有角色叠加。用户可能同时有几个角色一个角色里收回了权限另一个角色里还保留着。查用户有效权限时要把所有角色加上直接授权综合看SELECT * FROM SYS.EFFECTIVE_PRIVILEGES WHERE USER_NAME FIN_CONSULTANT_01;这条SQL列出的是用户真正拥有的全部有效权限排查问题先跑它。三是分析权限缓存。计算视图和分析权限之间有缓存机制激活新的分析权限后旧会话可能还停留在旧数据权限里需要让用户重新建立会话。5. 运维中常见的坑与排查技巧5.1 常见报错速查表报错信息含义处理方式insufficient privilege: Not authorized缺少对象或系统权限查EFFECTIVE_PRIVILEGES定位缺失授权could not open connection: invalid user or password用户或密码不对核对账号名、密码策略确认账号未被锁定user is deactivated账号被停用ALTER USER ... ACTIVATE USER NOWno SELECT privilege on view视图底层表权限不足给底层Schema或表补SELECTanalytic privilege not found分析权限不存在确认分析权限对象已激活password does not meet policy密码不符合复杂度策略改成大写小写数字特殊字符组合这些报错里“insufficient privilege”出现频率最高。遇到就先跑SELECT * FROM SYS.EFFECTIVE_PRIVILEGES WHERE USER_NAME 登录账号;看一下这个账号到底缺了什么。别凭感觉瞎猜数据说话。5.2 我踩过的几个坑第一个坑是用SYSTEM账号建完用户随手就把USER ADMIN授给了业务账号想着以后让业务自己管账号。后来发现这个账号能创建用户还能给用户授权等于把整栋楼的钥匙给了租户。审计发现问题后处理起来非常麻烦。现在我的原则是USER ADMIN、ROLE ADMIN这类系统权限只给DBA和权限管理员业务账号一个都不给。第二个坑是分析权限激活了结果用户始终看不到数据。折腾了半天发现计算视图本身还有一层“数据权限检查”机制需要在视图属性里选择“分析权限”作为数据过滤方式光建分析权限、授权视图没启用权限检查等于白干。创建计算视图时在View Properties里有一个Analytic Privilege设置项需要选择Enabled并绑定对应的权限对象。第三个坑是PUBLIC角色动不得。有次为了省事想直接往PUBLIC角色里加一个查询权限让所有人都能查某张基础表。日志一查PUBLIC角色被改等于所有用户权限都被变了影响面不可控。幸好发现得早及时REVOKE了。PUBLIC角色里任何权限变更都是全局性的动之前一定三思。第四个坑是账号密码有效期。给外部顾问开账号时设了有效期3个月到期后账号自动失效顾问正干着活突然连不上来问怎么回事。后来我养成了习惯建临时账号时在备注里写清楚到期时间到期前一周提醒业务方续期或者清理。5.3 权限审计与日常检查企业上线后数据库权限审计是常态。我一般每季度做一次权限盘点核心就几条SQL列出所有用户SELECT USER_NAME, CREATE_TIME FROM SYS.USERS WHERE USER_NAME NOT LIKE _SYS% AND USER_NAME ! SYSTEM;列出每个用户的系统权限SELECT GRANTEE, PRIVILEGE FROM SYS.GRANTED_PRIVILEGES WHERE GRANTEE FIN_CONSULTANT_01 AND IS_GRANTABLE FALSE;列出某个角色下所有权限SELECT * FROM SYS.ROLE_PRIVILEGES WHERE ROLE_NAME FICO_QUERY_ALL;我还会导出一份完整清单检查是否有账号超过180天未登录SELECT USER_NAME, LAST_SUCCESSFUL_CONNECT FROM SYS.USERS WHERE LAST_SUCCESSFUL_CONNECT ADD_DAYS(CURRENT_DATE, -180);长期不用的账号要么锁定要么删除。项目上每半年至少能清出一批过期账号都是当初各种原因建的后来人走了账号留下。清理的时候记得走工单流程留好记录这也是审计时最有力的凭证。最后再分享一点我自己的习惯权限管理这件事工具和SQL都只是手段真正考验人的是“路径思维”。我在每一次开账号之前都会先画一遍授权路径这个账号是谁在用它需要访问哪些对象这些对象在哪个Schema涉及哪些视图和底层表有没有行级过滤需求应该做成角色还是直接授权。这个过程可能只花十分钟但能在后面避免无数个“为什么查不到数据”的求助电话。有一次在S4项目里配置FICO全套功能时几十个顾问各要各的权限我靠的就是先把通用权限整理成几个标准角色再按需求做微调整个配置工作在一个下午就完成了后续几乎没有权限类的工单。这比我早期一个个用户单独授权的效率高了一个量级。另外每个新账号创建之后我都会在HANA的扩展备注里写清楚这个账号的用途、负责人、创建日期、有效期。这些信息在审计和交接时价值巨大尤其项目干到后期人员流动性大没有备注的僵尸账号最让人头疼。权限设置从来不是建完就完事它是一个持续维护的过程把基础打扎实了后面才能少折腾。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。