关于AR安全性的三个问题
尊敬的管理员,您好!现咨询关于AR安全性的三个问题,还请不厌其烦、详细解答,万分感谢!
问题一:
如果是winform项目,如何保证报表文件的安全性?如果直接将编译好的项目分发给别人,报表文件也定会一同分发,那别人只要用AR报表编辑器即可打开,亦能看到报表文件中的数据库连接字符串等信息,而且报表文件别人也能轻而易举的复制、编辑!
问题二:
接上面那个问题,如果报表文件采取的是共享数据源,别人依然能轻易查看数据库连接信息,这是何等的危害?
问题三:
报表文件的数据源能否设置为读取app.config中的数据库连接字符串?这样是不是稍微安全点?或者说,有更好的解决安全性问题的办法?
wu8829 发表于 2022-12-9 16:43
谢谢,麻烦给出实现代码,我是小白兔
可以试一下这个:
public object GetReport(string reportName)
{
try
{
String URL = "http://192.168.222.1:8080/"+ reportName;
String Info;
HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(URL);
wbRequest.Proxy = null;
wbRequest.Method = "GET";
wbRequest.ContentType = "application/xml; charset=UTF-8";
MemoryStream ms_pub = new MemoryStream();
HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse();
using (Stream responseStream = wbResponse.GetResponseStream())
{
using (StreamReader sReader = new StreamReader(responseStream, Encoding.UTF8))
{
byte[] byte_pub = System.Text.Encoding.UTF8.GetBytes(sReader.ReadToEnd());
ms_pub.Write(byte_pub, 0, byte_pub.Length);
ms_pub.Seek(0, SeekOrigin.Begin);
}
}
using (TextReader StreamTxtRead = new StreamReader(ms_pub))
{
PageReport ViewPgReport = new PageReport(StreamTxtRead);
return ViewPgReport.Report;
}
}
catch (Exception e)
{
throw e;
}
return 0;
}在结合温大佬的,URL从数据库获取即可。
我这个是web端的,所以最后是return的ViewPgReport.Report;
咱们的直接reportLoad即可。结合一下这个和温大佬的
【 】报表文件保存到数据库与读取事例 - ActiveReports专区 - 求助中心 - 葡萄城产品技术社区https://gcdn.grapecity.com.cn/showtopic-158562-1-1.html 可以采用报表文件内不保存真实的数据库连接字符串;等程序运行时传入
PageReport.Report.DataSources.ConnectionProperties.ConnectString = ExpressionInfo.FromString(""); 可以加我QQ546962925 wengMQ 发表于 2022-11-29 09:21
可以采用报表文件内不保存真实的数据库连接字符串;等程序运行时传入
PageReport.Report.DataSources.C ...
感谢老铁帮忙回复,也可以参考这个教程哦~
Web端报表设计器如何绑定动态数据源
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=55960&fromuid=65049
(出处: 葡萄城产品技术社区)
除了动态绑定数据源,也还有报表文件本身安全性的问题,请问如何解决呢? winform项目,将报表文件分发到各客户机后,客户机可以用记事本直接打开报表文件,更改里面的文字再打印,这是完全不符合安全性的。 wu8829 发表于 2022-12-3 19:38
除了动态绑定数据源,也还有报表文件本身安全性的问题,请问如何解决呢? winform项目,将报表文件分发到各 ...
关于客户修改报表文件,他修改的只是报表设计,并没有牵扯任何数据。如果只是设计的话,应该不牵扯重要信息吧。
如果您还是不允许这样的话,只能说设计一个web端的,然后将这一切放在服务端,并且限制保存和另存为按钮,然后将所有报表文件都放在服务端。客户只能通过打开您发布的网站去访问和打开报表,那这样就没法是winform的 Felix.Li 发表于 2022-12-5 13:54
关于客户修改报表文件,他修改的只是报表设计,并没有牵扯任何数据。如果只是设计的话,应该不牵扯重要信 ...
当然有敏感信息呀,例如,如果报表是一个合同文件,可以随意用记事本打开,随意修改合同中的收款账号。
您这个方法是一个取舍的方法,要么用web,要么就无法解决了吗? 没有其他方法了吗?例如:尽管是winform,那是否能将报表文件放到远程服务器的IIS中去远程读取呢?又或者:先加密报表文件,然后解密读取报表文件呢? 本帖最后由 James.Lv 于 2022-12-5 17:12 编辑
wu8829 发表于 2022-12-5 14:10
当然有敏感信息呀,例如,如果报表是一个合同文件,可以随意用记事本打开,随意修改合同中的收款账号。
...
您好,
首先,报表文件本身是一个xml格式的文件,报表文件内容中只存放了报表的模板设计以及数据集字段绑定规则,并不会存放数据,报表只是在每次查看渲染的时候才会去数据源加载数据进行展示, 所以如果您的收款账号是从数据集字段来的,那么就算有用户编辑报表模板文件,也不会有任何影响;
第二个,AR也支持从数据库或者其它地方读取报表模板,进行渲染,可以不用放在客户端的,如果您需要这样设计的话,那必须得保证所有客户端都能访问到这个报表模板资源;如果可以访问到那就可以咱们自己实现了,比如放在服务器上,每次调用接口获取报表模板,上面说到了报表模板是个xml文件,您就可以先提前调用接口获取到报表模板得文件xml内容,然后再去open(报表);至于这个过程中是否需要加密解密,咱们完全可以自己实现这部分的逻辑;
James.Lv 发表于 2022-12-5 17:10
您好,
首先,报表文件本身是一个xml格式的文件,报表文件内容中只存放了报表的模板设计以及数据集字段 ...
不怕您见笑,我也知道open,但是不知道从数据库读取后,怎么open啊;能否给两个例子代码:1个是如何从数据库读取xml然后用ar来open;1个是如何从IIS读取rdlx文件,来open。
期待您的回复! 我也知道open,但是不知道从数据库读取后,怎么open啊;能否给两个例子代码:1个是如何从数据库读取xml然后用ar来open;1个是如何从IIS读取rdlx文件,来open。