java安全性和数据库设计注意事项

来源:互联网 发布:qq飞车数据库 编辑:程序博客网 时间:2024/06/14 03:33
先说说数据库设计的注意事项,最近一个项目中,数据库表结构的设计都是由我来设计,在设计的过程中,并没有考虑到性能的因素,所以在规定字段类型的时候,为了省事把许多字段一律设置成varchar类型,varchar类型即为字符串类型,因为varchar类型确实很强大,什么东西都可以存,如果不考虑性能的话,这一个类型基本就可以满足日常的需求了,但是如果考虑到性能,那肯定不能全部用varchar!

那么就要提到数据类型了,在java中有以下几种基本类型:
   
    float 4 字节 32位IEEE 754单精度
    double 8 字节 64位IEEE 754双精度
    byte 1字节 -128到127
    short 2 字节 -32,768到32,767
    int 4 字节 -2,147,483,648到2,147,483,647
    long 8 字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
    char 2 字节
    boolean 1 字节 True或者false

String 不属于基本类型,这是以前考试会经常考的!
这些都只是基础知识,似乎在开发中无关紧要,毫无意义! 错了, 看到后面的字节数了吗? 意义来了, 当我们把数据存在数据库中的时候,这些字节数就显得非常重要,因为要影响到性能了,我们来看看用varchar存放的时候是什么情况:
java代码:
        String chinese1 = "你好";
        String chinese2 = "草你麻痹";
        String chinese3 = "12233444";
        String chinese4 = "fuck you man";
        System.out.println("chinese1占的字节"+chinese1.getBytes().length);
        System.out.println("chinese2占的字节"+chinese2.getBytes().length);
        System.out.println("chinese3占的字节"+chinese3.getBytes().length);
        System.out.println("chinese4占的字节"+chinese4.getBytes().length);
控制台输出:
chinese1占的字节6
chinese2占的字节12
chinese3占的字节8
chinese4占的字节12
存在数据库中的时候字符串所占的字节数是根据实际内容的长度来确定的,也就是说,如果你存放的是数字,12233444如果用int型存放的话只需要4个字节,用字符串存放需要的就是8个字节,长度越长字节越高! 如果数据库存的数据量不大,那当然没有区别,如果存放的数据量巨大的话,性能的差异就会体现出来了!

所以说,刚刚毕业的时候一直搞不清楚为什么老是问这些简单的问题,原来还是有用的啊! 所以,数据库设计的时候不要把类型都定义成varchar ,时间类型如20160626,这种的也可以用int来存放,这样就又节省了一些空间了! 数据类型设计注意要设计的合适这个字段才是最恰当的!

接下来说说java数据传输的安全性:
程序分成前台和后台,前台调用后台的时候,通过http请求到后台的servlet中,携带一些参数,然后后台通过解析这些参数去操作数据库。 所以这些参数中很可能带有数据库中非常重要的字段,例如主键id,或者你的账号名称,密码之类的。现在坏人很多,而且坏人也很厉害,他们能截取你的通信数据,如果获得到这些重要的字段他们也许可以做一些坏事,去破坏你的数据库! 所以前台和后台之间的数据交互安全性很重要, 所以很多接口的使用都使用到了token, token是一串毫无意义的字符串,被坏人知道了,他也很无奈,没有用! 但是这个token却是后台和前台通信的密码。

原理是这样的, 后台把ID存在内存中,java中其实就是 定义一个static类型的 Map , key 就是token,value就是数据中的id字段,或者别的不愿意透露给前台的字段,tocken是随机字符串!把token告诉前台,以后前台要取数据,直接把token传回来,然后去用token取出这个存放的ID,token一般是在登录后返回的,如果token不正确,那就要让它重新登录了!这样就可以防止数据泄露! 这种方法比直接传ID要安全的多!

0 0
原创粉丝点击