1、受權語法格式
grant 權限列表 on 數據庫名.表名 to '用戶名'@'客戶端主機' [identified by '密碼'];mysql
單詞: privileges [ˈprivilidʒz] 權限
單詞: identified [aɪ'dentɪfaɪd] 認出( identify的過去式和過去分詞 ),身份驗證 web
@ 權限列表:
all 全部權限(不包括受權權限)
select,update 查詢,更新權限
select(name,address) 只查詢name,address字段的權限
create create權限sql
@ 數據庫.表名:
*.* 全部庫下的全部表
web.* web庫下的全部表
web.stu_info web庫下的stu_info表數據庫
@ 客戶端主機:
% 全部主機
192.168.2.168 主機
192.168.2.% 192.168.2.0網段的全部主機服務器
2、登陸MySQL主(master)數據庫服務器
1.直接登陸到主機的某個數據庫中(如:zyyshop數據庫)
[root@CentOS5 ~]# /usr/local/mysql/bin/mysql -uroot -p123456 zyyshop
mysql>ide
2.登陸主機:隱式輸入密碼,進入以後再選擇數據庫
[root@CentOS5 ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password:
mysql> use zyyshop測試
3、用戶受權
1.向主(master)數據庫建立受權用戶slave1,使之可由從任何主機(%)登陸到主(master)服務器it
mysql> grant all on *.* to 'slave1'@'%' identified by '123';
@ 權限列表: all 全部權限(其中,關鍵字 「privileges」 能夠省略)
@ 數據庫.表名:*.* 全部庫的全部表
@ 受權用戶: slave1
@ 客戶端主機: % 全部主機
@ 登陸密碼: 123io
2.向主(master)數據庫建立受權用戶slave2,使之可由從主機(192.168.137.%)登陸到主(master)服務器:ast
mysql> grant select(name,classid),insert on zyyshop.stu to 'slave2'@'192.168.137.%' identified by '456';
@ 權限列表: select(name,classid),insert
@ 數據庫.表名:zyyshop.stu 即zyyshop數據庫的stu表
@ 受權用戶: slave2
@ 客戶端主機: 192.168.137.0網段的全部主機
@ 登陸密碼: 456
3.向主(master)數據庫建立受權用戶slave3,使之可由從主機(192.168.137.202)登陸到主(master)服務器:
mysql> grant all on zyyshop.stu to 'slave3'@'192.168.137.202' identified by '789';
@ 權限列表: all 全部權限
@ 數據庫.表名:zyyshop.stu 即zyyshop數據庫的stu表
@ 受權用戶: slave3
@ 客戶端主機: 192.168.137.202
@ 登陸密碼: 789
4.刷新受權表
mysql> flush privileges;
總結: 1.不要使用系統自帶的test數據庫作實驗,這是個開放測試庫對權限設置一般不起做用致實驗不成功,應該本身創建一個庫。
2.對用戶受權以後,會在mysql數據庫的 mysql.user 表裏存儲當前用戶信息;在 mysql.columns_priv 表裏存儲詳細的權限字段;
3.grant, revoke 用戶權限調整後,若是發現沒有生效可嘗試從新鏈接並登陸MySQL主機。
4.若是想讓被受權的用戶能夠將「得到的權限」也授予其餘用戶,須要加選項 「with grant option」(一般不多這樣用,通常是DBA自個搞定受權)
@ user1還能夠將得到的 testdb.stu 的 select,update 權限受權其它用戶
mysql> grant select,update on testdb.stu to 'user1'@'localhost' with grant option;
4、客戶端登陸
# /usr/local/mysql/bin/mysql -uslave3 -p789 -h192.168.137.201 zyyshop
@ 用戶名: slave3
@ 密碼: 789
@ 主服務器地址: 192.168.137.201
@ 數據庫名: zyyshop
5、查看權限
1.用戶遠程用戶登陸後,查看本身當前的權限(只能查看本身的權限):
mysql> show grants;
2.主(master)數據庫的管理員DBA,查看系統中任一用戶的權限列表(DBA用的操做命令)
@ 查看slave2用戶的權限狀況:
mysql> show grants for 'slave3'@'192.168.137.202';
6、收回權限
格式:revoke {權限列表} on {數據庫名} from '用戶名'@'客戶端主機'
mysql> revoke all on *.* from 'slave1'@'%'; //收回 slave1 全部權限
mysql> revoke select(classid) on zyyshop.stu from 'slave2'@'192.168.137.%'; //收回 slave2 對stu表classid的查詢權限
注: 1.權限收回以後,但對應的用戶仍然存在於mysql.user表中;
2.若是隻刪除用戶,不會刪除用戶的權限,權限記錄仍存於msyql.columns_priv表中;
mysql> delete from mysql.user where user='slave3' and host='192.168.137.202'; //從用戶表中刪除
mysql> delete from msyql.columns_priv where user='slave3'; //從字段權限明細表中刪除
7、修改密碼
@ 用戶本身修改本身的密碼
mysql> set password=password('123456');
@ DBA管理員爲用戶修改密碼1:
mysql> set password for 'slave3'@'192.168.137.202' = password('123');
@ DBA管理員爲用戶修改密碼2:
mysql> update mysql.user set password = password('123') where host='192.168.137.202' and user='slave1';
刷新受權表: mysql> flush privileges;