博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SAP HANA中的用户拷贝(User Copy)
阅读量:7207 次
发布时间:2019-06-29

本文共 1103 字,大约阅读时间需要 3 分钟。

SAP HANA中的用户是没有功能进行直接的拷贝的,但是我们可以通过建立存储过程调用,通过sql语句的方式进行拷贝:

存储过程定义如下,各位可根据自己的需求进行修改:

 

CREATE PROCEDURE SYSTEM.COPY_USER (IN V_SOURCE_USER NVARCHAR(256), IN V_TARGET_USER NVARCHAR(256), IN V_TARGET_PWD NVARCHAR(256)) LANGUAGE SQLSCRIPT AS

  V_FOUND INT := 1;
  CURSOR C_ROLE_LIST (V_SRC_USER NVARCHAR(256)) FOR
    SELECT ROLE_NAME, IS_GRANTABLE FROM "SYS"."GRANTED_ROLES" WHERE GRANTEE=:V_SRC_USER AND GRANTEE_TYPE='USER' AND GRANTOR=CURRENT_USER;
BEGIN
  SELECT COUNT(*) INTO V_FOUND FROM "SYS"."USERS" WHERE USER_NAME = :V_SOURCE_USER;
  IF :V_FOUND = 1 THEN
    EXEC 'CREATE USER ' || :V_TARGET_USER || ' PASSWORD ' || :V_TARGET_PWD;
   
    FOR V_LIST_ROW AS C_ROLE_LIST(:V_SOURCE_USER) DO
      IF V_LIST_ROW.IS_GRANTABLE='FALSE' THEN
        EXEC 'GRANT ' || V_LIST_ROW.ROLE_NAME || ' TO ' || :V_TARGET_USER;
      ELSE
        EXEC 'GRANT ' || V_LIST_ROW.ROLE_NAME || ' TO ' || :V_TARGET_USER || ' WITH ADMIN OPTION';
      END IF;
    END FOR;
  END IF;
END;

 

调用方式如下:

CALL SYSTEM.COPY_USER ('SYSTEM', 'Ivan', 'Initial1');

CALL COPY_USER ('SOURCE_USER', 'TARGET_USER', 'INITIAL_PASSWORD')
 
在密码参数设置的时候,注意密码最短长度为8位,需要大小写和数据混合密码。
 
根据这个存储过程的使用方法,我们可以延伸出角色拷贝等多种应用场景!

转载地址:http://ogsum.baihongyu.com/

你可能感兴趣的文章
ant design后台模板-1.前端环境搭建
查看>>
什么是npm ?
查看>>
php 中continue break exit return 的区别
查看>>
敏捷爽畅模型及其演变——Diana Larsen专访
查看>>
Bootstrap 4 正式发布,却可能生不逢时
查看>>
PWA即将推向所有Chrome平台
查看>>
修复.NET的HttpClient
查看>>
服务应该去版本化,不管是微服务还是SOA
查看>>
GitHub Draft Pull请求支持新的协作流程
查看>>
JShell:Java REPL综合指南
查看>>
为你的组织设计自己的障碍消除流程
查看>>
为什么你写的代码糟透了?
查看>>
使用Flutter一年后,这是我得到的经验
查看>>
滴滴进入寒冬期,将裁员2000人
查看>>
被批伪开源!刚刚融资6千万美元的Redis怎么了?
查看>>
专访刘刚:360手机卫士的性能监控与优化
查看>>
去哪儿网消息队列设计与实现
查看>>
MySQL 5.7中的更多改进,包括计算列
查看>>
书评与访谈:Scrum for Managers
查看>>
借助Unity AR Foundation构建跨平台AR应用
查看>>