10-09 41—45


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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM