知识卡片:SAP HANA中实现跨实例访问并且只读
SAP HANA中实现用户只读权限
假设你现在有一个HANA库,你的业务用户是USR_PRD,这个用户下面有一些表。现在有第三方想要访问你的表。能想到的最简单的解决方案就是在你的库里新建一个用户提供给第三方,我们假设新建的用户是USR_OUT。
HANA Studio设置
打开Hana Studio
新增访问用户USR_OUT,新增用户后,HANA会自动为用户新增对应的SCHEMA。
为USR_OUT用户赋予SAP_INTERNAL_HANA_SUPPORT角色。如果没有该角色,泽USR_OUT用户无法通过studio工具登录
以USR_PRD用户登录系统,这一步必须,很多人习惯用SYSTEM用户来操作,你会发现设置权限的时候提示你无权限。
在USR_PRD用户登录的状态下,依次打开Security——Users——USR_PRD节点,双击打开
切换到Object Privileges,有的版本显示的是Sql Privileges
点击绿色的+号,找到USR_OUT用户,点击OK
在右侧的权限列表,只选择SELECT,其他不选,保存
此时就完成了只读权限的设置,如果以USR_OUT用户登录,你会发现它能看到USR_PRD用户所有的表,但是没有任何的修改权限,包括ALTER\INSERT\DELETE\UPDATE\DROP\TRUNCATE等。
通过受限用户实现跨库访问和源库只读
上面的操作可以实现第三方访问本库的数据,但是仍然有一个局限性,那就是USR_OUT这个用户对USR_OUT这个schema有完全权限,它可以任意的新增、修改、删除。这样的一个用户给第三方的话会有隐患。毕竟我们的需求是:你只能看我的数据,但是不能在我的库里有任何的修改权限。
改进的措施就是通过受限用户。
操作步骤跟上面是类似的,只是有两点不同:
- 在新增用户的时候,一定要选择那个"New Restricted User",这样新增的才是一个受限用户。
- 不要给该用户赋予SAP_INTERNAL_HANA_SUPPORT角色
其他操作相同。
不给该用户赋予SAP_INTERNAL_HANA_SUPPORT角色,因为赋予该角色后会有一些预期外的副作用,它可能会看到它不应该看到的视图、表、索引。例如你在源库USR_PRD中三个视图,你设置USR_OUT只能看到其中一个视图,但是最后你会发现,USR_OUT用户其实能看到USR_PRD中所有的三个视图。这就是SAP_INTERNAL_HANA_SUPPORT影响的。
新增的受限用户,在不设置权限的情况,它即使对自己的SCHEMA也没有任何的查看和修改权限,它甚至都不能用studio工具登录,因为在SAP HANA中,受限用户本身只能用HTTP/HTTPS的方式登录,也就是或者你有web端管理界面,或者你用JDBC/odbc的方式来连接。
通过这样的设置,你会发现新增的这个受限用户,可以访问USR_PRD中的表,但是是它有权限的表,同时它对自己没有任何的查看、修改权限
ORACLE的不同
在ORACLE中一个数据库用户可以有多个表空间,我们要设置用户的权限其实非常简单,就是用sqlplus / as sysdba,设置用户的默认表空间病执行grant语句即可,
alter user usr_out default tablespace USR_PRD;
grant select connect,select any table to usr_out;
如果出现ORA-00942那是因为在ORACLE很早的版本开始,普通用户默认不允许访问sys表,如果需要访问的话,需要修改参数并重启数据库
alter system set O7_DICTIONARY_ACCESSIBILITY=TRUE scope=spfile;
shutdown immediate;
startup;
注意修改该参数不是一个好做法,普通用户任何时刻都不应该能访问SYS表。这是题外话,不详细讨论。
HANA与ORACLE一个很大的不同是,在HANA中每一个schema相当于是oracle的一个库,或者叫实例,schema同名的用户,对这个schema是有管理权限的。只有SYS和该用户可以进行权限的设置,SYSTEM用户都不行,所以我用system用户去修改的时候他会报错:
Could not modify user 'USR_PRD'。Could not grant privilege SELECT on USR_OUT You are not authorized to perform the required actions;
原因就是USR_PRD的Grantor是SYS,不是SYSTEM。
我觉得HANA的权限体系跟ORACLE相比,还是略显晦涩,主要就在于要理解在HANA中,新增一个用户时会默认新增同名的SCHEMA,该用户是自己SCHEMA的管理员,只有SYS和他自己能做权限相关的修改。
文章来自于网络,如果侵犯了您的权益,请联系站长删除!