适合阅读对象
JDE CNC人员
数据库管理人员(DBA)
前言
我们经常会遇到这种情况,需要提供数据库的只读用户,防止数据被修改:
JDE日常查账,问题排查
报表软件取数
提供数据外部审核
第三方软件接口
我们知道JDE数据库有多个schema。因此,当出现此类要求时,最好在您的数据库中准备好只读角色。以下是提供对使用的只读访问权限的步骤:
创建数据库用户
让我们首先从创建数据库用户开始,通过提供用户名、用密码、用户表空间和临时表空间。以下 SQL 查询应该创建一个用户,用户名为 JDEREAD
,密码为 mypass
,用户表空间为 users
,临时表空间为 temp
:
CREATE USER JDEREAD
IDENTIFIED BY mypass
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
允许用户连接到数据库
必须允许用户在创建后连接到数据库。以下 SQL 将允许用户“JDEREAD”连接到数据库:
GRANT CREATE SESSION to JDEREAD;确定访问JDE 数据库权限的名称
由于在 JDE中有多个Schema,首先列出需要访问的名单。对于此示例,我将在 JD Edwards 9.2 设置中提供对开发 (DV) 环境以及系统表的访问。各自的数据库名称(Schema)如下:
TESTDTA(业务数据)
TESTCTL(控制表)
DV920(中心物体)
SY920(系统表)
可以使用以下脚本来设置查询是否存在:
SELECT * FROM dba_tables WHERE owner IN ('TESTDTA', 'TESTCTL', 'SY920', 'DV920');确定好后,后面步骤再使用。
创建只读角色
最好创建一个角色并授予只读访问权限,然后将其分配给用户,而不是直接将权限分配给用户。这将使您能够在下次出现类似需求时直接创建新用户,并为其分配只读角色即可。以下是创建名为“JDE_READONLY”的新角色的 SQL:
CREATE ROLE JDE_READONLY;为角色分配权限
一旦准备好角色,我们将通过赋予SELECT ON
仅为其分配SELECT
访问权限。以下是为数据库 TESTDTA、TESTCTL、DV920 和 SY920 中的所有表授予对角色 JDE_READONLY 的访问权限的 PL/SQL 脚本:
BEGIN
FOR x IN (SELECT * FROM dba_tables WHERE owner IN ('TESTDTA', 'TESTCTL', 'SY920', 'DV920'))
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON ' || x.owner || '.' || x.table_name || ' TO JDE_READONLY';
END LOOP;
END;
为用户分配角色
一旦我们准备好用户和角色,我们就会将角色分配给用户,以授予他对所需表的选择权限。以下是将角色JDE_READONLY
分配给用户JDEREAD
的 SQL:
GRANT JDE_READONLY TO JDEREAD;完成!




