sql复杂报表
1. 现有MYsql数据库,如果要制作复杂的EXCEL报表改怎么办
如果你会制作复杂的EXCEL报表,那剩下的问题就是怎样把MYSQL数据库的数据导到EXCEL里了,这一般需要编写一个程序将把MYSQL数据库的数据导到EXCEL里(要是这个程序不会写那就上网搜搜看能不能搜到,或者再发一个问题问,或者请会的人写)。
如果你把MYSQL数据库的数据导到EXCEL里之后还是不会制作复杂的EXCEL报表,那你就要好好学学EXCEL报表的制作了。
2. sql server2008 如何做报表
简单的报表gridview就行了,复杂的可以用Reporting
Service,
图表比较多的可以用Microsoft
Chart
Controls
,也可以用开源的如zedgraph,但是相对MS的就差一些了。
3. 如何解决报表的 SQL 植入风险
SQL 注入或者 SQL 植入是 WEB 应用程序与数据库交互过程中,由于对用户输入数据的合法性、规范性检测做的不严而导致的一种常见的漏洞,这种漏洞如果被攻击者加以利用,在查询语句的结尾添加非法的 SQL 语句,就能进行非法的查询,会导致数据泄露,风险很大
报表应用作为一个 WEB 应用,同样会面临这样的风险
为了解决普通参数查询不灵活,不自由的问题,很多报表工具开放了动态拼 SQL 的功能,允许 SQL 中进行子句替换,类似这样:
SELECT … FROM T WHERE ${w}
w 就是可以根据用户需求随意拼的,比如 data>… AND date<=… AND area=…
这样查询就灵活多了,但是风险也就来了,这个 w 就会有 SQL 注入的隐患,比如:
SELECT … FROM T WHERE 1=0 UNION SELECT … FROM user
这是一句可执行的合法 SQL,但 user 表中的信息就被泄露了
怎么样解决这个问题呢?
1 尽量使用普通的 SQL 参数,不要动态拼 SQL
这样做,虽然灵活度差一点,但安全
有些报表工具不支持普通 SQL 参数,只提供拼 SQL 的方案,方便是方便了,但就要小心了
2 需要通用查询时,写复杂一点的 SQL
比如:
SELECT … FROM T WHERE (${w})
SELECT … FROM T WHERE (${w}) OR ${w}
这样做有一定的效果,但是并不完美,有些时候也防不住,而且 SQL 复杂后,会影响执行效率
3 再检查关键字
通常通用查询的条件不会有这些 select,from 等关键字,所以可以通过过滤这些关键字来防范风险,不让参数中有这些关键字的 SQL 执行,虽然这样做有时候会失去一些灵活性,但是安全性却更高了
润乾报表把这些都做好了,直接用就可以了
我们就以润乾报表为例,来简单看一下实现步骤
部署润乾报表后,在应用目录下找到 **raqsoftConfig.xml ** 文件,配置敏感词列表
属性名:disallowedParamWordList,value 为禁用敏感词列表,多个之间用逗号分隔,英文字母不区分大小写
配置列表以后,如果访问的 URL 中再出现敏感词,就会提示出错了,减少风险的发生
http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=a.rpx&arg2= 华北 union select * from users
是的就这么简单,在一个已经提供了防止 SQL 注入的工具中,就是这么轻松一步设置就可以规避风险了,所以选型的时候,多问问,看看各厂商是否能解决这问题,怎么解决的,否则就得自己去费劲去修补这个漏洞了
更详细的操作以及其他解决方式请参考: 报表的 SQL 植入风险及规避方法 - 乾学院
4. 用SQL查询报表
#我看了你的描述,也没给出表与表之间的关系和字段,以我的理解后,写出以下sql语句,经过测试,可以执行成功
#FeeTable:生活费表包含(学生信息表)也就是外键
#Student:学生信息表包含(班级信息表)也就是外键
#Greade:班级信息表
select
s.nameas学生名称,
g.nameas班级名称,
s.genderas学生性别,
s.teacheras招生老师,
f.liveFeeDateas生活费日期,
f.liveFeeas生活费,
f.sleepFeeDateas住宿费日期,
f.sleepFeeas住宿费,
fareFeeDateas校车费日期,
fareFeeas校车费,
(f.liveFee+f.sleepFee+fareFee)as费用合计
.id=f.studentinnerjoinGreadegons.greade=g.id
groupbys.name,g.name,s.gender,s.teacher,f.liveFeeDate,f.liveFee,f.sleepFeeDate,f.sleepFee,fareFeeDate,fareFee
以上SQL语句要结合你的表结构来适当调整表名、字段、和关联。
希望能帮到你!