是否可以保存用户角色分配?当我替换应用程序或将其删除并使用相同的应用程序ID添加新应用程序时,Apex会从APEX_APPL_ACL_USERS
表中删除用户角色分配。实际上,我可以创建自定义表来存储用户角色定义,以后再用于在APEX_APPL_ACL_USERS
表中插入,但是我认为这不是一个好的解决方案。
答案 0 :(得分:0)
目前没有。最安全的方法是在替换应用程序之前备份用户角色。我发现,当我通过UI进行导入时,将保留用户,而当您删除应用程序时,用户将消失。关于如何生成脚本以还原用户角色的blog很棒。 对于单个应用程序,这是一个脚本(大部分取自以上博客)。将12345替换为您的应用程序ID。重新生成应用程序后,它会生成一个脚本,您必须执行该脚本。
WITH application_id (app_id) AS
(SELECT 12345 FROM dual)
SELECT txt
FROM (SELECT 1 x, 'BEGIN' txt FROM DUAL
UNION ALL
SELECT 2,
RPAD(' ', 3)
|| CASE
WHEN rn = 1 THEN REPLACE(q'[APEX_UTIL.set_workspace('~workspace~');]', '~workspace~', workspace)
END
|| REPLACE(
REPLACE(
REPLACE(
q'[APEX_ACL.ADD_USER_ROLE(p_application_id=>~app~,p_user_name=>'~user~',p_role_static_id=>'~role~');]',
'~app~',
application_id),
'~user~',
user_name),
'~role~',
role_static_id) txt
FROM (SELECT workspace,
ROW_NUMBER() OVER(PARTITION BY workspace ORDER BY application_id, user_name, role_static_id) rn,
application_id,
user_name,
role_static_id
FROM apex_appl_acl_user_roles
JOIN application_id a ON a.app_id = application_id)
UNION ALL
SELECT 3, ' COMMIT;' FROM DUAL
UNION ALL
SELECT 4, 'END;' FROM DUAL)
ORDER BY x;