版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、作為一個(gè) MySQL 的系統(tǒng)管理員,你有責(zé)任維護(hù)你的 MySQL 數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)安全性和完 整性。 本文主要主要介紹如何建立一個(gè)安全的MySQL 系統(tǒng),從系統(tǒng)內(nèi)部和外部網(wǎng)絡(luò)兩個(gè)角度,為你提供一個(gè)指南。本文主要考慮下列安全性有關(guān)的問(wèn)題: 為什么安全性很重要,你應(yīng)該防范那些攻擊? 服務(wù)器面臨的風(fēng)險(xiǎn)(內(nèi)部安全性) ,如何處理? 連接服務(wù)器的客戶端風(fēng)險(xiǎn)(外部安全性) ,如何處理?MySQL 管理員有責(zé)任保證數(shù)據(jù)庫(kù)內(nèi)容的安全性,使得這些數(shù)據(jù)記錄只能被那些正確授權(quán)的 用戶訪問(wèn),這涉及到數(shù)據(jù)庫(kù)系統(tǒng)的內(nèi)部安全性和外部安全性。內(nèi)部安全性關(guān)心的是文件系統(tǒng)級(jí)的問(wèn)題,即,防止 務(wù)器主機(jī)有賬號(hào)的人 (合法或竊取的)進(jìn)
2、行攻擊。 每個(gè)人均能簡(jiǎn)單地替代對(duì)應(yīng)于那些數(shù)據(jù)庫(kù)表的文件, 表設(shè)置正確,對(duì)此毫無(wú)意義。MySQL 數(shù)據(jù)目錄( DATADIR )被在服如果數(shù)據(jù)目錄內(nèi)容的權(quán)限過(guò)分授予, 使得那么確??刂瓶蛻敉ㄟ^(guò)網(wǎng)絡(luò)訪問(wèn)的授權(quán)外部安全性關(guān)心的是從外部通過(guò)網(wǎng)絡(luò)連接服務(wù)器的客戶的問(wèn)題,即,保護(hù) MySQL 服務(wù)器免 受來(lái)自通過(guò)網(wǎng)絡(luò)對(duì)服務(wù)器的連接的攻擊。你必須設(shè)置 MySQL 授權(quán)表( grant table ),使得他 們不允許訪問(wèn)服務(wù)器管理的數(shù)據(jù)庫(kù)內(nèi)容,除非提供有效的用戶名和口令。下面就詳細(xì)介紹如何設(shè)置文件系統(tǒng)和授權(quán)表mysql ,實(shí)現(xiàn) MySQL 的兩級(jí)安全性。一、內(nèi)部安全性 -保證數(shù)據(jù)目錄訪問(wèn)的安全MySQL 服
3、務(wù)器通過(guò)在 MySQL 數(shù)據(jù)庫(kù)中的授權(quán)表提供了一個(gè)靈活的權(quán)限系統(tǒng)。你可以設(shè)置 這些表的內(nèi)容, 允許或拒絕客戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn), 這提供了你防止未授權(quán)的網(wǎng)絡(luò)訪問(wèn)對(duì)你數(shù) 據(jù)庫(kù)攻擊的安全手段, 然而如果主機(jī)上其他用戶能直接訪問(wèn)數(shù)據(jù)目錄內(nèi)容, 建立對(duì)通過(guò)網(wǎng)絡(luò) 訪問(wèn)數(shù)據(jù)庫(kù)的良好安全性對(duì)你毫無(wú)幫助, 除非你知道你是登錄 MySQL 服務(wù)器運(yùn)行主機(jī)的唯 一用戶,否則你需要關(guān)心在這臺(tái)機(jī)器上的其他用戶獲得對(duì)數(shù)據(jù)目錄的訪問(wèn)的可能性。以下是你應(yīng)該保護(hù)的內(nèi)容:數(shù)據(jù)庫(kù)文件。 很明顯, 你要維護(hù)服務(wù)器管理的數(shù)據(jù)庫(kù)的私用性。 數(shù)據(jù)庫(kù)擁有者通常并且應(yīng)該 考慮數(shù)據(jù)庫(kù)內(nèi)容的安全性, 即使他們不想, 也應(yīng)該考慮時(shí)數(shù)據(jù)庫(kù)內(nèi)容公開(kāi)化,
4、而不是通過(guò)糟 糕的數(shù)據(jù)目錄的安全性來(lái)暴露這些內(nèi)容。日志文件。 一般和更新日志必須保證安全, 因?yàn)樗麄儼樵兾谋尽?對(duì)日志文件有訪問(wèn)權(quán)限 的任何人可以監(jiān)視數(shù)據(jù)庫(kù)進(jìn)行過(guò)的操作。更要重點(diǎn)考慮的日志文件安全性是諸如GRANT 和 SET PASSWORD 等的查詢也被記載了,一般和更新日志包含有敏感查詢的文本,包括口令( MySQL 使用口令加密,但它在已經(jīng)完 成設(shè)置后才運(yùn) 用于 以后的 連接建立。 設(shè)置一個(gè)口 令 的過(guò)程設(shè) 計(jì)象 GRANT 或 SET PASSWORD 等查詢,并且這些查詢以普通文本形式記載在日志文件中) 。如果一個(gè)攻擊者 猶如日文件的讀權(quán)限,只需在日志文件上運(yùn)行 grep 尋找
5、諸如 GRANT 和 PASSWORD 等詞 來(lái)發(fā)現(xiàn)敏感信息。顯然,你不想讓服務(wù)器主機(jī)上的其他用戶有數(shù)據(jù)庫(kù)目錄文件的寫權(quán)限, 因?yàn)樗麄兛梢灾貙懩?的狀態(tài)文件或數(shù)據(jù)庫(kù)表文件, 但是讀權(quán)限也很危險(xiǎn)。 如果一個(gè)數(shù)據(jù)庫(kù)表文件能被讀取, 偷取 文件并得到 MySQL 本身,以普通文本顯示表的內(nèi)容也很麻煩, 為什么?因?yàn)槟阋鱿铝惺?情:在服務(wù)器主機(jī)上安裝你自己 “特制 ”的 MySQL 服務(wù)器,但是有一個(gè)不同于官方服務(wù)器版本的 端口、套接字和數(shù)據(jù)目錄。運(yùn)行 mysql_install_db 初始化你的數(shù)據(jù)目錄, 這賦予你作為 MySQL root 用戶訪問(wèn)你的服務(wù)器 的權(quán)限,所以你有對(duì)服務(wù)器訪問(wèn)機(jī)制的完
6、全控制,它也建立一個(gè) test 數(shù)據(jù)庫(kù)。 將對(duì)應(yīng)于你想偷取得表文件拷貝到你服務(wù)器的數(shù)據(jù)庫(kù)目錄下的 test 目錄。 啟動(dòng)你的服務(wù)器。 你可以隨意訪問(wèn)數(shù)據(jù)庫(kù)表, SHOW TABLES FROM test 顯示你有一個(gè)偷來(lái) 的表的拷貝, SELECT * 顯示它們?nèi)魏我粋€(gè)的全部?jī)?nèi)容。如果你確實(shí)很惡毒, 將權(quán)限公開(kāi)給你服務(wù)器的任何匿名用戶, 這樣任何人能從任何地方連接 服務(wù)器訪問(wèn)你的 test 數(shù)據(jù)庫(kù)。你現(xiàn)在將偷來(lái)的數(shù)據(jù)庫(kù)表公布于眾了。在考慮一下, 從相反的角度, 你想讓別人對(duì)你這樣嗎?當(dāng)然不! 你可以通過(guò)在數(shù)據(jù)庫(kù)錄下執(zhí) 行 ls -l 命令確定你的數(shù)據(jù)庫(kù)是否包含不安全的文件和目錄。查找有 “組”
7、和 “其他用戶 ”權(quán)限設(shè)置的文件和目錄。下面是一個(gè)不安全數(shù)據(jù)目錄的一部分列出:% ls -ltotal 10148drwxrwxr-x 11 mysqladm wheel 1024 May 8 12:20 . drwxr-xr-x 22 root wheel 512 May 8 13:31 .drwx 2 mysqladm mysqlgrp 512 Apr 16 15:57 menageriedrwxrwxr-x 2 mysqladm wheel 512 Jan 25 20:40 mysql drwxrwxr-x 7 mysqladm wheel 512 Aug 31 1998 sql-ben
8、ch drwxrwxr-x 2 mysqladm wheel 1536 May 6 06:11 testdrwx 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp正如你看到的, 有些數(shù)據(jù)庫(kù)有正確的權(quán)限, 而其他不是。 本例的情形是經(jīng)過(guò)一段時(shí)間后的結(jié) 果。較少限制的權(quán)限由在權(quán)限設(shè)置方面比更新版本更不嚴(yán)格的較早版本服務(wù)器設(shè)置的 (注意 更具限制的目錄 menageria和tmp都有較近日期)。MySQL當(dāng)前版本確保這些文件只能由運(yùn) 行服務(wù)器的用戶讀取。讓我們來(lái)修正這些權(quán)限,使得只用服務(wù)器用戶可訪問(wèn)它們。你的主要保護(hù)工具來(lái)自于由UNIX 文件系統(tǒng)本身提供的設(shè)置文件和目
9、錄屬主和模式的工具。下面是我們要做的: 進(jìn)入該目錄% cd DATADIR設(shè)置所有在數(shù)據(jù)目錄下的文件屬主為由用于運(yùn)行服務(wù)器的賬號(hào)擁有(你必須以root 執(zhí)行這步)。在本文使用之一改變屬主:mysqladm 和 mysqlgrp 作為該賬號(hào)的用戶名和組名。你可以使用下列命令# chown mysqladm.mysqlgrp .# find . -follow -type d -print | xargs chown mysqladm.mysqlgrp設(shè)置你的數(shù)據(jù)目錄和數(shù)據(jù)庫(kù)目錄的模式使得他們只能由 mysqladm 讀取,這阻止其他用戶訪 問(wèn)你數(shù)據(jù)庫(kù)目錄的內(nèi)容。你可以用下列命令之一以 root
10、或 mysqladm 身份運(yùn)行。% chmod -R go-rwx .% find . -follow -type d -print | xargs chmod go-rwx數(shù)據(jù)目錄內(nèi)容的屬主和模式為 mysqladm 設(shè)置?,F(xiàn)在你應(yīng)該保證你總是以 mysqladm 用戶運(yùn) 行服務(wù)器,因?yàn)楝F(xiàn)在這是唯一由訪問(wèn)數(shù)據(jù)庫(kù)目錄權(quán)限的用戶(除root)。在完成這些設(shè)置后,你最終應(yīng)該得到下面的數(shù)據(jù)目錄權(quán)限:% ls -ltotal 10148 drwxrwx- 11 mysqladm mysqlgrp 1024 May 8 12:20 . drwxr-xr-x 22 root wheel 512 May 8
11、 13:31 .drwx 2 mysqladm mysqlgrp 512 Apr 16 15:57 menageriedrwx 2 mysqladm mysqlgrp 512 Jan 25 20:40 mysqldrwx 7 mysqladm mysqlgrp 512 Aug 31 1998 sql-benchdrwx 2 mysqladm mysqlgrp 1536 May 6 06:11 testdrwx 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp二、外部安全性 -保證網(wǎng)絡(luò)訪問(wèn)的安全MySQL 的安全系統(tǒng)是很靈活的,它允許你以多種不同方式設(shè)置用戶權(quán)限。
12、一般地,你可使 用標(biāo)準(zhǔn)的 SQL 語(yǔ)句 GRANT 和 REVOKE 語(yǔ)句做, 他們?yōu)槟阈薷目刂瓶蛻粼L問(wèn)的授權(quán)表, 然 而,你可能由一個(gè)不支持這些語(yǔ)句的老版本的MySQL (在3.22.11之前這些語(yǔ)句不起作用),或者你發(fā)覺(jué)用戶權(quán)限看起來(lái)不是以你想要的方式工作。對(duì)于這種情況,了解 MySQL 授權(quán)表的結(jié)構(gòu)和服務(wù)器如何利用它們決定訪問(wèn)權(quán)限是有幫助的, 這樣的了解允許你通過(guò)直接修改授 權(quán)表增加、刪除或修改用戶權(quán)限,它也允許你在檢查這些表時(shí)診斷權(quán)限問(wèn)題。關(guān)于如何管理用戶賬號(hào),見(jiàn) MySQL 的用戶管理 。而對(duì) GRANT 和 REVOKE 語(yǔ)句詳細(xì)描 述,見(jiàn) MySQL 參考手冊(cè)。2.1 MySQL
13、 授權(quán)表的結(jié)構(gòu)和內(nèi)容通過(guò)網(wǎng)絡(luò)連接服務(wù)器的客戶對(duì) MySQL 數(shù)據(jù)庫(kù)的訪問(wèn)由授權(quán)表內(nèi)容來(lái)控制。這些表位于 mysql 數(shù)據(jù)庫(kù)中,并在第一次安裝 MySQL 的過(guò)程中初始化(運(yùn)行 mysql_install_db 腳本)。 授權(quán)表共有 5 個(gè)表: user、db、host、tables_priv 和 columns_priv 。表 1 user、 db 和 host 授權(quán)表結(jié)構(gòu)訪問(wèn)范圍列user db hostHost Host HostUser Db DbPassword User數(shù)據(jù)庫(kù) /表權(quán)限列Alter_priv Alter_priv Alter_privCreate_priv Creat
14、e_priv Create_privDelete_priv Delete_priv Delete_privDrop_priv Drop_priv Drop_privIndex_priv Index_priv Index_privInsert_priv Insert_priv Insert_privReferences_priv References_priv References_privSelect_priv Select_priv Select_privUpdate_priv Update_priv Update_privFile_priv Grant_priv Grant_privGra
15、nt_privProcess_privReload_privShutdown_priv表 2 tables_priv 和 columns_priv 屬權(quán)表結(jié)構(gòu)訪問(wèn)范圍列tables_priv columns_privHost HostDb DbUser UserTable_name Table_nameColumn_name權(quán)限列Table_priv Column_priv授權(quán)表的內(nèi)容有如下用途:user 表user 表列出可以連接服務(wù)器的用戶及其口令, 并且它指定他們有哪種全局 (超級(jí)用戶) 權(quán)限。 在 user 表啟用的任何權(quán)限均是全局權(quán)限, 并適用于所有數(shù)據(jù)庫(kù)。 例如,如果你啟用了 DE
16、LETE 權(quán)限,在這里列出的用戶可以從任何表中刪除記錄,所以在你這樣做之前要認(rèn)真考慮。db 表db 表列出數(shù)據(jù)庫(kù),而用戶有權(quán)限訪問(wèn)它們。在這里指定的權(quán)限適用于一個(gè)數(shù)據(jù)庫(kù)中的所有表。host 表host 表與 db 表結(jié)合使用在一個(gè)較好層次上控制特定主機(jī)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限,這可能比單獨(dú)使用db好些。這個(gè)表不受GRANT和REVOKE語(yǔ)句的影響,所以,你可能發(fā)覺(jué)你根本不 是用它。tables_priv 表tables_priv 表指定表級(jí)權(quán)限,在這里指定的一個(gè)權(quán)限適用于一個(gè)表的所有列。columns_priv 表columns_priv 表指定列級(jí)權(quán)限。這里指定的權(quán)限適用于一個(gè)表的特定列。在“不用
17、 GRANT 設(shè)置用戶 ”一節(jié)里,我們?cè)儆懻?GRANT 語(yǔ)句如何對(duì)修改這些表起作用,和 你怎樣能通過(guò)直接修改授權(quán)表達(dá)到同樣的效果。tables_priv 和 columns_priv 表在 MySQL 3.22.11 版引進(jìn)(與 GRANT 語(yǔ)句同時(shí))。如果你有 較早版本的 MySQL ,你的 mysql 數(shù)據(jù)庫(kù)將只有 user、db 和 host 表。如果你從老版本升級(jí)到 3.22.11 或更新, 而沒(méi)有 tables_priv 和 columns_priv 表,運(yùn)行 mysql_fix_privileges_tables 腳本 創(chuàng)建它們。MySQL 沒(méi)有 rows_priv 表,因?yàn)樗?/p>
18、提供記錄級(jí)權(quán)限,例如,你不能限制用戶于表中包含 特定列值的行。 如果你確實(shí)需要這種能力, 你必須用應(yīng)用編程來(lái)提供。 如果你想執(zhí)行建議的 記錄級(jí)鎖定,你可用 GET_LOCK() 函數(shù)做到。2.1.1 授權(quán)表范圍列授權(quán)表范圍列指定表中的權(quán)限何時(shí)運(yùn)用。 時(shí)運(yùn)用于一個(gè)給定用戶從給定主機(jī)的連接。 列指出權(quán)限運(yùn)用于哪個(gè)數(shù)據(jù)庫(kù)。類似地,授權(quán)表包含兩種列:決定一個(gè)權(quán)限何時(shí)運(yùn)用的范圍列和決定授予哪種權(quán)限的權(quán)限列。每個(gè)授權(quán)表?xiàng)l目包含 User 和 Host 列來(lái)指定權(quán)限何 其他表包含附加的范圍列, 如 db 表包含一個(gè) Db tables_priv 和 columns_priv 表包含范圍字段,縮小范圍到一個(gè)數(shù)
19、據(jù)庫(kù)中的特定表或一個(gè)表的特定列。2.1.2 授權(quán)表權(quán)限列授權(quán)表還包含權(quán)限列,他們指出在范圍列中指定的用戶擁有何種權(quán)限。由 MySQL 支持的權(quán)限如下表所示。該表使用 GRANT 語(yǔ)句的權(quán)限名稱。對(duì)于絕大多數(shù)在user、 d b 和 host 表中的權(quán)限列的名稱與 GRANT 語(yǔ)句中有明顯的聯(lián)系。如 Select_priv 對(duì)應(yīng)于 SELECT 權(quán)限。2.1.3 數(shù)據(jù)庫(kù)和表權(quán)限 下列權(quán)限運(yùn)用于數(shù)據(jù)庫(kù)和表上的操作。ALTER允許你使用 ALTER TABLE 語(yǔ)句, 這其實(shí)是一個(gè)簡(jiǎn)單的第一級(jí)權(quán)限, 你必須由其他權(quán)限, 這 看你想對(duì)數(shù)據(jù)庫(kù)實(shí)施什么操作。CREATE允許你創(chuàng)建數(shù)據(jù)庫(kù)和表,但不允許創(chuàng)建索
20、引。DELETE允許你從表中刪除現(xiàn)有記錄。DROP允許你刪除(拋棄)數(shù)據(jù)庫(kù)和表,但不允許刪除索引。INDEX允許你創(chuàng)建并刪除索引。REFERENCES 目前不用。SELECT允許你使用 SELECT 語(yǔ)句從表中檢索數(shù)據(jù)。對(duì)不涉及表的 SELECT 語(yǔ)句就不必要,如 SELECT NOW() 或 SELECT 4/2 。UPDATE 允許你修改表中的已有的記錄。2.1.4 管理權(quán)限 下列權(quán)限運(yùn)用于控制服務(wù)器或用戶授權(quán)能力的操作的管理性操作。FILE 允許你告訴服務(wù)器讀或?qū)懛?wù)器主機(jī)上的文件。該權(quán)限不應(yīng)該隨便授予,它很危險(xiǎn),見(jiàn) “回 避授權(quán)表風(fēng)險(xiǎn) ”。服務(wù)器確實(shí)較謹(jǐn)慎地保持在一定范圍內(nèi)使用該權(quán)限。
21、你只能讀任何人都能 讀的文件。你正在寫的文件必須不是現(xiàn)存的文件,這防止你迫使服務(wù)器重寫重要文件,如 /etc/passwd 或?qū)儆趧e人的數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄。如果你授權(quán)FILE權(quán)限,確保你不以UNIX的root用戶運(yùn)行服務(wù)器,因?yàn)閞oot可在文件系統(tǒng) 的任何地方創(chuàng)建新文件。 如果你以一個(gè)非特權(quán)用戶運(yùn)行服務(wù)器, 服務(wù)器只能在給用戶能訪問(wèn) 的目錄中創(chuàng)建文件。GRANT 允許你將你自己的權(quán)限授予別人,包括 GRANT 。PROCESS允許你通過(guò)使用 SHOW PROCESS 語(yǔ)句或 mysqladmin process 命令查看服務(wù)器內(nèi)正在運(yùn)行的 線程(進(jìn)程)的信息。這個(gè)權(quán)限也允許你用 KILL 語(yǔ)句或
22、 mysqladmin kill 命令殺死線程。 你總是能看到或殺死你自己的線程。 PROCESS 權(quán)限賦予你對(duì)任何線程做這些事情的能力。RELOAD 允許你執(zhí)行大量的服務(wù)器管理操作。你可以發(fā)出 FLUSH 語(yǔ)句,你也能指性 mysqladmin 的 reload、refresh、flush-hosts、flush-logs、 flush-privileges 和 flush-tables 等命令。SHUTDOWN允許你用 mysqladmin shutdown 關(guān)閉服務(wù)器。在 user、db 和 host 表中,每一個(gè)權(quán)限以一個(gè)單獨(dú)的列指定。這些列全部聲明為一個(gè)ENUM("N&qu
23、ot;,"Y")類型,所以每個(gè)權(quán)的缺省值是“ N”在tables_priv和columns_priv中的權(quán)限以一個(gè) SET 表示, 它允許權(quán)限用一個(gè)單個(gè)列以任何組合指定。 這兩個(gè)表比其他三個(gè)表更新, 這就是為什么它們使用更有效的表示方式的原因。(有可能在未來(lái),user、db和host表也用一個(gè) SET 類型表示。)在 tables_priv 表中的 Table_priv 列被定義成:SET('Select','Insert','Update','Delete','Create','Dro
24、p','Grant','References','Index','Alter') 在 coloums_priv 表中的 Column_priv 列被定義成:SET('Select','Insert','Update','References') 列權(quán)限比表權(quán)限少, 因?yàn)榱屑?jí)較少的權(quán)限有意義。 例如你能創(chuàng)建一個(gè)表, 但你不能創(chuàng)建一個(gè) 孤立的列。user 表包含某些在其他授權(quán)表不存在的權(quán)限的列:File_priv 、 Process_priv、 Reload_pr
25、iv 和Shutdown_priv 。這些權(quán)限運(yùn)用于你讓服務(wù)器執(zhí)行的與任何特定數(shù)據(jù)庫(kù)或表不相關(guān)的操作。 如允許一個(gè)用戶根據(jù)當(dāng)前數(shù)據(jù)庫(kù)是什么來(lái)關(guān)閉數(shù)據(jù)庫(kù)是毫無(wú)意義的。2.2 服務(wù)器如何控制客戶訪問(wèn)在你使用 MySQL 時(shí),客戶訪問(wèn)控制有兩個(gè)階段。第一階段發(fā)生在你試圖連接服務(wù)器時(shí)。服 務(wù)器查找 user 表看它是否能找到一個(gè)條目匹配你的名字、你正在從那兒連接的主機(jī)和你提 供的口令。如果沒(méi)有匹配,你就不能連接。如果有一個(gè)匹配,建立連接并繼續(xù)第二階段。在 這個(gè)階段,對(duì)于每一個(gè)你發(fā)出的查詢,服務(wù)器檢查授權(quán)表看你是否有足夠的權(quán)限執(zhí)行查詢, 第二階段持續(xù)到你與服務(wù)器對(duì)話的結(jié)束。本小節(jié)詳細(xì)介紹 MySQL 服
26、務(wù)器用于將授權(quán)表?xiàng)l目匹配到來(lái)的連接請(qǐng)求或查詢的原則, 這包 括在授權(quán)表范圍列中合法的值的類型、 結(jié)合授權(quán)表中的權(quán)限信息的方式和表中條目被檢查的 次序。2.2.1 范圍列內(nèi)容 一些范圍列要求文字值,但它們大多數(shù)允許通配符或其他特殊值。Host一個(gè) Host 列值可以是一個(gè)主機(jī)名或一個(gè) IP 地址。 值 localhost 意味著本地主機(jī), 但它只在你 用一個(gè) localhost 主機(jī)名時(shí)才匹配,而不是你在使用主機(jī)名時(shí)。假如你的本地主機(jī)名是 并且在 user 表中有對(duì)你的兩條記錄,一個(gè)有一個(gè) Host 值或 localhost ,而另一個(gè) 有 ,有 localhost 的記錄將只當(dāng)你連接 loca
27、lhost 時(shí)匹配,其他在只在連接 時(shí)才匹配。 如果你想讓客戶能以兩種方式連接, 你需要在 user 表中有兩條記錄。你也可以用通配符指定 Host 值??梢允褂?SQL 的模式字符 “%”和 “_并”具有當(dāng)你在一個(gè)查詢 中使用 LIKE 算符同樣的含義(不允許 regex 算符)。 SQL 模式字符都能用于主機(jī)名和 IP 地址。如 % 匹配任何 域內(nèi)的主機(jī),而 %.edu 匹配任何教育學(xué)院的主機(jī)。類 似地, 192.168.%匹配任何在 192.168 B 類子網(wǎng)的主機(jī),而 192.168.3.% 匹配任何在 192.168.3 C 類子網(wǎng)的主機(jī)。%值匹配所
28、有主機(jī),并可用于允許一個(gè)用戶從任何地方連接。一個(gè)空白的Host 值等同于 %。(例外:在 db 表中,一個(gè)空白 Host 值含義是 “進(jìn)一步檢查 host 表 ”,該過(guò)程在 “查詢?cè)L問(wèn)驗(yàn) 證”中介紹。)從 MySQL 3.23 起,你也可以指定帶一個(gè)表明那些為用于網(wǎng)絡(luò)地址的網(wǎng)絡(luò)掩碼的 IP 地址, 如 /17 指定一個(gè) 17 位網(wǎng)絡(luò)地址并匹配其 IP 地址是 192.168128 前 17 位的任何 主機(jī)。User 用戶名必須是文字的或空白。一個(gè)空白值匹配任何用戶。%作為一個(gè) User 值不意味著空白,相反它匹配一個(gè)字面上的 %名字,這可能不是你想要的。當(dāng)一個(gè)到來(lái)的連
29、接通過(guò)user表被驗(yàn)證而匹配的記錄包含一個(gè)空白的 User值,客戶被認(rèn)為是一個(gè)匿名用戶。Password口令值可以是空或非空, 不允許用通配符。 一個(gè)空口令不意味著匹配任何口令, 它意味著用 戶必須不指定口令??诹钜砸粋€(gè)加密過(guò)的值存儲(chǔ),不是一個(gè)字面上的文本。如果你在Password 列中存儲(chǔ)一個(gè)照字面上的口令,用戶將不能連接! GRANT 語(yǔ)句和 mysqladmin password 命令為你自動(dòng)加密 口令,但是如果你用諸如 INSERT 、 REPLACE 、 UPDATE 或 SET PASSWORD 等命令,一 定要用 PASSWORD("new_password"
30、) 而不是簡(jiǎn)單的 "new_password" 來(lái)指定口令。Db在 columns_priv 和 tables_priv 表中, Db 值必須是真正的數(shù)據(jù)庫(kù)名 (照字面上) ,不允許模式 和空白。在db和host中,Db值可以以字面意義指定或使用 SQL模式字符或'指定一個(gè) 通配符。一個(gè) '%'或空白匹配任何數(shù)據(jù)庫(kù)。Table_name, Column_name 這些列中的值必須是照字面意思的表或列名,不允許模式和空白。某些范圍列被服務(wù)器視為大小寫敏感的,其余不是。這些原則總結(jié)在下表中。特別注意 Table_name 值總是被看作大小寫敏感的,即使在
31、查詢中的表名的大小寫敏感性對(duì)待視服務(wù) 器運(yùn)行的主機(jī)的文件系統(tǒng)而定( UNIX 下是大小寫敏感,而 Windows 不是)。表 3 授權(quán)表范圍列的大小寫敏感性列HostUserPasswordDbTable_nameColumn_name 大小寫敏感性NoYesYesYesYesNo2.2.2 查詢?cè)L問(wèn)驗(yàn)證每次你發(fā)出一個(gè)查詢,服務(wù)器檢查你是否有足夠的權(quán)限執(zhí)行它,它以u(píng)ser、db、 tables_priv和 columns_priv 的順序檢查,知道它確定你有適當(dāng)?shù)脑L問(wèn)權(quán)限或已搜索所有表而一無(wú)所獲。更具體的說(shuō): 服務(wù)器檢查 user 表匹配你開(kāi)始連接的記錄以查看你有什么全局權(quán)限。如果你有并且它們
32、對(duì) 查詢足夠了,服務(wù)器則執(zhí)行它。如果你的全局權(quán)限不夠,服務(wù)器為你在 db 表中尋找并將該記錄中的權(quán)限加到你的全局權(quán)限 中。如果結(jié)果對(duì)查詢足夠,服務(wù)器執(zhí)行它。如果你的全局和數(shù)據(jù)庫(kù)級(jí)組合的權(quán)限不夠,服務(wù)器繼續(xù)查找,首先在 tables_priv 表,然后 columns_priv 表。如果你在檢查了所有表之后仍無(wú)權(quán)限,服務(wù)器拒絕你執(zhí)行查詢的企圖。 用布爾運(yùn)算的術(shù)語(yǔ),授權(quán)表中的權(quán)限被服務(wù)器這樣使用:user OR tables_priv OR columns_priv你可能疑惑為什么前面的描述只引用 4個(gè)授權(quán)表, 而實(shí)際上有 5個(gè)。實(shí)際上服務(wù)器是這樣檢 查訪問(wèn)權(quán)限:user OR (db AND h
33、ost) OR tables_priv OR columns_priv第一個(gè)較簡(jiǎn)單的表達(dá)式是因?yàn)?host 表不受 GRANT 和 REVOKE 語(yǔ)句影響。如果你總是用 GRANT 和 REVOKE 管理用戶權(quán)限, 你絕不需要考慮 host 表。但是其工作原理你用該知道:當(dāng)服務(wù)器檢查數(shù)據(jù)庫(kù)級(jí)權(quán)限時(shí),它對(duì)于客戶查找 db 表。如果 Host 列是空的,它意味著 “檢 查 host 表以找出哪一個(gè)主機(jī)能訪問(wèn)數(shù)據(jù)庫(kù) ”。服務(wù)器在host表中查找有與來(lái)自db表的記錄相同的 Db列值。如果沒(méi)有 host記錄匹配客戶 主機(jī),則沒(méi)有授予數(shù)據(jù)庫(kù)級(jí)權(quán)限。 如果這些記錄的任何一個(gè)的確有一個(gè)匹配連接的客戶主機(jī) 的H
34、ost列值,db表記錄和host表記錄結(jié)合產(chǎn)生客戶的數(shù)據(jù)庫(kù)級(jí)權(quán)限。然而,權(quán)限用一個(gè)邏輯 AND (與)結(jié)合起來(lái),這意味著除非一個(gè)給定的權(quán)限在兩個(gè)表中都 有,否則客戶就不具備該權(quán)限。以這種方式,你可以在 db 表中授予一個(gè)基本的權(quán)限集,然 后使用 host 表對(duì)特定的主機(jī)有選擇地禁用它們。如你可以允許從你的域中的所有主機(jī)訪問(wèn) 數(shù)據(jù)庫(kù),但關(guān)閉了那些在較不安全區(qū)域的主機(jī)的數(shù)據(jù)庫(kù)權(quán)限。前面的描述毫無(wú)疑問(wèn)使訪問(wèn)檢查聽(tīng)起來(lái)一個(gè)相當(dāng)復(fù)雜的過(guò)程,特別是你以為服務(wù)器對(duì)你發(fā)出的每個(gè)查詢進(jìn)行權(quán)限檢查, 然而此過(guò)程是很快的, 因?yàn)榉?wù)器其實(shí)不從授權(quán)表對(duì)每個(gè)查詢查 找信息,相反, 它在啟動(dòng)時(shí)將表的內(nèi)容讀入內(nèi)存, 然后驗(yàn)
35、證查詢用的是內(nèi)存中的副本。 這大 大提高了訪問(wèn)檢查操作的性能。 但有一個(gè)非常明顯的副作用。 如果你直接修改授權(quán)表的內(nèi)容, 服務(wù)器將不知道權(quán)限的改變。例如,如果你用一條 INSERT 語(yǔ)句向 user 表加入一個(gè)新記錄來(lái)增加一個(gè)新用戶,命名在記 錄中的用戶將不能連接服務(wù)器。這對(duì)管理員新手(有時(shí)對(duì)有經(jīng)驗(yàn)的老手)是很困惑的事情, 當(dāng)時(shí)解決方法很簡(jiǎn)單:在你改變了它們之后告訴服務(wù)器重載授權(quán)表內(nèi)容,你可以發(fā)一條FLUSH PRIVILEGES 或 執(zhí) 行 mysqladmin flush-privileges ( 或 如 果 你 有 一 個(gè) 不 支 持 flush-privileges 的老版本,用 my
36、sqladmin reload。)。2.2.3 范圍列匹配順序MySQL 服務(wù)器按一種特定方式排序符授權(quán)表中的記錄,然后通過(guò)按序?yàn)g覽記錄匹配到來(lái)的 連接。找到的第一個(gè)匹配決定了被使用的記錄。理解 MySQL 使用的排序順序很重要,特別 是對(duì) user 表。當(dāng)服務(wù)器讀取user表內(nèi)容時(shí),它根據(jù)在Host和User列中的值排序記錄,Host值起決定作用(相同的Host值排在一起,然后再根據(jù)User值排序)。然而,排序不是典序(按詞排序), 它只是部分是。要牢記的是字面上的詞優(yōu)先于模式。這意味著如果你正從 連接服務(wù)器而 Host 有 和 % 兩個(gè)值,則第一個(gè)先選。類似地, % 優(yōu)先于%.net,然后
37、是%。IP地址的匹配也是這樣的??傊痪湓挘骄唧w越優(yōu)先。可以參見(jiàn)本文附錄的實(shí)例。2.3 避免授權(quán)表風(fēng)險(xiǎn)本屆介紹一些在你授權(quán)時(shí)的一些預(yù)防措施,以及不明值的選擇帶來(lái)的風(fēng)險(xiǎn)。 一般地, 你要很“吝嗇 ”地授予超級(jí)用戶權(quán)限,即不要啟用 將用戶權(quán)限限制于數(shù)據(jù)庫(kù)、表、或列。在user 表中條目中的權(quán)限,而使用其它授權(quán)表,以 user 表中的權(quán)限允許于影響到你的服務(wù)器操作或能訪問(wèn)任何數(shù)據(jù)庫(kù)中的任何表。不要授予對(duì) mysql 數(shù)據(jù)庫(kù)的權(quán)限。 一個(gè)擁有包含授權(quán)表數(shù)據(jù)庫(kù)權(quán)限的用戶可能會(huì)修改表以獲 取對(duì)其他任何數(shù)據(jù)庫(kù)的權(quán)限。 授予允許一個(gè)用戶修改 mysql 數(shù)據(jù)庫(kù)表的權(quán)限也實(shí)際上給了用 戶以一個(gè)全局 GRANT
38、 權(quán)限。 如果用戶能直接修改表, 這也等價(jià)于能夠發(fā)出任何你能想象的 任何 GRANT 語(yǔ)句。FILE 權(quán)限尤其危險(xiǎn),不要輕易授權(quán)它。以下是一個(gè)擁有 FILE 權(quán)限的人能干除的事情:CREATE TABLE etc_passwd (pwd_entry TEXT);LOAD DATA INFILE "/etc/passwd" into TABLE etc_passwd;SELECT * FROM etc_passwd;在發(fā)出這些語(yǔ)句后, 用戶已經(jīng)擁有了你的口令文件的內(nèi)容了。 實(shí)際上, 服務(wù)器上任何公開(kāi)可 讀文件的內(nèi)容都可被擁有 FILE 權(quán)限的用戶通過(guò)網(wǎng)絡(luò)訪問(wèn)。FILE 權(quán)限也
39、能被利用來(lái)危害沒(méi)有設(shè)置足夠權(quán)限制的文件權(quán)限的系統(tǒng)上的數(shù)據(jù)庫(kù)。這就是你 為什么應(yīng)該設(shè)置數(shù)據(jù)目錄只能由服務(wù)器讀取的原因。 如果對(duì)應(yīng)于數(shù)據(jù)庫(kù)表的文件可被任何人 讀取,不只是用戶服務(wù)器賬號(hào)的用戶可讀,任何有 FILE 權(quán)限的用戶也可通過(guò)網(wǎng)絡(luò)連接并讀 取它們。下面演示這個(gè)過(guò)程:創(chuàng)建一個(gè)有一個(gè) LONGBLOB 列的表:USER test;然后將表內(nèi)容寫入你自己數(shù)據(jù)庫(kù)CREATE TABLE tmp (b LONGBLOB);使用該表讀取每個(gè)對(duì)應(yīng)于你想偷取的數(shù)據(jù)庫(kù)表文件的內(nèi)容,的一個(gè)文件中:LOAD DATA INFILE "./other_db/x.frm" INTO TABLE t
40、mpFIELDS ESCAPED BY "" LINES TERMINA TED BY ""SELECT * FROM tmp INTO OUTFILE "y.frm"FIELDS ESCAPED BY "" LINES TERMINA TED BY ""DELETE FROM tmp;LOAD DATA INFILE "./other_db/x.ISD" INTO TABLE tmpFIELDS ESCAPED BY "" LINES TERMINA T
41、ED BY ""SELECT * FROM tmp INTO OUTFILE "y.ISD"FIELDS ESCAPED BY "" LINES TERMINA TED BY ""DELETE FROM tmp;LOAD DATA INFILE "./other_db/x.ISM" INTO TABLE tmpFIELDS ESCAPED BY "" LINES TERMINA TED BY ""SELECT * FROM tmp INTO OUTFILE
42、 "y.ISM"現(xiàn)在你擁有了一個(gè)新表 y ,它包含 other_db.x 的內(nèi)容并且你有全權(quán)訪問(wèn)它。 為避免讓人以同樣的方式攻擊, 根據(jù) “第一部分 內(nèi)部安全性 -保護(hù)你的數(shù)據(jù)目錄 ”中的指令設(shè) 置你的數(shù)據(jù)目錄上的權(quán)限。 你也可以在你啟動(dòng)服務(wù)器時(shí)使用 -skip-show-database 選項(xiàng)限制用 戶對(duì)于他們沒(méi)用訪問(wèn)權(quán)限的數(shù)據(jù)庫(kù)使用 SHOW DATABASES 和 SHOW TABLES 。這有助于 防止用戶找到關(guān)于它們不能訪問(wèn)的數(shù)據(jù)庫(kù)和表的信息。ALTER 權(quán)限能以不希望的方式使用。假定你想讓 user1 可以訪問(wèn) table1 但不能訪問(wèn) tables2。 一個(gè)擁
43、有 ALTER 權(quán)限的用戶可以通過(guò)使用 ALTER TABLE 將 table2 改名為 table1 來(lái)偷梁換 柱。當(dāng)心 GRANT 權(quán)限。兩個(gè)由不同權(quán)限但都有 GRANT 權(quán)限的用戶可以使彼此的權(quán)利更強(qiáng)大。2.4 不用 GRANT 設(shè)置用戶 如果你有一個(gè)早于 3.22.11 的 MySQL 版本,你不能使用 GRANT (或 REVOKE )語(yǔ)句設(shè)置 用戶及其訪問(wèn)權(quán)限, 但你可以直接修改授權(quán)表的內(nèi)容。 如果你理解 GRANT 語(yǔ)句如何修改授 權(quán)表,這很容易。那么你通過(guò)手工發(fā)出 INSERT 語(yǔ)句就能自己做同樣的事情。當(dāng)你發(fā)出一條 GRANT 語(yǔ)句時(shí), 你指定一個(gè)用戶名和主機(jī)名, 可能還有口
44、令。 對(duì)該用戶生成 一個(gè) user 表記錄,并且這些值記錄在 User、 Host 和 Password 列中。如果你在 GRANT 語(yǔ)句 中指定全局權(quán)限, 這些權(quán)限記錄在記錄的權(quán)限列中。 其中要留神的是 GRANT 語(yǔ)句為你加密 口令,而 INSERT 不是,你需要在 INSERT 中使用 PASSWORD() 函數(shù)加密口令。如果你指定數(shù)據(jù)庫(kù)級(jí)權(quán)限,用戶名和主機(jī)名被記錄在 db 表的 User 和 Host 列。你為其授權(quán) 的數(shù)據(jù)庫(kù)記錄在 Db 列中,你授予的權(quán)限記錄在權(quán)限列中。對(duì)于表級(jí)和列級(jí)權(quán)限, 效果是類似的。 在 tables_priv 和 columns_priv 表中創(chuàng)建記錄以記錄
45、用 戶名、主機(jī)名和數(shù)據(jù)庫(kù),還有相關(guān)的表和列。授予的權(quán)限記錄在權(quán)限列中。如果你還記得前面的介紹, 你應(yīng)該能即使不用 GRANT 語(yǔ)句也能做 GRANT 做的事情。 記住 在你直接修改授權(quán)表時(shí), 你將通知服務(wù)器重載授權(quán)表, 否則他不知道你的改變。 你可以執(zhí)行 一個(gè) mysqladmin flush-privileges 或 mysqladmin reload 命令強(qiáng)迫一個(gè)重載。如果你忘記做這 個(gè),你會(huì)疑惑為什么服務(wù)器不做你想做的事情。列 GRANT 語(yǔ)句創(chuàng)建一個(gè)擁有所有權(quán)的超級(jí)用戶。包括授權(quán)給別人的能力:GRANT ALL ON *.* TO anynamelocalhost IDENTIFIED
46、 BY "passwd"WITH GRANT OPTION該語(yǔ)句將在 user 表中為 anynamelocalhost 創(chuàng)建一個(gè)記錄, 打開(kāi)所有權(quán)限, 因?yàn)檫@里是超級(jí) 用戶(全局)權(quán)限存儲(chǔ)的地方,要用 INSERT 語(yǔ)句做同樣的事情,語(yǔ)句是:INSERT INTO user V ALUES("localhost","anyname",PASSWORD("passwd"),你可能發(fā)現(xiàn)它不工作,這要看你的 MySQL 版本。授權(quán)表的結(jié)構(gòu)已經(jīng)改變而且你在你的 user表可能沒(méi)有 14 個(gè)權(quán)限列。用 SHOW COLUM
47、NS 找出你的授權(quán)表包含的每個(gè)權(quán)限列,相應(yīng) 地調(diào)整你的 INSERT 語(yǔ)句。 下列 GRANT 語(yǔ)句也創(chuàng)建一個(gè)擁有超級(jí)用戶身份的用戶,但是 只有一個(gè)單個(gè)的權(quán)限:GRANT RELOAD ON *.* TO flushlocalhost IDENTIFIED BY "flushpass"本例的 INSERT 語(yǔ)句比前一個(gè)簡(jiǎn)單, 它很容易列出列名并只指定一個(gè)權(quán)限列。 所有其它列將 設(shè)置為缺省的 "N" :INSERT INTO user (Host,Password,Reload) VALUES("localhost","flu
48、sh",PASSWORD("flushpass"),"Y")數(shù)據(jù)庫(kù)級(jí)權(quán)限用一個(gè) ON db_name.* 子句而不是 ON *.* 進(jìn)行授權(quán):GRANT ALL ON sample.* TO borislocalhost IDENTIFIED BY "ruby" 這些權(quán)限不是全局的,所以它們不存儲(chǔ)在 user 表中,我們?nèi)匀恍枰?user 表中創(chuàng)建一條記 錄(使得用戶能連接) ,但我們也需要?jiǎng)?chuàng)建一個(gè) db 表記錄記錄數(shù)據(jù)庫(kù)集權(quán)限:INSERT INTO user (Host,User,Password) V ALUES(&
49、quot;localhost","boris",PASSWORD("ruby")INSERT INTO db VALUES("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y","Y")"N&quo
50、t; 列是為 GRANT 權(quán)限;對(duì)末尾的一個(gè)數(shù)據(jù)庫(kù)級(jí)具有 WITH GRANT OPTION 的 GRANT 語(yǔ)句,你要設(shè)置該列為 "Y" 。要設(shè)置表級(jí)或列級(jí)權(quán)限, 你對(duì) tables_priv 或 columns_priv 使用 INSERT 語(yǔ)句。 當(dāng)然, 如果你 沒(méi)有 GRANT 語(yǔ)句,你將沒(méi)有這些表,因?yàn)樗鼈冊(cè)?MySQL 中同時(shí)出現(xiàn)。如果你確實(shí)有這些 表并且為了某些原因想要手工操作它們,要知道你不能用單獨(dú)的列啟用權(quán)限。你設(shè)置 tables_priv.Table_priv 或 columns_priv.Column_priv 列來(lái)設(shè)置包含你想啟用的權(quán)限值。 例如,要
51、對(duì)一個(gè)表啟用 SELECT 和 INSERT 權(quán)限,你要在相關(guān)的 tables_priv 的記錄中設(shè)置 Table_priv 為 "Select,Insert" 。如果你想對(duì)一個(gè)擁有 MySQL 賬號(hào)的用戶修改權(quán)限, 使用 UPDATE 而不是 INSERT ,不管你 增加或撤銷權(quán)限都是這樣。要完全刪除一個(gè)用戶,從用戶使用的每個(gè)表中刪除記錄。如果你愿意避免發(fā)一個(gè)查詢來(lái)直接修改全權(quán)表,你可以看一下 MySQL 自帶的 mysqlaccess 和 mysql_setpermissions 腳本。附錄 1 小測(cè)驗(yàn)在你剛剛新安裝了一個(gè) MySQL 服務(wù)器,在你增加了一個(gè)允許連接 M
52、ySQL 的用戶,用下列 語(yǔ)句:GRANT ALL ON samp_db.* TO fred* IDENTIFIED "cocoa"而 fred 碰巧在服務(wù)器主機(jī)上有個(gè)賬號(hào),所以他試圖連接服務(wù)器:%mysql -u fred -pcocoa samp_dbERROR 1045: Access denied for user: 'fredlocalhost' (Using password: YES)為什么?原因是:先考慮一下 mysql_install_db 如何建立初始權(quán)限表和服務(wù)器如何使用user 表記錄匹配客戶連接。在你用 mysql_install_db 初始化你的數(shù)據(jù)庫(kù)時(shí),它創(chuàng)建類似這樣的user 表:Host User localhost localhost root root頭兩個(gè)記錄允許 root 指定 localhost 或主機(jī)名連接本地服務(wù)器,后兩個(gè)允許匿名用戶從本地 連接。當(dāng)增加 fred 用戶后,Host Userlocalho
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度現(xiàn)澆樓板施工質(zhì)量檢測(cè)與評(píng)估合同
- 2025年度水井租賃與水質(zhì)凈化服務(wù)合同
- 二零二五年度自建房建筑廢棄物分類處理承包協(xié)議合同
- 二零二五年度知乎租賃公寓租賃期限靈活合同
- 二零二五年度車牌借用與共享出行服務(wù)合同
- 2025年度工業(yè)自動(dòng)化計(jì)件勞務(wù)合同
- 2025年度電梯維保與電梯安全應(yīng)急演練合同
- 2025年度門衛(wèi)用工安全保障合同
- 公共安全立體化防控
- 2022版義務(wù)教育(地理)課程標(biāo)準(zhǔn)(附課標(biāo)解讀)
- 2024年滑雪用品行業(yè)分析報(bào)告及未來(lái)發(fā)展趨勢(shì)
- 經(jīng)方治療腦梗塞的體會(huì)
- 新版DFMEA基礎(chǔ)知識(shí)解析與運(yùn)用-培訓(xùn)教材
- 制氮機(jī)操作安全規(guī)程
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(kù)(全真題庫(kù))
- 護(hù)理安全用氧培訓(xùn)課件
- 《三國(guó)演義》中人物性格探析研究性課題報(bào)告
- 注冊(cè)電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 冷庫(kù)管道應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論