在線設計平臺有什么用長春seo網站優(yōu)化
1.?數據庫安全性概述
數據庫存在的不安全因素:
-
非授權用戶對數據庫的惡意存取和破壞;
-
數據庫中重要或敏感的數據被泄露;
-
安全環(huán)境的脆弱性。
數據庫的安全性與計算機系統的安全性,包括計算機硬件、操作系統、網絡系統等的安全性是緊密聯系的。操作系統安全的脆弱,網絡協議安全保障的不足等都會造成數據庫安全性的破壞。
數據庫的安全性:
-
指保護數據庫,防止不合法的使用,以免數據的泄露、更改或破壞。
數據庫的完整性與安全性的區(qū)別:
-
安全性:保護數據以防止非法用戶故意造成的破壞,確保合法用戶做其想做的事情。
-
完整性:保護數據以防止合法用戶無意中造成的破壞,確保用戶所做的事情是正確的。
為了保護數據庫,防止故意的破壞,可以在從低到高的5個級別上設置各種安全措施:
-
物理控制:計算機系統的機房和設備應加以保護,通過加鎖或專門監(jiān)護等防止系統場地被非法進入,從而進行物理破壞。
-
法律保護:通過立法、規(guī)章制度防止授權用戶以非法的形式將其訪問數據庫的權限轉授給非法者。
-
操作系統支持:無論數據庫系統是多么安全,操作系統的安全弱點均可能成為人侵數據庫的手段,應防止未經授權的用戶從S處著手訪問數據庫。
-
網絡管理:由于大多數DBMS都允許用戶通過網絡進行遠程訪問,所以網絡軟件內部的安全性是很重要的。
-
DBMS實現:DBMS的安全機制的職責是檢查用戶的身份是否合法及使用數據庫的權限是否正確。
要實現數據庫安全,DBMS必須提供下列支持:
-
安全策略說明。
即安全性說明語言。如支持授權的SQL語言。
-
安全策略管理。
即安全約束目錄的存儲結構、存取控制方法和維護機制。
-
安全性檢查。
執(zhí)行“授權”及其檢驗,認可“他能做他想做的事情嗎?”。
-
用戶識別。
即標識和確認用戶,確定“他就是他說的那個人嗎?”。
現代 DBMS 一般采用“自主”(discretionary)和“強制”(mandatory)兩種存取控制方法來解決安全性問題。
在自主存取控制方法中,每個用戶對各個數據對象被授予不同的存取權力(authority)或特權(privilege),哪些用戶對哪些數據對象有哪些存取權力都按存取控制方案執(zhí)行,但并不完全固定。
在強制存取控制方法中,所有的數據對象被標定一個密級,所有的用戶也被授予一個許可證級別。
對于任一數據對象,凡具有相應許可證級別的用戶就可以存取,否則不能。
2. 數據庫安全性控制
計算機系統的安全模型:
-
當用戶進入計算機系統時,系統首先根據輸入的用戶標識(如用戶名)進行身份的鑒定,只有合法的用戶才準許進入系統。
-
對已進入計算機系統的用戶,DBMS還要進行存取控制,只允許用戶在所授予的權限之內進行合法的操作。
-
操作系統應能保證數據庫中的數據必須由DBMS訪問,而不允許用戶越過DBMS,直接通過操作系統或其他方式訪問。
-
數據最后通過加密的方式存儲到數據庫中,即便非法者得到了已加密的數據,也無法識別數據內容。
數據庫安全技術:用戶標識與鑒別、存取控制、視圖、審計、數據加密。
2.1 用戶標識與鑒別
最常用的鑒別方法:
即用什么來標識一個用戶,又怎樣去識別它。
用戶的個人特征識別:
-
使用每個人所具有的個人特征,如聲音、指紋、簽名等來識別用戶是當前最有效的方法,但是有以下兩個問題必須解決。
-
專門設備:要能準確地記錄、存儲和存取這些個人特征。
-
識別算法:要能較準確地識別出每個人的聲音、指紋或簽名。這里關鍵問是要讓“合法者被拒絕”和”非法者被接受”的誤判率達到應用環(huán)境可接受的程度。百分之百正確(即誤判率為零)幾乎是不可能的。
-
-
另外,其實代價也不得不考慮,這不僅是經濟上的代價,還包括識別算法執(zhí)行的時同和空間代價。它影響整個安全子系統的代價/性能比。
用戶的特有物品識別:
-
讓每一用戶持有一個他特有的物件,例如磁卡、鑰匙等。在識別時,將其插人一個“閱讀器”,它讀取其面上的磁條中的信息。該方法是目前一些安全系統中較常用的一種方法、但用在數據庫系統中要考慮以下兩點。
-
需要專門的閱讀裝置。
-
要求有從閱讀器抽取信息及與DBMS接口的軟件
-
-
該方法的優(yōu)點是比個人特征識別更簡單、有效,代價/性能比更好;缺點是用戶容易忘記帶磁卡或鑰匙等,也可能丟失甚至被別人竊取。
用戶的自定義識別:
-
使用只有用戶自己知道的定義內容來識別用戶是最常用的一種方法一般用口令或密碼,有時用只有用戶自己能給出正確答案的一組問題,有時還可以兩者兼用。在使用這類方法時要注意以下幾點。
-
標識的有效性:口令、密碼或問題答案要盡可能準確地標識每一個用戶;
-
內容的簡易性:口令或密碼要長短適中,問答過程不要太煩瑣
-
本身的安全性:為了防止口令、密碼或問題答案的泄露或失竊,應經常改變
-
-
實現這種方法需要專門的軟件來進行用戶名或用戶ID及其口令的登記、維護與檢驗等,但它不需要專門的硬件設備,較之以上的方法這是其優(yōu)點。
-
其主要的缺點是口令、密碼或問題答案容易被人竊取,因此還可以用更復雜的方法。
例如,每個用戶都預先約定好一個計算過程或函數,在鑒別用戶身份時,系統提供一個隨機數,用戶根據自己預先約定的計算過程或函數進行計算,而系統根據用戶的計算結果是否正確進一步鑒定用戶身份。
2.2 存儲控制策略
定義用戶權限,并將用戶權限登記到數據字典中:
-
權限:用戶對某一數據對象的操作權力。
-
某個用戶應該具有何種權限是個管理問題和政策問題而不是技術問題。
-
DBMS系統必須提供適當的語言來定義用戶權限,這些定義經過編譯后存放在數據字典中,被稱做安全規(guī)則或授權規(guī)則。
-
使用代碼:
GRANT SELECT ON dept TO user1@localhost;
合法權限檢查:
-
當用戶發(fā)出存取數據庫的操作請求后,DBMS查找數據字典,根據安全規(guī)則進行合法權限檢查,若用戶的操作請求超出了定義的權限,系統將拒絕執(zhí)行此操作。
-
以user1用戶登錄數據庫:
SELECT * FROM department;
自主存取控制(DAC):
-
在自主存取控制方法中,用戶對于不同的數據庫對象有不同的存取權限,不同的用戶對同一對象也有不同的權限,而且用戶還可將其擁有的存取權限轉授給其他用戶。
-
因此,自主存取控制非常靈活。
強制存取控制(MAC):
-
在強制存取控制方法中,每一個數據庫對象被標以一定的密級,每一個用戶也被授予某一個級別的許可證。對于任意一個對象,只有具有合法許可證的用戶才可以存取。
-
因此,強制存取控制相對比較嚴格。
2.3 自主存取控制
用戶使用數據庫的方式稱為”授權“。權限有兩種,即訪問數據權限和修改數據庫結構的權限。
權限類型:
-
自主存取控制的權限類型分為兩種,即角色權限和數據庫對象權限。
-
角色權限:給角色授權,并為用戶分配角色,用戶的權限為其角色權限之和。角色權限由 DBA 授予。
-
數據庫對象權限:不同的數據庫對象,可提供給用戶不同的操作。該權限由DBA或該對象的擁有者(Owner)授予用戶。
-
角色的授權與取消:
-
授權命令的語法如下:
GRANT <角色類型> [,<角色類型>] T0 <用戶> [IDENTIFIED BY <ロ令>] <角色類型>::= Connect|Resource|DBA
Connect
表示該用戶可連接到DBMS;Resource
表示用戶可訪問數據庫資源;DBA
表示該用戶為數據庫管理員;IDENTIFIED BY
用于為用戶設置一個初始口令。
-
取消命令的語法如下:
REVOKE <角色管理>[,<角色管理>] FROM <用戶>
數據庫對象的授權與取消:
-
授權命令的語法如下:
GRANT <權限> 0N <表名> TO <用戶>[,<用戶>] [WITH GRANT OPTION] <權限>::= ALL PRIVILEGES|SELECT|INSERT|DELETE|UPDATE[ (<列名>[ ,<列名>])]
WITH GRANT OPTION
表示得到授權的用戶,可將其獲得的權限轉授給其他用戶;ALL PRIVILEGES
表示所有的操作權限。
-
取消命令的語法如下:
REVOKE <權限> ON <表名> EROM <用戶>[,<用戶>]
數據庫對象除了表以外,還有其他對象,例如視圖等,但由于表的授權最具典型意義,而且表的授權也最復雜,所以此處只以表的授權為例來說明數據庫對象的授權語法其他對象的授權語法與之類似,只是在權限上不同。
2.4 強制存取控制
控制思路:
-
為每個數據對象(文件、記錄或字段等)賦予一定的密級。
系統運行時,采用兩條簡單規(guī)則:
-
用戶只能查看比它級別低或同級的數據;
-
用戶只能修改和它同級的數據。
強制存取控制是對數據本身進行密級標記,無論數據如何復制,標記與數據都是一個不可分的整體,只有符合密級標記要求的用戶才可以操縱數據,從而提供了更高級別的安全性。
強制存取控制的優(yōu)點是系統能執(zhí)行“信息流控制”。前面介紹的授權方法,允許凡有權查看保密數據的用戶就可以把這種數據復制到非保密的文件中,造成無權用戶也可以接觸保密的數據。強制存取控制可以避免這種非法的信息流動。
3. 視圖機制
視圖機制指通過視圖用戶只能查看和修改他所能看到的數據。
視圖+授權常用的安全性控制方法。
示例:
# 建立視圖score_db。CREATE ?VIEW score_db ? ASSELECT ?* ? FROM score ? WHERE cname=’數據庫’; # 為用戶授予操作視圖的權限。GRANT ?SELECT ?ON score_dbTO 王莎;
4. 安全級別與審計跟蹤
4.1 安全級別
TCSEC/TDI將系統安全性分為4等7級:
-
D級。
最低安全級別。
保留D級的目的是為了將一切不符合更高標準的系統,統統歸于D級。
-
C1級。
實現數據的所有權與使用權的分離,進行自主存取控制DAC,保護或限制用戶權限的傳播。
-
C2級。
提供受控的存取保護。
即將C1級的自主存取控制進一步細化,通過身份注冊、審計和資源隔離以支持“責任”說明。
-
B1級。
標記安全保護。
即對每一客體和主體分別標以一定的密級和安全證等級,實施強制存取控制MAC以及審計等安全機制。
-
B2級。
建立安全策略的形式化模型,并能識別和消除隱通道。
-
B3級。
提供審計和系統恢復過程,且指定安全管理員(通常是DBA)。
-
A1級。
驗證設計,提供B3級保護的同時給出系統的形式化設計說明和驗證,以確信各安全保護真正實現。、
即安全機制是可靠的,且對安全機制能實現指定的安全策略給出數學證明。
4.2 審計跟蹤
-
審計功能把用戶對數據庫的所有操作自動記錄下來放入“審計日志”中,稱為審計跟蹤。
-
審計員可以利用審計日志監(jiān)控數據庫中的各種行為,重現導致數據庫現有狀況的一系列事件,找出非法存取數據的人、時間和內容等。
-
還可以通過對審計日志分析,對潛在的威脅提前采取措施加以防范。
-
審計通常是很費時間和空間的,所以DBMS往往都將其作為可選特征,審計功能一般主要用于安全性要求較高的部門。
5.?數據加密
數據加密是防止數據庫中數據在存儲和傳輸中失密的有效手段。
加密的基本思想是根據一定的算法將原始數據(稱為明文)變換為不可直接識別的格式(稱為密文),從而使得不知道解密算法的人無法獲知數據的內容。
由于數據加密與解密也是比較費時的操作,而且數據加密與解密程序會占用大量系統資源,因此數據加密功能通常也作為可選特征。
6. 統計數據庫的安全性
統計數據庫查詢的僅僅是某些記錄的統計值,例如求記錄數、和、平均值等,不允許用戶查詢單個記錄的信息。
-
例如:人口調查數據庫,它包含大量的記錄,但其目的只是向公眾提供統計、匯總信息,而不是提供單個記錄的內容。
在統計數據庫中,雖然不允許用戶查詢單個記錄的信息,但是用戶可以通過處理足夠多的匯總信息來分析出單個記錄的信息,這就給統計數據庫的安全性帶來嚴重的威脅。
7. MySQL的安全設置
7.1 用戶管理
MySQL的用戶包括root用戶和普通用戶。
-
root用戶是超級管理員,擁有對整個MySQL服務器完全控制的權限。
-
普通用戶只能擁有賦予給它的權限。
為了防止非授權用戶對數據庫進行存取,DBA可以創(chuàng)建登錄用戶、修改用戶信息和刪除用戶。
創(chuàng)建登錄用戶:
CREATE ?USER ? 用戶 ?[IDENTIFIED ?BY [PASSWORD] '密碼'][,用戶 ?[IDENTIFIED ?BY [PASSWORD] '密碼']]…;
-
用戶的格式:
用戶名@
主機名;沒有指定主機名,則主機名默認為“%
”,表示一組主機;localhost
表示本地主機。 -
IDENTIFIED BY
子句指定創(chuàng)建用戶時的密碼。
示例:創(chuàng)建用戶TEMPUSER,其口令為test。
CREATE USER tempuser@localhost IDENTIFIED BY 'temp';
示例:創(chuàng)建的新用戶的詳細信息自動保存在系統數據庫mysql的user表中。
USE mysql; SELECT * FROM user WHERE user='tempuser';
修改用戶密碼:
SET PASSWORD FOR 用戶='新密碼';
示例:修改用戶賬號tempuser的密碼為123456。
SET PASSWORD FOR tempuser@localhost='123456';
修改用戶名:
RENAME USER 舊用戶名 TO 新用戶名[,舊用戶名 TO 新用戶名][,…];
示例:修改普通用戶tempuser的用戶名為temp_U。
RENAME USER tempuser@localhost TO temp_U@localhost;
刪除用戶:
DROP ?USER 用戶名[,…];
示例:刪除用戶temp_U。
DROP USER temp_U@localhost; ? USE mysql; SELECT * FROM user WHERE user='temp_U' and host='localhost';
7.2 權限管理
授予權限。
授予MySQL字段級別權限:
GRANT 權限名稱(列名[,列名,…])[, 權限名稱(列名[,列名,…]),…]ON ?TABLE 數據庫名.表名或視圖名TO 用戶[,用戶,…];
-
Column_priv權限表提供的權限名稱:
示例:為用戶column_user授予對emp表中列的操作權限。
CREATE USER column_user@localhost IDENTIFIED BY 'password'; ? GRANT SELECT(ename,sal,empno),UPDATE(sal) ? ON TABLE scott1.emp TO column_user@localhost; ? SELECT * FROM mysql.columns_priv;
授予MySQL表級別權限:
GRANT 權限名稱[, 權限名稱,…]ON ?TABLE 數據庫名.表名或數據庫名.視圖名TO 用戶[,用戶,…];
示例:為用戶table_user授予對emp表的操作權限。
CREATE USER table_user@localhost IDENTIFIED BY 'password'; ? GRANT ALTER,SELECT,INSERT(empno,ename) ON TABLE scott1.empTO table_user@localhost; ? SELECT * FROM mysql.tables_privWHERE host='localhost' and user='table_user';
授予MySQL存儲程序級別權限:
GRANT 權限名稱[, 權限名稱,…]ON ?FUNCTION|PROCEDURE 數據庫名.函數名 | 數據庫名.存儲過程名TO 用戶[,用戶,…];
示例:為用戶proc_user授予存儲過程的操作權限。
CREATE USER proc_user@localhost IDENTIFIED BY 'password'; ? GRANT ?EXECUTE ?ON PROCEDURE scott1.emp_p TO proc_user@localhost; ? GRANT ?ALTER ROUTINE,EXECUTE ?ON FUNCTION scott1.sum_fnTO proc_user@localhost; ? SELECT * FROM mysql.procs_priv;
授予MySQL數據庫級別權限:
GRANT 權限名稱[, 權限名稱,…] ?ON ? 數據庫名.*TO 用戶[,用戶,…];
示例:為用戶database_user授予對scott1數據庫的操作權限。
CREATE USER database_user@localhost IDENTIFIED BY 'password'; ? GRANT ?GRANT CREATE,SELECT,DROPON scott1.*TO database_user@localhost; ? SELECT * FROM mysql.db ?WHERE host='localhost' and db='scott1';
授予MySQL服務器管理員級別權限:
GRANT 權限名稱[, 權限名稱,…] ?ON ?*.* ?TO 用戶[,用戶,…];
示例:為用戶server_user授予對所有數據庫的操作權限。
CREATE USER server_user@localhost IDENTIFIED BY 'password'; ? GRANT ALL PRIVILEGES ON *.*TO server_user@localhost; ? SELECT * FROM mysql.userWHERE host='localhost' and user='server_user';
權限的轉移:
WITH GRANT OPTION
-
如果使用了WITH GRANT OPTION子句,則表示TO子句中的所有用戶都具有把自己所擁有的權限授予給其他用戶的權利。
示例:創(chuàng)建新用戶u1和u2,為u1賦予對dept表增刪改查的權限,并且u1能夠將所擁有的權限再賦予給u2。
CREATE USER u1@localhost IDENTIFIED BY '123'; CREATE USER u2@localhost IDENTIFIED BY '456'; ? GRANT SELECT,INSERT,UPDATE,DELETE ON company.deptTO u1@localhostWITH GRANT OPTION;
撤銷權限:
撤消所有權限:
REVOKE ?ALL ?PRIVILEGES,GRANT ?OPTIONFROM 用戶[,用戶,…];
示例:撤消用戶column_user@localhost的所有權限。
REVOKE ALL PRIVILEGES,GRANT OPTIONFROM column_user@localhost;
撤消指定權限:
REVOKE 權限名稱[(列名[,列名,…])][,權限名稱[(列名[,列名,…])],…]ON ?*.* | 數據庫名.* | 數據庫名.表名或視圖名FROM 用戶[,用戶,…];
示例:撤消用戶database_user@localhost的CREAT和DROP權限。
REVOKE ?CREATE,DROP ON scott1.*FROM database_user@localhost; ? SELECT * FROM mysql.dbWHERE host='localhost' and user='database_user';
7.3 角色管理
角色是具有名稱的一組相關權限的組合,即將不同的權限集合在一起就形成了角色。
角色的優(yōu)勢:
-
當為用戶授予角色時,相當于為用戶授予了多種權限。
-
避免了向用戶逐一授權,從而簡化了用戶權限的管理。
創(chuàng)建角色:
CREATE ROLE 角色名;
-
角色格式:
'角色名'@'主機名'。
示例:分別在本地主機上創(chuàng)建應用程序角色app、運維人員角色ops、開發(fā)人員讀角色dev_read、開發(fā)人員寫角色dev_write。
CREATE ROLE 'app'@'localhost','ops'@'localhost','dev_read'@'localhost','dev_write'@'localhost'; ? SELECT * FROM mysql.userWHERE host='localhost' and user IN('app','ops','dev_read','dev_write');
授予角色權限:
示例:分別授予角色app數據讀寫權限、角色ops訪問數據庫權限、角色dev_read讀取權限、角色dev_write寫權限。
GRANT SELECT,INSERT,UPDATE,DELETEON SCOTT1.* ?TO 'app'@'localhost'; ? GRANT ALL PRIVILEGESON SCOTT1.* ?TO 'ops'@'localhost'; ? GRANT ?SELECT ON SCOTT1.* ?TO 'dev_read'@'localhost'; ? GRANT ?INSERT,UPDATE,DELETEON SCOTT1.* ?TO 'dev_write'@'localhost';
授予用戶角色:
GRANT 角色[,角色, ...] TO 用戶[,用戶, ...]
示例:分別將角色授予新用戶app01、ops01、dev01、dev02、dev03。
GRANT 'app'@'localhost' TO 'app01'@'localhost'; ? GRANT 'ops'@'localhost' TO 'ops01'@'localhost'; ? GRANT 'dev_read'@'localhost' TO 'dev01'@'localhost'; ? GRANT 'dev_read'@'localhost','dev_write'@'localhost'TO ?'dev02'@'localhost','dev03'@'localhost';
用戶在使用據夜色權限前必須先激活角色,設置語句如下:
SET GLOBAL activate_all_roles_on_login = ON
撤銷用戶角色:
REVOKE 角色[,角色,…] FROM 用戶[,用戶,…];
示例:撤消用戶app01的角色app。
REVOKE 'app'@'localhost' FROM 'app01'@'localhost'; ? SHOW GRANTS FOR 'app01'@'localhost' USING 'app'@'localhost';
刪除角色:
DROP ROLE ? 角色[,角色,…];
示例:刪除角色app和ops。
DROP ROLE 'app'@'localhost','ops'@'localhost';