云安全:數(shù)據(jù)庫權(quán)限的分配與回收
數(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語言進(jìn)行自定義查詢,不再需要技術(shù)人員開發(fā)報(bào)表功能。
開發(fā)人員的權(quán)限管理
對(duì)于一般開發(fā)人員的權(quán)限分配,除了DQL以外,還有DML,也就是要滿足增刪改查(CRUD)的需求。
以下語句就是分別為普通開發(fā)人員 zhangsan 分配 MySQL 數(shù)據(jù)庫的增刪改查權(quán)限,delete操作要慎重分配。
- grant select on testdb.* to zhangsan@’%’
- grant insert on testdb.* to zhangsan@’%’
- grant update on testdb.* to zhangsan@’%’
- grant delete on testdb.* to zhangsan@' %’
對(duì)于高級(jí)開發(fā)人員的權(quán)限分配,主要需要數(shù)據(jù)定義語言DDL,利用DDL語句來創(chuàng)建數(shù)據(jù)庫中的各種對(duì)象-----表(Table)、視圖(View)、索引(Index)等。這種操作通常需要由有經(jīng)驗(yàn)的開發(fā)人員來完成。
以下語句實(shí)現(xiàn)了通過 grant 語句來分配創(chuàng)建、修改和刪除 MySQL 數(shù)據(jù)表結(jié)構(gòu)的權(quán)限。
- grant create on testdb.* to lisi@’192.168.0.%’;
- grant alter on testdb.* to lisi@’192.168.0.%’;
- grant drop on testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 外鍵權(quán)限。
- grant references on testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 臨時(shí)表權(quán)限。
- grant create temporary tables on testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 索引權(quán)限。
- grant index on testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 視圖、查看視圖源代碼權(quán)限。
- grant create view on testdb.* to lisi@’192.168.0.%’;
- grant show view on testdb.* to lisi@’192.168.0.%’;
分配創(chuàng)建 MySQL 存儲(chǔ)過程、函數(shù)權(quán)限。
- grant create routine on testdb.* to lisi@’192.168.0.%’; — now, can show procedure status
- grant alter routine on testdb.* to lisi@’192.168.0.%’; — now, you can drop a procedure
- grant execute on testdb.* to lisi@’192.168.0.%’;
更高權(quán)限的分配
數(shù)據(jù)控制語言DCL用來授予或回收訪問數(shù)據(jù)庫的某種特權(quán),并控制數(shù)據(jù)庫操縱事務(wù)發(fā)生的時(shí)間及效果,對(duì)數(shù)據(jù)庫實(shí)行監(jiān)視等,通常這種特殊權(quán)限會(huì)分配給DBA使用。如:
- GRANT:授權(quán)。
- ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點(diǎn)。回滾命令使數(shù)據(jù)庫狀態(tài)回到上次最后提交的狀態(tài)。
- COMMIT [WORK]:提交。
以下語句將testdb的所有權(quán)限都分配給dba賬戶
- grant all privileges on testdb to dba@’localhost’
其中,關(guān)鍵字 “privileges” 可以省略。
以下語句更厲害,將使得高級(jí) DBA 獲得管理 MySQL 中所有數(shù)據(jù)庫的權(quán)限。
- grant all on *.* to dba@’localhost’
權(quán)限的撤銷
使用revoke語句可以撤銷已經(jīng)賦予給 MySQL 用戶權(quán)限的權(quán)限。revoke 跟 grant 的語法差不多,只需要把關(guān)鍵字 “to” 換成 “from” 即可:
- grant all on *.* to dba@localhost;
- revoke all on *.* from dba@localhost;
在使用grant 或 revoke語句分配或撤銷權(quán)限后,該用戶只有重新連接 MySQL 數(shù)據(jù)庫,新的權(quán)限才能生效。
總結(jié)
在數(shù)據(jù)庫權(quán)限分配和管理中,應(yīng)當(dāng)嚴(yán)格區(qū)分賬戶的用途,并按照最小可用原則分配對(duì)應(yīng)的權(quán)限。當(dāng)賬戶不再使用以后,應(yīng)當(dāng)立即收回權(quán)限。