摘? 要:信息系統(tǒng)工程領域對數據安全的要求比較高,MySQL數據庫管理系統(tǒng)普遍應用于各種信息系統(tǒng)應用軟件的開發(fā)之中,而角色與權限設計不僅關乎數據庫中數據保密性的性能高低,也關系到用戶使用數據庫的最低要求。在對數據庫的安全性進行設計時,為了保證數據的安全性和可靠性,提出通過設置角色和權限實現對數據的安全訪問,然后通過編寫代碼進行實驗,以驗證此方式解決數據庫中數據安全問題的有效性。
關鍵詞:數據安全;應用設計;MySQL
中圖分類號:TP311.1? 文獻標識碼:A? 文章編號:2096-4706(2023)12-0151-04
Design of Data Security Application Based on MySQL Database
LI Yanjie
(School of Information Engineering, Shandong Huayu University of Technology, Dezhou? 253034, China)
Abstract: The field of information system engineering has high requirements for data security. MySQL database management system is widely used in the development of various information system application software, and the design of roles and permissions is not only related to the performance of data confidentiality in the database, but also to the minimum requirements for users to use the database. When designing the security of the database, in order to ensure the security and reliability of the data, it is proposed to set roles and permissions to achieve secure access to the data. Then, code is written for experiments to verify the effectiveness of this method in solving security issues of data in the database.
Keywords: data security; application design; MySQL
0? 引? 言
在當今大數據時代,各行各業(yè)都離不開計算機信息技術,特別是利用信息系統(tǒng)應用軟件對業(yè)務進行處理,系統(tǒng)后臺會存放大量數據,這也使得數據變得越來越重要,而作為數據的主要存儲器之一的數據庫管理系統(tǒng)就承擔起了保護數據的重要角色。在開發(fā)信息系統(tǒng)過程中,對數據庫中數據的安全設計必須給予重視,才能提高數據的安全性。
目前主流的數據庫管理系統(tǒng)有Oracle、SQL Server、MySQL等,任何一個數據庫都要考慮數據安全方面的設計,此文以MySQL數據庫管理系統(tǒng)為例對數據安全進行論述,其中一類安全問題是指數據庫中敏感數據被多個合法用戶查詢獲取,在使用過程中發(fā)生泄密事故或惡意篡改,數據庫管理員需要追蹤和熟悉哪些用戶曾訪問數據以及這些用戶的訪問權限和操作,用于解決相關事故責任。
對數據庫中存放的關鍵數據,基本上都有保密要求,即限制部分用戶對數據的訪問,在訪問的過程中也會限制用戶的訪問權限,不同用戶根據角色的不同,管理員要設置不同的訪問權限,以保證數據庫中數據的安全。
1? 存放用戶賬戶的權限表
為了方便管理員管理用戶,需要為眾多用戶設置賬戶和訪問權限,同時為了方便管理,數據庫管理系統(tǒng)設置了重要的表存放賬戶和權限,在MySQL數據庫中與用戶及權限相關的表主要有4個,即user表、db表、tables_priv表和columns_priv表。
user表是最重要的表,包含用戶、權限、安全和資源控制4類共計42個字段,用戶包含用戶名、主機名和密碼。權限共計29個,以_priv結尾,例如update_priv等。針對user表,里面存放全局級的權限。
db表是非常重要的表之一,存放為用戶指定的某個或某些數據庫的操作權限。僅存放用戶名、主機名及權限。針對db表,里面存放數據庫級的權限。
tables_priv表,用于存放固定數據庫下的一個表和多個表的用戶和用戶權限信息。
columns_priv表,用于存放固定數據庫下固定表的一列或多列的用戶和用戶權限信息。
4個表均存放用戶和權限,具體區(qū)別見如表1所示。
2? 賬戶和賬戶權限設計
在MySQL數據庫管理系統(tǒng)下,賬戶的創(chuàng)建和驗證與其他數據庫管理系統(tǒng)有所不同,在單機系統(tǒng)中,為了能夠進行驗證,數據庫設計時,需要在Windows命令行下登錄才能夠進行驗證。
2.1? 從Windows命令行登錄到MySQL數據庫中
登錄過程如下:開始—運行—輸入cmd,進入Windows命令行--輸入參數,即登錄命令(MySQL–u 用戶名–h 主機名–p密碼),第一次登錄創(chuàng)建用戶賬戶需要超級管理員root用戶進行登錄。
注意事項:登錄命令如果執(zhí)行,必須切換到MySQL的安裝文件bin目錄下,因為很多用戶在安裝MySQL時,并沒有配置path變量,此時,Windows命令行無法識別命名,所以無法執(zhí)行。例如C:\Users\Administrator>mysql -u root -h localhost–p,錯誤提示:“mysql”不是內部或外部命令,也不是可運行的程序或批處理文件。
另外,如果MySQL服務器未開啟,也會顯示命令無效,所以也必須保證數據庫服務器處于開啟的狀態(tài)。下面是以超級管理員進入MySQL數據庫管理系統(tǒng),在第一次創(chuàng)建用戶的時候,僅有root超級管理員才有權限創(chuàng)建其他用戶,輸入密碼便可以登錄到MySQL數據庫命令行。登錄過程如圖1所示。
輸入密碼,即可進入MySQL命令行。代碼為:
c:\wamp\bin\mysql\mysql5.5.24\bin>mysql -u root -h localhost -p
Enter password:--此處輸入密碼,后面出現MySQL的歡迎界面和連接所花費的時間等。
mysql>--最終以此命令符出現,此時光標會在mysql>后面停留,等待輸入命令。
2.2? 創(chuàng)建用戶并賦予權限
在MySQL數據庫管理系統(tǒng)下,在此建立一個數據庫b和數據庫a,在數據庫b下建立一個數據表book,并在book數據表中設計一個整型字段bid代表圖書編號,可以輸入一條記錄為1,為了進行驗證,再建立一個book2數據表,字段和記錄可以隨意設計,在此利用簡單的數據表展示創(chuàng)建用戶賬戶并賦予權限的過程。部分代碼為:
Create database a;
Create database b;
create table book(bidint);
insert into book values(1);
create table book2(bidint,bname char(4));
下面設計第一個用戶a1,密碼為:test1,此用戶的權限設計為僅能操作數據庫b,利用如下格式設計代碼,即利用grant創(chuàng)建新用戶,并賦予權限,語法規(guī)則:Grant權限類型 on 數據庫.數據表 to 用戶名@主機名 identified by password[,user@host identified by password][with grant option]。注意:權限類型表示賦予用戶的權限類型(例如:select、alter、reload、excute、event等),數據庫.數據表代表權限的級別,一個*代表當前數據庫中的所有表,*.*代表所有數據庫下的所有表,db_name.*代表固定數據庫中的所有表,db_name.tbl_name代表固定數據庫中的固定表和視圖,db_name.routine_name代表固定數據庫中的固定存儲過程和函數,user@host代表用戶名和主機名,password代表密碼,而[with grant option] ]則代表該用戶可以對其他用戶賦予權限,其他命令為固定寫法。此代碼為:
grant all on b.* to'a1'@'localhost'identified by'test1';
具體代碼即執(zhí)行過程如圖2所示。
下面設計第二個用戶a2,密碼為:test2,設計權限為僅能查看數據庫b下的book表,此代碼為:
grant select on b.book to'a2'@'localhost'identified by'test2';
具體代碼即執(zhí)行過程如圖3所示。
3? 驗證用戶權限是否有作用
驗證用戶是否具有對數據的訪問權限,也必須打開Windows命令行,以此用戶登錄和密碼登錄到數據庫管理系統(tǒng),在進行驗證之前,必須退出超級管理員的界面,重新進入,退出過程可以使用代碼quit,下面驗證第一個用戶的權限。登錄過程如圖4所示。
用戶a1僅能訪問b數據庫,不能訪問a數據庫,下面是驗證過程,通過下面的驗證可以看出,用戶a1對數據庫a的訪問權限受到限制,當訪問數據庫a的時候,如圖5中的錯誤提示代表針對用戶a1訪問被拒絕,但可以訪問數據庫b,從而保證數據的安全性。
同理驗證第二個用戶a2,以第二個用戶登錄,第二個用戶可以查詢數據庫b下的book表信息,但不能查詢book2數據表信息,因為沒有權限,通過此代碼:ERROR 1142 (42000): SELECT command denied to user 'a2'@'localhost' for table 'book2'實驗得出,用戶a2的訪問被拒絕,從而得出每個用戶必須在自己權限范圍內訪問數據。如圖6所示。
4? 用戶賬戶在權限表中的體現
根據前面提到的權限表,所有用戶賬戶均存放在user表中,不管是否具有權限,并且權限在user表中的沒有任何權限。通過查詢select_priv字段可以得出全部為N,代表沒有權限。代碼如下:
mysql> select user,password,select_priv from mysql.user;
查詢后在MySQL命令行中的顯示結構如下:
不同權限的用戶名和權限存放在不同的表中。由于為用戶a1指定了僅能訪問固定數據庫a,具有對數據庫訪問的所有權限,以db、select_priv等字段顯示為例,結果為Y,代表具有查詢等所有權限。所以屬于數據庫級別的權限,應該存放在db表中。如圖7所示。
由于為用戶a2指定了僅能查詢固定數據庫b下的固定數據表book,具體到某個固定的數據表,所以屬于表級別的權限,用戶a2應該存放在tables_priv表中,以user、db、table_name、table_priv字段顯示為例,體現了用戶、數據庫、數據表和權限,代碼為:
mysql> select user,db,table_name,table_priv from mysql.tables_priv where user='a2';
+------+----+--------------+-------------+
| user? | db? | table_name | table_priv |
+------+----+--------------+-------------+
| a2? ? ?| b? ? | book? ? ? ? ? ?| Select? ? ? ? |
5? 結? 論
本文以MySQL數據庫為例,結合數據庫中對用戶賬戶和權限的應用,設計了兩個用戶和用戶的權限,通過實驗結論得出設計的用戶權限在用戶訪問數據的時候受到了限制,管理員可以根據權限表對用戶賬戶和權限進行管理,并根據實際需求對用戶的權限進行轉移或撤銷,進而保證數據的安全。
參考文獻:
[1] 黃劉松,張飛,張學鋒,等.基于網閘的異構數據庫安全同步系統(tǒng) [J].大理大學學報,2022,7(12):25-30.
[2] 林加華,李志虹,姜華.一種基于安全散列加密算法的數據庫操作痕跡可證明追蹤算法 [J].現代計算機,2022,28(22):42-46.
[3] 王思君.信息管理中計算機數據庫技術的應用研究 [J].信息與電腦:理論版,2022,34(7):210-212.
[4] 田波.大數據背景下的數據安全分析 [J].網絡安全技術與應用,2021(8):58-59.
[5] 劉秀梅.基于MySQL數據庫安全的實驗教學系統(tǒng)的設計與實現 [D].北京:北京郵電大學,2017.
[6] 林森.企業(yè)信息管理系統(tǒng)數據庫安全控制策略分析 [J].中國管理信息化,2021,24(8):120-121.
作者簡介:李艷杰(1978—),女,漢族,山東德州人,副教授,碩士,主要研究方向:數據挖掘技術。