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

2018-01-05 10:30:16来源:网络收集作者:咖啡不加糖人点击

分享

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


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


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


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


思路如下:


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


具体如下:


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


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

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 dual;--自动填上ID
select sysdate into :NEW.createdate from dual;--自动填上时间戳
end trg_pub_acceptlog;
--视图
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 pub;
grant insert on work.v_acceptlog to pub;
--创建别名权限
grant create synonymto pub;

3、用pub登录


--创建一个别名,蒙骗第三方,让他们以为这是一个物理表,而不是视图
create or replace synonym acceptlog for work.v_acceptlog;
--如此,第三方公司即可直接使用acceptlog进行数据插入矣
insert into acceptlog(f1,senddate) values('原始资料',sysdate);
select * from acceptlog;

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台