sql数据库

总结-SQL注入

余生颓废 提交于 2020-02-12 20:48:47
SQL 注入 : 输入用户名和密码的时候带有 SQL 语句的关键字 , 会导致 SQL 注入 ; 用户是一个专业程序员 , 输入用户名和密码的时候 , 这些信息中包含了 SQL 语句的关键字 , 并且这些关键字参与了编译过程 , 导致原 SQL 语句含义被扭曲 ; SQL 注入是存在的一种安全隐患 怎么解决 SQL 注入问题 ( 导致 SQL 的根本原因是什么 )? 原因是先进行字符串拼接再进行的编译导 , 正好将用户提供的含有 SQL 语句关键字的字符串编译进去 , 从而导致了 SQL 语句的原意 , 致 SQL 注入 ; 解决办法 : ( 第一版 ) -- 先体统 SQL 语句架构 , 对 SQL 语句框架进行预先编译 , 再给 SQL 语句框架进行赋值 , 这样即使用户提供的信息中含有 SQL 语句的关键字 , 但是这些关键字并不会参与编译 , 不起作用 , 解决 SQL 注入问题 . ( 第二版 ) -- java.sql.PreparedStatement ( 预编译的数据库操作对象 ) PreparedStatement 的父接口 :Statement 执行原理 : 先提供 SQL 语句框架 , 再使用预编译的数据库操作对象进行 SQL 语句的预先编译 , 再给 SQL 语句框架传值 , 传值的时候用户输入的信息中即使有 SQL 语句的关键字也不会参与编译 ,

sql防止注入

做~自己de王妃 提交于 2020-02-12 20:48:27
使用PreparedStatement的参数化的查询可以阻止大部分的SQL注入。在使用参数化查询的情况下,数据库系统不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。因为对于参数化查询来说,查询SQL语句的格式是已经规定好了的,需要查的数据也设置好了,缺的只是具体的那几个数据而已。所以用户能提供的只是数据,而且只能按需提供,无法更进一步做出影响数据库的其他举动来。 来源: https://www.cnblogs.com/shenzhichipingguo/p/10032871.html

java学习与应用(3.6.2)--JDBC

限于喜欢 提交于 2020-02-12 12:41:04
说明 越来越晕了,教程和代码示范来自黑马程序员。用了再看吧。 JDBC JDBC(Java数据库连接的接口)用于统一java代码操作各种数据库。(需要实现类,是数据库厂商提供jar包完成)。 步骤为,导入jar包(可以使用idea的右键添加到库),注册驱动,获取连接对象,定义sql,获取对象,执行语句,处理结果,释放资源。 Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root"); String sql = "update account set balance = 2000 where id = 1";Statement stmt = conn.createStatement(); int count = stmt.executeUpdate(sql);System.out.println(count);stmt.close();conn.close(); DriverManager :驱动管理对象,Connection :数据库连接对象,Statement :执行sql的对象,ResultSet :结果集对象,Preparedstatement :执行sql的对象

SQL回显

烈酒焚心 提交于 2020-02-12 12:01:39
DVWA-SQL注入 DVWA是一个基于PHP和MySQL开发的漏洞测试平台 测试环境 应用程序: phpStudy(apache,php,mysql) 测试程序: firefox, new hacker, burpsuite,sqlmap,中国菜刀 一、 SQL注入 SQL 注入是指攻击者通过注入恶意的 SQL 命令,破坏 SQL 查询语句的结构,从而达到恶意 SQL 语句的目的。 二、 手工注入常规思路 1. 判断是否存在注入,注入是字符型还是数字型 2.猜解SQL查询语句中的字段数 3.确定回显位置 4.获取当前数据库 5.获取数据库中的表 6.获取表中的字段名 7.得到数据 三、DVWA注入分析 先将 DVWA 的级别设置为 LOW 1. 分析源码,可以看到没有对参数做任何的过滤,直接带入数据库进行查询,分析sql查询语句,可能存在字符型sq1注入 2. 判断 sql 是否存在注入,以及注入的类型。 1 ’ and ’ 1 ’ = ’ 1 3. 猜测 SQL 查询语句中的字段数, 1 ’ order by 1# 1 ’ order by 2# 1 ’ order by 3# 从上面两个图可以看出, SQL 语句查询的表字段数是 2 ,确定显示的位置( SQL 语句查询之后的回显位置) 1 ’ union select 1,2# 从下图中可以看到有两个回显 查询当前的数据库

[CentOS7]安装ODBC Driver 17 for SQL Server

孤人 提交于 2020-02-12 11:34:07
Python 通过pyodbc 连接SQL Server 数据库驱动 安装环境 cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) 微软官网 https://docs.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15 #RedHat Enterprise Server 7 curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo  ACCEPT_EULA=Y yum install msodbcsql17 来源: https://www.cnblogs.com/leoshi/p/12297744.html

MyBatis-复习篇

南笙酒味 提交于 2020-02-12 11:31:36
1.Mybatis工作流程 2.封装方法 3.采用映射方法实现接口查询 4.接口配置文件 讲述增删改查(源代码) (1)模糊查询的方法 (2)Mapper生命周期 5.pojo实体类中的字段和数据库中的字段不一样 (1)换一个别名 (2)、使用返回类型 resultMap 6.Mybatis分页查询 (1).通过UserMapper.xml配置来实现 UserMapper.xml配置: 测试类: (2).通过Java代码实现分页 (不建议使用,但是快) (3)分页可以使用其他方法 7.按照查询嵌套处理(多对一复杂查询) (1).通过子查询来完成 (2).按照结果嵌套查询--联表查询 8.类似于联表查询 一对多 联表查询 小结 提取SQL片段: 引用SQL片段: 测试 如下 10.二级缓存 注意:采用了二级缓存会出现序列化的问题 缓存工作流程图 结论 1.Mybatis工作流程 2.封装方法 SqlSessionFactoryUtils 里面的openSession 3.采用映射方法实现接口查询 UserMapper userMapper =session.getMapper(UserMapper.class); List<User> userList =userMapper.getList(); 4.接口配置文件 讲述增删改查(源代码) (1)模糊查询的方法 (2

安装SQL Server 2014

本秂侑毒 提交于 2020-02-12 08:11:22
一:下载SQL SERVER 2014   https://www.microsoft.com/zh-cn/server-cloud/products/sql-server-editions/sql-server-express.aspx 二:安装和配置   安装:参考数据库原理与应用教程 书     http://jingyan.baidu.com/article/3a2f7c2e653d5926afd61197.html     set up 然后下一步(中途有错误,需要修复(我的问题:需要添加visual studio 2010 server pack 1       https://www.microsoft.com/en-us/download/confirmation.aspx?id=20506       http://down.zdnet.com.cn/link/43/424986.shtml))   配置:参考数据库原理与应用教程 书           来源: https://www.cnblogs.com/justmaomao/p/5232672.html

mybatis中#{}和${}的区别

耗尽温柔 提交于 2020-02-12 06:44:58
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击

分库分表利器——sharding-sphere

我与影子孤独终老i 提交于 2020-02-12 06:24:06
背景 得不到的东西让你彻夜难眠,没有尝试过的技术让我跃跃欲试。 本着杀鸡焉用牛刀的准则,我们倡导够用就行,不跟风,不盲从。 所以,结果就是我们一直没有真正使用分库分表。曾经好几次,感觉没有分库分表(起码要分表),项目就做不下去了,但是由于跨部门、工具约束、项目被砍等各种原因最终都偃旗息鼓,乖乖的搞单表加索引去了。 应该是没有及时同步公司内部知识库的原因,过去的几次分库分表的尝试也是让人哭笑不得。公司内部流传着一件上古神器,可以解决分表问题。 既然是上古神器,那么使用的流程肯定也是非常原始。没错,因为是基于windows系统写的一个桌面程序,所以必须到windows平台安装执行,而公司绝大多数已经不用windows系统了。针对这个问题,有两个解决方式,一种是找台式机,一种是安装虚拟机。 我选择了后者,毕竟自己安装,独立自主,可以随心所欲的操作。好了,环境算是有了,这时候肯定要有个教程,毕竟口口相传这种模式会随着时间的推移慢慢变得不好使了,尤其是使用场景不多的情况下。 打开教程的那一刻,仿佛拿到的是易筋经这样的武功秘籍,里面只有几张内功心法似的截图,要想参透,全靠自己领悟。 睁大眼睛,在放大缩小拖拽各种操作中,领会截图的真正含义,生怕出现像漏看“欲练此功,必先自宫”的下半句“如不自宫,也能成功”带来的惨痛教训经历。 每一步都很小心,然后点击相应的神奇按钮。一通操作,Duang

[SQL SERVER] 跨服务器查询

半世苍凉 提交于 2020-02-12 05:36:57
来自: http://www.cnblogs.com/daniel206/archive/2008/01/16/1041748.html 方法一: 用OPENDATASOURCE 下面是个跨SQLServer查询的示例 Select TableA.*,TableB.* From OPENDATASOURCE( 'SQLOLEDB', 'Data Source=ServerA;User ID=UserID;Password=Password' ).databaseAName.dbo.TableA Left Join OPENDATASOURCE( 'SQLOLEDB', 'Data Source=ServerB;User ID=UserID;Password=Password' ).databaseBName.dbo.TableB On TableA.key=TableB.key 下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')..