為了保證資料庫中的業務數據不被非授權的用戶非法竊取,需要對資料庫的訪問者進行各種限制,而資料庫安全性控制措施主要有這三種,第一種用戶身份鑒別,手段可以是口令,磁卡,指紋等技術,只有擁有合法身份的人才可以進入資料庫。第二種存取許可權控制,不同角色,對資料庫的存取許可權是不同的,必須為每一個角色設置其訪問的... ...
資料庫許可權的意義:
為了保證資料庫中的業務數據不被非授權的用戶非法竊取,需要對資料庫的訪問者進行各種限制,而資料庫安全性控制措施主要有這三種,第一種用戶身份鑒別,手段可以是口令,磁卡,指紋等技術,只有擁有合法身份的人才可以進入資料庫。第二種存取許可權控制,不同角色,對資料庫的存取許可權是不同的,必須為每一個角色設置其訪問的資料庫對象、許可權。第三種制定資料庫管理的管理制度,制度最終約束人的行為,通過制定相應的規章制度,可以保證在合適的時間、由合適的人對數據進行合適的操作。
mysql對用戶許可權的檢查分為兩個階段
1、是否可以與mysql伺服器建立鏈接
2、是否具有某些操作許可權(如:select update 等)
一、與mysql伺服器建立鏈接
mysql伺服器如何校驗用戶是否可以建立鏈接
1、驗證你從哪來 host
2、你是誰 user
3、密碼 password
鏈接mysql的方式:C:\Users\PC003>mysql -h192.168.6.223 -uroot -pjalja
參數解釋:-h:從何處要建立鏈接
-u:user
-p:密碼
mysql> select user,host,password from user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *CFAFE434FB0E5D64538901E668E1EACD077A54DF | | root | % | *CFAFE434FB0E5D64538901E668E1EACD077A54DF | +------+-----------+-------------------------------------------+
host=localhost表示可以使用預設主機進行鏈接(C:\Users\PC003>mysql -uroot -pjalja,C:\Users\PC003>mysql -hlocalhost -uroot -pjalja,C:\Users\PC003>mysql -h127.0.0.1 -uroot -pjalja)
host=%表示該伺服器可以與它所在一個區域網(公網)內的所有主機建立鏈接,該方式在生產環境中不安全
host=192.168.6.224表示該伺服器只能與192.168.6.224主機建立鏈接 C:\Users\PC003>mysql -h192.168.6.223 -uroot -pjalja
如何修改host:
mysql> update user set host='192.168.6.223' where user ='root'
mysql> flush privileges;刷新許可權(因為修改後數據是在記憶體中每次操作用戶許可權相關操作都要進行刷新)
修改密碼:
mysql> update user set password=password('111111') where user='root';
mysql> flush privileges;
二、mysql如何進行許可權檢查
mysql中有一個mysql庫該庫下user表檢查該用戶是否存在,db表檢查該用戶對哪些庫有哪些操作許可權,tables_priv表檢查該用戶對那些表有哪些操作許可權。
創建用戶並授權:
grant [許可權1,許可權2] on *.* to user@'host' identfied by 'password';
常用許可權:all,create,drop,insert,delete,update,select
例如:授予ls用戶所有庫所有表的所有許可權並可以從該區域網該網段任何主機登陸。
mysql> grant all on *.* to 'ls'@'192.168.6.%' identified by '111111';
使用該用戶登陸:C:\Users\PC003>mysql -h192.168.6.223 -uls -p111111;
查看ls用戶具體有哪些許可權:
mysql> select * from mysql.user where user='ls' \G; *************************** 1. row *************************** Host: 192.168.6.% User: ls Password: *FD571203974BA9AFE270FE62151AE967ECA5E0AA Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Reload_priv: Y Shutdown_priv: Y Process_priv: Y File_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Show_db_priv: Y Super_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Execute_priv: Y Repl_slave_priv: Y Repl_client_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Create_user_priv: Y Event_priv: Y Trigger_priv: Y Create_tablespace_priv: Y ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: authentication_string: NULL
許可權回收:收回ls的所有許可權
mysql> revoke all on *.* from ls@'192.168.6.%';
授權某個庫的許可權:
mysql> grant all on blog.* to ls@'192.168.6.%';授予ls用戶擁有blog資料庫的所有許可權。
這樣ls用戶在user表中沒有許可權,這時將進行db級別的許可權檢查
mysql> select * from mysql.db where user='ls' \G; *************************** 1. row *************************** Host: 192.168.6.% Db: blog User: ls Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Execute_priv: Y Event_priv: Y Trigger_priv: Y
回收ls用戶所有許可權並賦予某各表許可權:授予ls用戶blog庫中user表crud許可權
mysql> revoke all on *.* from ls@'192.168.6.%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> grant insert,update,select,delete on blog.user to ls@'192.168.6.%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
這樣ls用戶在db級別中沒有許可權,這時將進行tables_priv級別的許可權檢查:
mysql> select * from mysql.tables_priv where user='ls' \G; *************************** 1. row *************************** Host: 192.168.6.% Db: blog User: ls Table_name: user Grantor: root@localhost Timestamp: 2017-02-09 14:35:38 Table_priv: Select,Insert,Update,Delete Column_priv: 1 row in set (0.00 sec)
mysql許可權控制流程:
註意:mysql的許可權檢查可以精確到某列數據。