0
点赞
收藏
分享

微信扫一扫

开放数据库表让第三方直接操作解决方案

小沙坨 2022-08-15 阅读 84


做的项目中,有一个环节是第三方公司将文件推送到我方文件服务器,同时记录日志。这个日志,当然也是保存进我方数据库。

这个日志实现,最自然的想法就是调接口。我方提供接口,第三方调用。但大家都嫌麻烦,业主方决定让第三方直接写数据库。

这就涉及到权限等问题了。权限应能做到:

1、仅能插入,不能修改、删除
2、为方便和安全计,仅能插入部分字段
3、对第三方,能插入的字段才可见,否则透明

思路如下:

1、建立视图,仅包含部分字段,让第三方操作视图
2、对于未插入的字段,如主键ID,时间戳,用触发器自动完成
3、为第三方建立专用数据库账号,赋最小必要权限;且使用别名,屏蔽表空间等细节

具体如下:

1、创建第三方表空间及用户

CREATE USER pub identified by--无须创建默认表空间
grant connect to

2、在表空间work下创建触发器、视图

--日志表
CREATE TABLE "WORK"."ACCEPTLOG"
( "ID" VARCHAR2(64) NOT NULL ENABLE, --主键
"F1" VARCHAR2(50),
"F2" VARCHAR2(50),
"F3" VARCHAR2(50),
"FILENAME" VARCHAR2(100),
"SUFFIX" VARCHAR2(10),
"FILESIZE" NUMBER(9,0),
"SENDDATE" DATE NOT NULL ENABLE,
"CREATEDATE" DATE, --时间戳
"NOTE" VARCHAR2(200),
CONSTRAINT "PK_ACCEPTLOG" PRIMARY KEY ("ID"))

--建立触发器
create or replace trigger trg_pub_acceptlog
before insert on acceptlog
for each row
declare
-- local variables here
begin
select sys_guid() into :NEW.ID from--自动填上ID
select sysdate into :NEW.createdate from--自动填上时间戳
end

--视图
create or replace view v_acceptlog as
select f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,filename,suffix,filesize,senddate from work.acceptlog;

--权限
grant select on work.v_acceptlog to
grant insert on work.v_acceptlog to
--创建别名权限
grant create synonym to

为什么ID,时间戳这些不由第三方公司填写呢?一是省工夫,方便;二主要是不想让他们来控制。他们甚至不需要知道有这些字段,日志嘛,他们只管记录就行,查询和显示、分析日志是我们的事。

3、用pub登录

--创建一个别名,蒙骗第三方,让他们以为这是一个物理表,而不是视图
create or replace synonym acceptlog for work.v_acceptlog;

--如此,第三方公司即可直接使用acceptlog进行数据插入矣
insert into acceptlog(f1,senddate) values('原始资料',sysdate);
select * from

视图不只是用于查询,只要对应单个表,其实也可以用于插入等操作。


举报

相关推荐

0 条评论