SQL参数如何设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL参数如何设置相关的知识,希望对你有一定的参考价值。
我做电大函授在线作业,必须要安装用友10.1和SQL数据库,我都装好了,可登陆的时候让我输入Sql Server参数设置,服务器名称或IP,用户名直接给的是Sa,还要密码,这是啥意思呀,求电脑达人们帮帮忙 ,作业马上就要交了
如何设置?有没有通用的密码?
你可以用企业管理器看到你LOCAL你的sql服务,点右键属性在在安全性里看看是否选择了sqlserver 和windows这个选选项,如果没有选修改成这个,然后他会重新启动一下服务,然后再有企业管理器进到你的数据库里,找到数据库下面有个安全性,里面有个登陆,里面有sa用户,你右键属性进可以进去修改密码了 参考技术A sql语句有的字段需要预定义,而这些字段类型有多种,如:
sql="select * from t_corp t where t.corpid=? and t.corpname=? " ,
字段统一的进行管理,客户不需考虑设置的字段是什么类型,只需要添加字段的值就可以。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/***
* 注意从数据库取日期,比如:数据库字段中有stamp=2010-02-08 09:31:53
* rs.getTime("stamp")只能得到09:31:53,rs.getDate("stamp")只能得到2010-02-08
* rs.getTimestamp("stamp"),得到2010-02-08 09:31:53.0,
* 只能通过函数rs.getTimestamp("stamp").toString().substring(0, rs.getTimestamp("stamp").toString().length()-2)
* 得到2010-02-08 09:31:53
* @author Administrator
*
*/
public class DBParamTest
public static void main(String[] args)
StringBuilder sql=new StringBuilder();
sql.append( "select * from t_corp t where t.corpid=? and t.corpname=? ")
.append("and t.stamp between to_date(?,'yyyy-mm-dd HH24:mi:ss') and to_date(?,'yyyy-mm-dd HH24:mi:ss')");
Connection con = null;
try
con = DBTest.getCon();//连接数据库
catch (SQLException e)
e.printStackTrace();
return;
//为sql语句设置参数
DBParams params = new DBParams();
params.addParam(1314);
params.addParam("惠山分局钱桥派出所");
params.addParam("2010-01-01 00:00:00");
params.addParam("2010-04-03 03:00:00");
PreparedStatement pst = null;
ResultSet rs = null;
try
pst = con.prepareStatement(sql.toString());
params.prepareStatement(pst);
rs = pst.executeQuery();
if(rs.next())
System.out.println("remark:" + rs.getString("corpname"));
System.out.println("stamp:"+rs.getTimestamp("stamp").toString().substring(0, rs.getTimestamp("stamp").toString().length()-2));
catch (SQLException e)
e.printStackTrace();
finally
DBUtil.closeRs(rs);
DBUtil.closePst(pst);
DBUtil.closeCon(con);
参考技术B 密码应该是系统默认的哪个样的,你试下看看输入 sa 或admin 或 administrator这些等等的。。 参考技术C 密码就是你装sql时设置的密码呀!
这个参数化查询如何防止 SQL 注入?
【中文标题】这个参数化查询如何防止 SQL 注入?【英文标题】:How can this Parametrized Query Prevent SQL Injection? 【发布时间】:2020-05-01 11:21:29 【问题描述】:我知道参数化查询用于防止 SQL 注入,但这如何防止 SQL 注入?有人不能将他们的 id 设置为等于; DROP TABLE * --
并将其插入到参数化查询中吗?
let updateQueryData = `UPDATE table SET lookups = $1 WHERE id = $2`;
let updateQueryValues = [numLookups, data.rows[0].id];
pool.query(updateQueryData, updateQueryValues, err =>
【问题讨论】:
WHERE id = DROP TABLE *
会因语法错误而失败。尝试在查询中运行它。
当您使用参数化查询时,查询引擎不仅会解析您的参数并将它们放入查询字符串中。它被直接注入查询引擎。因此,它对输入进行了验证,以防止查询注入。
它们的关键区别在于参数指示数据库查询引擎这些是 值 并且应该被这样对待,而直接字符串连接不会将此类信息传递给查询引擎并且它只是执行你给它的任何 code。在前者中,占位符和值是分开的,直到它们到达数据库并允许数据库正确处理它们,它知道该怎么做。用户当然可以提供看起来像代码的值,但它只是一个字符串值,仅此而已。
这能回答你的问题吗? How can prepared statements protect from SQL injection attacks?
【参考方案1】:
UPDATE 表 SET 查找 = $1 WHERE id = $2
您的查询已参数化。
如果有人传递像'; DROP TABLE * --'
这样的恶意值会发生什么:
UPDATE table SET lookups = '; DROP TABLE * --' WHERE id = 1
如果列是数字,您将收到运行时错误,因为'; DROP TABLE * --'
不是数字
【讨论】:
【参考方案2】:没有。数据不是简单地插入到查询的文本表示中。它是单独发送的。
为了防止注入,数据必须与命令分开,这样数据和命令之间就没有歧义。这正是参数化查询的作用。
(注意:有些库仍然会发送包含一体式数据的查询,但所有数据都会自动“转义”,因此仍然可以安全使用。)
另外,我强烈建议您删除这些反引号并用常规引号替换,这样您以后就不会意外地将数据连接到该查询中。
【讨论】:
以上是关于SQL参数如何设置的主要内容,如果未能解决你的问题,请参考以下文章