ITPub博客

首页 > 数据库 > 数据库开发技术 > HANA Cloud: HDI中的权限到底是如何使用的

HANA Cloud: HDI中的权限到底是如何使用的

原创 数据库开发技术 作者:数据库杂记 时间:2023-06-15 15:22:52 0 删除 编辑


前言

HANA Cloud对各类用户的安全性要求极高,设定了非常多的角色和User Group。这在实际使用过程中,是需要十分注意的。dbadmin这个用户和HDI Admin是完全分离的。同时,它也不能直接访问Container (或叫目标schema)下的数据库对象。

记得在前边有一篇短文:HANA Cloud案例: 清理残留的Tenant Container 特意提到这个现象,其实这也是一种权限保护。但是在保护的同时,也给admin用户带来困扰,那么有没有办法创建一个统一的用户,去访问所有的HDI container呢?本文的目的就是基于这个背景进行一些实验,结论是有办法。

首先我们可以看下HDI (HANA Deployment Instructure)的权限基本架构:

基本上是需要通过dbadmin以及hdiadmin进行层层授权才能达到最终目的。

实作:

1、首先,创建一个新用户,用作hdi admin。为方便,后边都用这个用户做所有的container的管理用户。这里,这个admin用户是:ABCDEF1234567890ABCDEF1234567890 (HANA数据库用户名是不区分大小写的)。HANA cloud对于hdi相关用户的使用要求还是蛮严格的,名太短,后续的一些操作就可能不成功。密码是要符合有大小写最短8位的基本要求。这里创建的用户名长度为32位的字符串。

CREATE USER ABCDEF1234567890ABCDEF1234567890 PASSWORD Pass0123456 NO FORCE_FIRST_PASSWORD_CHANGE;

CREATE LOCAL TEMPORARY TABLE #PRIVILEGES LIKE _SYS_DI.TT_API_PRIVILEGES;
INSERT INTO #PRIVILEGES (PRINCIPAL_NAME, PRIVILEGE_NAME, OBJECT_NAME) SELECT 'ABCDEF1234567890ABCDEF1234567890', PRIVILEGE_NAME, OBJECT_NAME FROM _SYS_DI.T_DEFAULT_DI_ADMIN_PRIVILEGES;
CALL _SYS_DI.GRANT_CONTAINER_GROUP_API_PRIVILEGES('_SYS_DI', #PRIVILEGES, _SYS_DI.T_NO_PARAMETERS, ?, ?, ?);
DROP TABLE #PRIVILEGES;

我们使用函数:_SYS_DI.GRANT_CONTAINER_GROUP_API_PRIVILEGES 来完成这个授权的动作。至此用户:ABCDEF1234567890ABCDEF1234567890具备DI_ADMIN的权限。

2、使用新DI_ADMIN权限用户登陆, 进行group container admin授权:

CREATE LOCAL TEMPORARY COLUMN TABLE #PRIVILEGES LIKE _SYS_DI.TT_API_PRIVILEGES;
INSERT INTO #PRIVILEGES (PRINCIPAL_NAME, PRIVILEGE_NAME, OBJECT_NAME) SELECT 'ABCDEF1234567890ABCDEF1234567890', PRIVILEGE_NAME, OBJECT_NAME FROM _SYS_DI.T_DEFAULT_CONTAINER_GROUP_ADMIN_PRIVILEGES;
CALL _SYS_DI.GRANT_CONTAINER_GROUP_API_PRIVILEGES('BROKER_CG', #PRIVILEGES, _SYS_DI.T_NO_PARAMETERS, ?, ?, ?);
DROP TABLE #PRIVILEGES;

注意结果一定要是return_code为0. 否则需要看看是什么原因.
| RETURN_CODE | REQUEST_ID |
| ----------- | ---------- |
| 0           | 205        |

这里是把自己加入到group admin

3、再用相同的用户登录,进行具体的默认的container admin授权

CREATE LOCAL TEMPORARY COLUMN TABLE #PRIVILEGES LIKE _SYS_DI.TT_API_PRIVILEGES;
INSERT INTO #PRIVILEGES (PRINCIPAL_NAME, PRIVILEGE_NAME, OBJECT_NAME) SELECT 'ABCDEF1234567890ABCDEF1234567890', PRIVILEGE_NAME, OBJECT_NAME FROM _SYS_DI.T_DEFAULT_CONTAINER_ADMIN_PRIVILEGES;
CALL _SYS_DI#BROKER_CG.GRANT_CONTAINER_API_PRIVILEGES('1594449AA9B8432BA70D91402E4ED474', #PRIVILEGES, _SYS_DI.T_NO_PARAMETERS, ?, ?, ?); 
DROP TABLE #PRIVILEGES; 

比如这里就有一个container, schema是:1594449AA9B8432BA70D91402E4ED474. 将它的admin授权给用户:ABCDEF1234567890ABCDEF1234567890.

4、使用相同的用户登录,发现这个时候它是1594449AA9B8432BA70D91402E4ED474#DI的admin了。

我们最后的目的 是要访问schema: 1594449AA9B8432BA70D91402E4ED474中的对象

5、使用相同的用户登录,执行#DI的container用户授权 (T_DEFAULT_CONTAINER_USER_PRIVILEGES)

CREATE LOCAL TEMPORARY COLUMN TABLE #PRIVILEGES LIKE _SYS_DI.TT_API_PRIVILEGES;
INSERT INTO #PRIVILEGES (PRINCIPAL_NAME, PRIVILEGE_NAME, OBJECT_NAME) SELECT 'ABCDEF1234567890ABCDEF1234567890', PRIVILEGE_NAME, OBJECT_NAME FROM _SYS_DI.T_DEFAULT_CONTAINER_USER_PRIVILEGES;
CALL 1594449AA9B8432BA70D91402E4ED474#DI.GRANT_CONTAINER_API_PRIVILEGES(#PRIVILEGES, _SYS_DI.T_NO_PARAMETERS, ?, ?, ?);
DROP TABLE #PRIVILEGES;

仔细看下,调用的是1594449AA9B8432BA70D91402E4ED474#DI.GRANT_CONTAINER_API_PRIVILEGES。这一步授权的是T_DEFAULT_CONTAINER_USER_PRIVILEGES.

6、schema user权限授权

使用相同的用户登录, 执行schema相关授权:

CREATE LOCAL TEMPORARY COLUMN TABLE #PRIVILEGES LIKE _SYS_DI.TT_SCHEMA_PRIVILEGES; 
INSERT INTO #PRIVILEGES ( PRIVILEGE_NAME, PRINCIPAL_SCHEMA_NAME, PRINCIPAL_NAME ) VALUES ( 'CREATE ANY', '', 'ABCDEF1234567890ABCDEF1234567890' );
CALL 1594449AA9B8432BA70D91402E4ED474#DI.GRANT_CONTAINER_SCHEMA_PRIVILEGES( #PRIVILEGES, _SYS_DI.T_NO_PARAMETERS, ?, ?, ?);
DROP TABLE #PRIVILEGES;

至此,我们可以通过用户ABCDEF1234567890ABCDEF1234567890完全访问1594449AA9B8432BA70D91402E4ED474这个schema/container下的对象了。

SET SCHEMA 1594449AA9B8432BA70D91402E4ED474;
CREATE TABLE t123(id int, col2 varchar(32));
INSERT INTO t123 values(1, 'wang');
SELECT * FROM t123;

我们可以用set schema切换schema,简单的验证权限了。

小结:

整个HDI的权限体系看起来很繁琐,可这也是SAP HANA的一大特色,如果不加小心,很难达到目标schema的区域进行合规操作。这方面HANA Cloud在权限体系方面做的确实非常有特色。

参考:

SAP HDI Administration :
https://help.sap.com/docs/SAP_HANA_PLATFORM/3823b0f33420468ba5f1cf7f59bd6bd9/b36b4b60c9e44291ae02e520135fd898.html



原文作者:数据库杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-04-22

  • 博文量
    276
  • 访问量
    160348