免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7777 | 回复: 19
打印 上一主题 下一主题

开放数据库 -----------------求方案 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-10 10:16 |只看该作者 |倒序浏览
需求较简单,客户要查询我们数据库中的数据(某些表),通过webservice查询,只允许访问部分表。现在假如是你,你怎么开放你的数据库,应考虑到哪些因素?

论坛徽章:
0
2 [报告]
发表于 2011-10-10 11:31 |只看该作者
本帖最后由 yanyangtian4502 于 2011-10-10 11:32 编辑

暴露一些服务接口,这些服务接口只要访问你允许的那些表就行了!
大致的注意点:
1. 安全问题。如何识别调用方是你的允许的用户? 还是说,你的服务接口都可以调用?这个需要考虑清楚。
2. 上下文问题:是否为每次访问的调用保留状态。
3. 性能问题。这个要就涉及到很多的问题了,例如服务接口的颗粒度问题!是多次调用获取数据,还是一次就获取足够多的数据。

总而言之,你的问题基本涉及到以下知识点:
1. 如何定义服务和服务的操作。(这个可以参看SOA的一些原则)
2. 性能问题,可以考虑一下:远程调用外观模式。


如果有不明白的,再谈!

论坛徽章:
0
3 [报告]
发表于 2011-10-11 15:36 |只看该作者
回复 2# yanyangtian4502


现实际情况这样,数据库是postgresql ,支持SQL/XML  


一:数据库端,需要开放的表映射到一张视图,通过grant 授权视图给用户


二:用户调用webservice API 传入sql/XML 查询语句, webservice 返回 XML 结果
      函数有: xmlelement xmlforest ....

问题 1 :SQL/XML 是否不同数据通用? 以后换成别的库了呢。

eg.  C#端代码

        private void button1_Click(object sender, EventArgs e)
        {
            //string Ret = calc.login("admin","admin");
            string result = DbClient.sql("SELECT xmlforest(amname as Name, amsupport as support, amcanorder, amgettuple )FROM pg_am");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DbClient = new Client1.DBws.dbPortTypeClient("db", "http://localhost:9999");
        }

论坛徽章:
0
4 [报告]
发表于 2011-10-11 15:37 |只看该作者
这是在实际情况下做了个演示

论坛徽章:
0
5 [报告]
发表于 2011-10-11 15:58 |只看该作者
本帖最后由 yanyangtian4502 于 2011-10-11 16:14 编辑

比较简单,在服务端接口那里做了策略就行了,看图

论坛徽章:
0
6 [报告]
发表于 2011-10-11 16:07 |只看该作者
回复 5# yanyangtian4502


    ?策略针对什么,是说如果SQL/xml 不同数据库不通用的情况下? 另外这个方案可行吗? 有没有潜在问题

论坛徽章:
0
7 [报告]
发表于 2011-10-11 16:14 |只看该作者
回复 6# sytpb


   这是一个很常用,常见的,很成熟的方式!可以说是千千万万的程序中都用过的

论坛徽章:
0
8 [报告]
发表于 2011-10-11 16:30 |只看该作者
回复 7# yanyangtian4502


    意思我明白,    我查下SQL/xml 是否可跨数据库,这样的话,就不用标识ID 对吧。。

论坛徽章:
0
9 [报告]
发表于 2011-10-11 16:39 |只看该作者
回复 8# sytpb


    不同的数据库,sql xml是不一样的!
我所说的标识不是指的数据库里面的那个标识,我指的是:例如
("select xxx from xxx",sqlserver)
(selcet yyy from yyy ",oracle")
其中sqlserver 和oracle就是标识,告诉服务端那边将用什么的策略(或者称为provider")去执行!

论坛徽章:
0
10 [报告]
发表于 2011-10-11 16:45 |只看该作者
select
        xmlelement(name item,
        xmlattributes(total_bytes as bytes,total_frames as frames),
        xmlforest(channela_util,channelb_util,channelc_util,channeld_util)) from dlc_summary

这样的查询不可以?  我这也没有其他库可试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP