SAP HANA SQL 进阶教程
接上篇 《SAP HANA SQL 基础教程》。
5、HANA SQL 进阶教程
注:本进阶教程,需要具有Hana较高的系统管理权限,或者是相应的开发权限。
(1)Databases
HANA 使用 Database 来实现租户数据的物理隔离。一个租户对应一个 Database ,和其他数据库中的 “Database” 这一术语相比,HANA 中的 Database 更像是一个数据库实例,不同实例之间的数据是物理隔离的。
Script1:查询 HANA 服务器中已开辟的数据库租户(使用多租户主管理员 SYSTEM 账号登录):


-- 用多租户主管理员SYSTEM操作
SELECT DATABASE_NAME FROM SYS.M_DATABASES; -- 查询已有租户

Script2:创建与删除租户:
-- 用多租户主管理员SYSTEM操作
CREATE DATABASE DB1 SYSTEM USER PASSWORD Yourpas0; -- 创建租户
DROP DATABASE DB1; -- 删除租户
Script3:启停租户服务&更改租户密码:
-- 用多租户主管理员SYSTEM操作
alter system stop database DB1; -- 关闭DB1服务
alter database DB1 system user password Yourpas1; -- 修改密码
alter system start database DB1; -- 重新启动DB1服务
(2)User & Role
HANA 使用用户(User) 和 角色(Role) 来实现权限控制。
Script1:在租户中创建用户(使用租户的管理员 SYSTEM 账号登录):


-- 用租户DB1的SYSTEM操作
-- 创建用户,自动生成同名SCHEMA,已经存在的SCHEMA名称无法再用作用户名
CREATE USER NewUser PASSWORD Yourpas0 NO FORCE_FIRST_PASSWORD_CHANGE;
-- 修改用户
ALTER USER NewUser PASSWORD Yourpas1; -- 修改密码
ALTER USER NewUser RESET CONNECT ATTEMPTS; -- 解锁
ALTER USER NewUser DISABLE PASSWORD LIFETIME; -- 设置密码永不过期
-- 删除用户
DROP USER NewUser CASCADE; -- 删除用户及相应schema,及其拥有的对象
Script2:创建角色,授予 SAPHANADB 只读权限:
-- 用SAPHANADB所在租户的SYSTEM操作
create role R_READER; -- 创建角色
-- 用SAPHANADB用户操作
GRANT SELECT, SELECT METADATA ON SCHEMA SAPHANADB to R_READER WITH GRANT OPTION; --只读访问SAPHANADB
-- 删除角色
drop role R_READER; -- 删除角色
Script3:创建只读用户 DBREADER,授予 SAPHANADB 只读权限:
-- 用SAPHANADB所在租户的SYSTEM操作
CREATE USER DBREADER PASSWORD Yourpas0 NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER DBREADER DISABLE PASSWORD LIFETIME; -- 设置密码永不过期
GRANT R_READER to DBREADER; -- 授予角色
REVOKE R_READER from DBREADER; -- 撤回角色
Script4:创建不同的开发用户,授予不同的资源库访问权限:
-- 用SAPHANADB所在租户的SYSTEM操作
-- 创建开发者角色
create role R_DEVELOPER; -- 普通开发者角色
create role R_DEVADMIN; -- 开发管理员角色
GRANT R_READER to R_DEVELOPER; -- 角色授予角色
GRANT R_DEVELOPER to R_DEVADMIN; -- 角色授予角色
--授权资源库:普通开发人员
GRANT REPO.READ on "zdata.wkspace" to R_DEVELOPER;
GRANT REPO.ACTIVATE_NATIVE_OBJECTS on "zdata.wkspace" to R_DEVELOPER;
GRANT REPO.MAINTAIN_NATIVE_PACKAGES on "zdata.wkspace" to R_DEVELOPER;
GRANT REPO.EDIT_NATIVE_OBJECTS on "zdata.wkspace" to R_DEVELOPER;
--授权资源库:开发管理员
GRANT REPO.READ on "zdata.admin" to R_DEVADMIN;
GRANT REPO.ACTIVATE_NATIVE_OBJECTS on "zdata.admin" to R_DEVADMIN;
GRANT REPO.MAINTAIN_NATIVE_PACKAGES on "zdata.admin" to R_DEVADMIN;
GRANT REPO.EDIT_NATIVE_OBJECTS on "zdata.admin" to R_DEVADMIN;
--创建普通开发人员
CREATE USER DBDEV PASSWORD Yourpas0 NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER DBDEV DISABLE PASSWORD LIFETIME; -- 设置密码永不过期
GRANT R_DEVELOPER TO DBDEV; -- 授予:普通权限
--创建开发管理员
CREATE USER DBDEVADMIN PASSWORD Yourpas0 NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER DBDEVADMIN DISABLE PASSWORD LIFETIME; -- 设置密码永不过期
GRANT R_DEVADMIN TO DBDEVADMIN; -- 授予:管理权限
(3)Schemas
HANA 使用 Schema 来对数据库表进行隔离和区分。和其他数据库中的 “Schema” 这一术语相比,HANA 中的Schema 更像是一个“数据库”的概念。每个 Schema 都有自己的拥有者,以及对这个 Schema 下各种数据库对象进行各种操作的权限合集。
新建租户 DB1 的管理员 SYSTEM,默认可见较多的系统 SCHEMA:
租户 DB1 的新建用户 NEWUSER,默认可见较少的系统 SCHEMA,以及与用户名同名的 SCHEMA:

创建 schema 的两种方法:
Script1:第一种直接创建 schema,默认拥有者为当前创建者,或者也可以指定拥有者,拥有者对 schema 具有所有操作权限:
-- 用租户DB1的SYSTEM操作
CREATE SCHEMA MYSCHEMA; -- 在SYSTEM用户下可见,拥有者为SYSTEM
CREATE SCHEMA MYSCHEMA2 OWNED BY NEWUSER; -- 在NEWUSER用户下可见,拥有者为NEWUSER

Script2:第二种通过创建用户的方式,在创建用户的时候,系统会自动添加一个同名的 schema ,该用户对自身同名 schema 具有所有操作权限:
CREATE USER NewUser PASSWORD Yourpas0; -- 上面已创建该用户
Script3:管理 NEWUSER 用户下的 SCHEMA:
-- 用租户DB1的NEWUSER操作
select * from SYS.schemas; -- 查询NEWUSER用户可见Schema
-- 删除拥有的schema(注:不可删除与用户名同名的schema)
DROP SCHEMA MYSCHEMA2; --无依赖时才能删除
-- 或者:
DROP SCHEMA MYSCHEMA2 CASCADE; --删除所有依赖对象
/*
DROP SCHEMA <SCHEMA_NAME> [<DROP_OPTION>]
DROP_OPTION: CASCADE | RESTRICT
RESTRICT:直接删除没有依赖的对象,如果对象有依赖关系,会抛出错误信息。
CASCADE:直接删除所有对象。
默认的DROP_OPTION为:RESTRICT

本文详细介绍了HANASQL的进阶使用,包括数据库租户的创建与删除,用户和角色的管理,模式的概念,以及表的创建、修改和索引操作。此外,还涉及到了表分区的方法,如Hash、Range和Roundrobin分区,以及如何管理表的注释和视图。内容旨在帮助读者深入理解HANA数据库的高级功能。
最低0.47元/天 解锁文章
34

被折叠的 条评论
为什么被折叠?



