云安全:數據庫權限的分配與回收
數據庫權限
數據庫權限主要是以用戶可以允許執行的SQL語句來劃分,SQL語言可以分為四類操作:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。
非技術人員通常只能使用DQL語句,這也是權限最低的SQL操作。數據查詢語言的基本結構是由SELECT子句、FROM子句WHERE子句構成。
SELECT <字段名表> FROM <表或視圖名> WHERE <查詢條件>
現在很多數據分析人員,都可以熟練使用SQL語言進行自定義查詢,不再需要技術人員開發報表功能。
開發人員的權限管理
對于一般開發人員的權限分配,除了DQL以外,還有DML,也就是要滿足增刪改查(CRUD)的需求。
以下語句就是分別為普通開發人員 zhangsan 分配 MySQL 數據庫的增刪改查權限,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@' %’
對于高級開發人員的權限分配,主要需要數據定義語言DDL,利用DDL語句來創建數據庫中的各種對象-----表(Table)、視圖(View)、索引(Index)等。這種操作通常需要由有經驗的開發人員來完成。
以下語句實現了通過 grant 語句來分配創建、修改和刪除 MySQL 數據表結構的權限。
- 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.%’;
分配創建 MySQL 外鍵權限。
- grant references on testdb.* to lisi@’192.168.0.%’;
分配創建 MySQL 臨時表權限。
- grant create temporary tables on testdb.* to lisi@’192.168.0.%’;
分配創建 MySQL 索引權限。
- grant index on testdb.* to lisi@’192.168.0.%’;
分配創建 MySQL 視圖、查看視圖源代碼權限。
- grant create view on testdb.* to lisi@’192.168.0.%’;
- grant show view on testdb.* to lisi@’192.168.0.%’;
分配創建 MySQL 存儲過程、函數權限。
- 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.%’;
更高權限的分配
數據控制語言DCL用來授予或回收訪問數據庫的某種特權,并控制數據庫操縱事務發生的時間及效果,對數據庫實行監視等,通常這種特殊權限會分配給DBA使用。如:
- GRANT:授權。
- ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點。回滾命令使數據庫狀態回到上次最后提交的狀態。
- COMMIT [WORK]:提交。
以下語句將testdb的所有權限都分配給dba賬戶
- grant all privileges on testdb to dba@’localhost’
其中,關鍵字 “privileges” 可以省略。
以下語句更厲害,將使得高級 DBA 獲得管理 MySQL 中所有數據庫的權限。
- grant all on *.* to dba@’localhost’
權限的撤銷
使用revoke語句可以撤銷已經賦予給 MySQL 用戶權限的權限。revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:
- grant all on *.* to dba@localhost;
- revoke all on *.* from dba@localhost;
在使用grant 或 revoke語句分配或撤銷權限后,該用戶只有重新連接 MySQL 數據庫,新的權限才能生效。
總結
在數據庫權限分配和管理中,應當嚴格區分賬戶的用途,并按照最小可用原則分配對應的權限。當賬戶不再使用以后,應當立即收回權限。