10-09 41—45
______egon新书python全套来袭请看:https://egonlin.com/book.html
41.考虑如下表结构,写出建表语句
ID(自增主键) NAME(非空) Balance(非空)
1 A 19.50
2 A 20.50
3 A 100.00
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`Balance` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;
42.假设学生Students和教师Teachers关系模型如下所示
1.Student:(学号,姓名,性别,类别,身份证号)
2.Teacher:(教师号,姓名,性别,身份证号,工资)
其中,学生关系中的类别分别为"本科生"和"研究生两类", 性别分为"男"和"女" 两类.
查询研究生教师平均工资(显示为平均工资), 最高工资与最低工资之间的差值
(显示为差值)的 SQL 语句
select (1) as 平均工资, (2) as 差值 from Students,Teacher where (3);
查询工资少于 10000 元的女研究生教师的身份证号和姓名的 SQL 语句(非嵌套查 询方式);
select 身份证号,姓名 from Students where (4) (5)
select 身份证号,姓名 from Teachers where (6)
43.mysql 中怎么创建索引?
建表时创建
CREATE TABLE 表名(
字段名 数据类型 [完整性约束条件],
……,
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[索引名](字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]
);
说明:
UNIQUE:可选。表示索引为唯一性索引。
FULLTEXT:可选。表示索引为全文索引。
SPATIAL:可选。表示索引为空间索引。
INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是 一样的。
索引名:可选。给创建的索引取一个新名称。
字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
长度:可选。指索引的长度,必须是字符串类型才可以使用。
ASC:可选。表示升序排列。
DESC:可选。表示降序排列。
注:索引方法默认使用BTREE。
44.请简述sql注入的攻击原理及如何在代码层面防止sql注入?
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1] 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:
①不当的类型处理;
②不安全的数据库配置;
③不合理的查询集处理;
④不当的错误处理;
⑤转义字符处理不合适;
⑥多个提交处理不当。
预防措施:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等
45.使用Python实现将数据库的student表中取的数据写入db.txt?
import pymysql
host = '127.0.0.1'
user = 'root'
passwd = '123456'
port = '3306'
db = 'test'
# 链接数据库
conn = pymysql.connect(host=host,
port=port,
user=user,
passwd=passwd,
db=db,
charset='utf8', )
cur = conn.cursor()
cur.execute("SELECT * FROM student;")
data = cur.fetchall()
with open('db.txt', 'w') as f:
for i in data:
f.write(str(i) + '\n')