數(shù)據(jù)安全的最重要措施就是數(shù)據(jù)庫賬號的權(quán)限管理,通常情況下數(shù)據(jù)庫賬號會分配給應(yīng)用程序、開發(fā)人員以及數(shù)據(jù)庫管理員(DBA),還有可能分配給其他需要利用數(shù)據(jù)進行分析的非技術(shù)人員。
數(shù)據(jù)庫權(quán)限
數(shù)據(jù)庫權(quán)限主要是以用戶可以允許執(zhí)行的SQL語句來劃分,SQL語言可以分為四類操作:數(shù)據(jù)查詢語言DQL,數(shù)據(jù)操縱語言DML,數(shù)據(jù)定義語言DDL,數(shù)據(jù)控制語言DCL。
非技術(shù)人員通常只能使用DQL語句,這也是權(quán)限最低的SQL操作。數(shù)據(jù)查詢語言的基本結(jié)構(gòu)是由SELECT子句、FROM子句WHERE子句構(gòu)成。
SELECT <字段名表> FROM <表或視圖名> WHERE <查詢條件>
現(xiàn)在很多數(shù)據(jù)分析人員,都可以熟練使用SQL語言進行自定義查詢,不再需要技術(shù)人員開發(fā)報表功能。
開發(fā)人員的權(quán)限管理
對于一般開發(fā)人員的權(quán)限分配,除了DQL以外,還有DML,也就是要滿足增刪改查(CRUD)的需求。
以下語句就是分別為普通開發(fā)人員 zhangsan 分配 MySQL 數(shù)據(jù)庫的增刪改查權(quán)限,delete操作要慎重分配。
grantselecton testdb.* to zhangsan@’%’grantinserton testdb.* to zhangsan@’%’grantupdateon testdb.* to zhangsan@’%’grantdeleteon testdb.* to zhangsan@' %’
對于高級開發(fā)人員的權(quán)限分配,主要需要數(shù)據(jù)定義語言DDL,利用DDL語句來創(chuàng)建數(shù)據(jù)庫中的各種對象-----表(Table)、視圖(View)、索引(Index)等。這種操作通常需要由有經(jīng)驗的開發(fā)人員來完成。
以下語句實現(xiàn)了通過 grant 語句來分配創(chuàng)建、修改和刪除 MySQL 數(shù)據(jù)表結(jié)構(gòu)的權(quán)限。
grantcreateon testdb.* to lisi@’192.168.0.%’;grantalteron testdb.* to lisi@’192.168.0.%’;grantdropon testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 外鍵權(quán)限。
grantreferenceson testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 臨時表權(quán)限。
grantcreatetemporarytableson testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 索引權(quán)限。
grantindexon testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 視圖、查看視圖源代碼權(quán)限。
grantcreateviewon testdb.* to lisi@’192.168.0.%’;grantshowviewon testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 存儲過程、函數(shù)權(quán)限。
grantcreate routine on testdb.* to lisi@’192.168.0.%’; — now, can showprocedurestatusgrantalter routine on testdb.* to lisi@’192.168.0.%’; — now, you can drop a proceduregrantexecuteon testdb.* to lisi@’192.168.0.%’;
更高權(quán)限的分配
數(shù)據(jù)控制語言DCL用來授予或回收訪問數(shù)據(jù)庫的某種特權(quán),并控制數(shù)據(jù)庫操縱事務(wù)發(fā)生的時間及效果,對數(shù)據(jù)庫實行監(jiān)視等,通常這種特殊權(quán)限會分配給DBA使用。如:
以下語句將testdb的所有權(quán)限都分配給dba賬戶
grantallprivilegeson testdb to dba@’localhost’
其中,關(guān)鍵字 “privileges” 可以省略。
以下語句更厲害,將使得高級 DBA 獲得管理 MySQL 中所有數(shù)據(jù)庫的權(quán)限。
grantallon *.* to dba@’localhost’
權(quán)限的撤銷
使用revoke語句可以撤銷已經(jīng)賦予給 MySQL 用戶權(quán)限的權(quán)限。revoke 跟 grant 的語法差不多,只需要把關(guān)鍵字 “to” 換成 “from” 即可:
grantallon *.* to dba@localhost;revokeallon *.* from dba@localhost;
在使用grant 或 revoke語句分配或撤銷權(quán)限后,該用戶只有重新連接 MySQL 數(shù)據(jù)庫,新的權(quán)限才能生效。
總結(jié)
在數(shù)據(jù)庫權(quán)限分配和管理中,應(yīng)當嚴格區(qū)分賬戶的用途,并按照最小可用原則分配對應(yīng)的權(quán)限。當賬戶不再使用以后,應(yīng)當立即收回權(quán)限。