1. 程式人生 > >28.Mysql權限與安全

28.Mysql權限與安全

範圍 alter 3.5 安全設置 oca 問題 命令 訪問 閾值

28.Mysql權限與安全
28.1 Mysql權限管理
28.1.1 權限系統的工作原理
對連接的用戶進行身份認證,合法的用戶通過認證,不合法的用戶拒絕連接;
對通過認證的合法用戶賦予相應的權限,用戶可以在取得的權限範圍內對數據庫做相應的操作。
身份認證在user表中包括三個屬性:host、user、password。
Mysql權限表在啟動時就已加載在內存中,通過身份認證的用戶直接在內存中存取權限表。

28.1.2 賬戶管理
1.創建賬戶
語法:
create user user_name identified by ‘password‘;
例子:
create user user_1 identified by ‘123456‘;

select * from user;
-- 授予登錄權限
grant usage on *.* to ‘user_1‘@‘%‘;
2.修改賬戶[密碼]
命令行方式:
# mysqladmin -h host_name -u user_name password "newpwd"
SQL方式:
mysql> set password for ‘user_name‘@‘host_name‘=password(‘newpwd‘);
SQL方式修改自身密碼:
mysql> set password=password(‘newpwd‘);
直接修改user表的方式:
mysql> update user set password=password(‘newpwd‘) where host=‘host_name‘ and user=‘user_name‘;
3.刪除賬戶
drop user user_name[,...];

28.1.3 權限管理
1.權限表按範圍分為4級:
user 全局級權限(物理數據庫級)
db 邏輯數據庫級權限(對應其它數據庫的模式級)
tables_priv 表級權限
columns_priv 列級權限
權限獲取順序為:user-->db-->tables_priv-->columns_priv
即當上一級沒有該權限時才向下一級獲取,範圍更大的權限覆蓋範圍小的權限。
2.權限的種類分為25種:
select_priv 查詢權限
insert_priv 新增權限
update_priv 修改權限

delete_priv 刪除權限
index_priv 索引權限(create、alter、drop索引的權限)
alter_priv 修改表權限
create_priv 創建表權限
drop_priv 刪除表權限
grant_priv 授權的權限
create_view_priv 視圖權限(create、alter、drop視圖的權限)
show_view_priv 查看視圖的權限
create_routine_priv 存儲過程和函數的創建權限(create、alter、drop視圖的權限)
alter_routine_priv 存儲過程和函數的修改、刪除權限(create、alter、drop視圖的權限)
references_priv
reload_priv
shutdown_priv
process_priv
file_priv
show_db_priv
super_priv
create_tmp_table_priv
lock_tables_priv
execute_priv
repl_slave_priv
repl_client_priv
usage 登錄權限
all privileges 上述所有權限的統稱(不包括grant_priv,grant_priv由with grant option選項決定)
3.查看賬戶權限
show grants for user@host;
或者
select * from user;
select * from db;
select * from information_schema.schema_privileges where grantee="user@host";
select * from tables_priv;
select * from columns_priv;

4.授權
語法:
grant 權限 on [對象類型] {範圍和對象} to user@host[,...] with grant option;
說明:
權限 上述的25種權限及統稱all privileges。
對象類型 分為table、function、procedure,默認為table,給函數或存儲過程單獨授權時需指定對象類型(function、procedure)。
範圍和對象 指授權的客體,即將某個對象或某個範圍內的所有對象的權限授出。
全局級(user表)用*.*表示,*.*即所有數據庫的所有對象,該權限存儲於user表;
數據庫級(db表)用db_name.*表示,db_name.*即db_name數據庫的所有對象,該權限存儲於db表;
表級(tables_priv表)用db_name.tab_name表示,db_name.tab_name即db_name數據庫的tab_name表,該權限存儲於tables_priv表;
列級(columns_priv表)用db_name.tab_name.col_name表示,db_name.tab_name.col_name即db_name數據庫的tab_name表的col_name列,該權限存儲於columns_priv表。
user@host 指授權的主體,即授給誰。user表示用戶,host表示用戶的登錄地址。
with grant option 表示用戶能否將獲得的權限進行轉授,轉授功能對應grant_priv權限。
例子1:給用戶user_1授scott.emp.sal列的select權限。
創建用戶test
create user user_1@localhost indetifyde by ‘liwei‘;
grant select on scott.emp.sal to user_1@localhost;
select * from columns_priv;
例子2:給用戶user_1授scott.emp表的select權限。
grant select on scott.emp to user_1@localhost;
select * from tables_priv;
例子3:給用戶user_1授scott數據庫的select權限。
grant select on scott.* to user_1@localhost;
select * from db;
例子4:給用戶user_1授所有對象的select權限。
grant select on *.* to user_1@localhost;
select * from user;
例子4:給用戶user_1授所有對象的select權限,並允許其轉授權。
grant select on *.* to user_1@localhost with grant option;
select * from user;

5.回收權限
語法:
revoke 權限 on 模式.對象 from 用戶@host;

6.賬戶限制(不建議設置)
賬戶限制指限制某個賬戶訪問,當超過user中max_questions、max_updates、max_connections、max_user_connections四個列設置的閾值時將提示資源不足。
語法:
grant ... with option;
option包括下面4個選項:
max_queries_per_hour count:每小時最大查詢次數,對應max_questions列設置;
max_updates_per_hour count:每小時最大更新次數,對應max_updates列設置;
max_connections_per_hour count:每小時最大連接次數,對應max_connections列設置;
max_user_connections count:最大用戶連接次數,對應max_user_connections列設置;
例子:


28.2 mysql安全問題
28.2.1 操作系統相關的安全問題
28.2.2 數據庫相關的安全問題
28.3 其他安全設置選項
28.3.1 old-passwords
28.3.2 safe-user-create
28.3.3 secure-auth
28.3.4 skip-grant-tables
28.3.5 skip-network
28.3.6 skip-show-database
28.4 小結

28.Mysql權限與安全