1. 概述
數(shù)據(jù)庫可以單獨創(chuàng)建用戶兔毒,而不使用登陸主機系統(tǒng)的賬號,同時,可以對所創(chuàng)建的用戶進行權限管理,實現(xiàn)了系統(tǒng)安全
權限管理中变秦,屬于DCL:Data Control Language 數(shù)據(jù)控制語言刘绣,關鍵字:GRANT:授權 和 REVOKE:取消權限
2 用戶管理
用戶賬號
.用戶賬號:'user'@'host'
user:用戶名
host:允許用戶通過哪些主機遠程連接mysqld服務
IP福贞、網(wǎng)絡地址恋技、主機名、通配符(%和_)
mysql可以限定從哪個主機發(fā)起連接
主機名如果寫出主機名刁赖,而不是ip搁痛,那么網(wǎng)絡中就要有dns能將主機名解析為ip长搀,否則連接會失敗
如授權是192.168.1.%的ip段宇弛,連接時host是www.magedu.com,如果被解析為192.168.1.100源请,那么就可以連接該數(shù)據(jù)庫枪芒,事實上192.168.1.100這個ip的主機名不用是固定,只需要能被解析為192.168.1.100就可以
2.1 創(chuàng)建用戶
CREATE USER'username'@'host' [IDENTIFIED BY 'password'];
用戶名是有用戶名+主機名(或者ip)組合成一個用戶名
這樣的效果是組合驗證谁尸,有限制的作用舅踪,某個用戶只能在指定的用戶名或者是指定的ip才能訪問數(shù)據(jù)庫
create usersunny@'172.18.50.%' identified by 'Pass123456';
在其他機器上連接,命令如下
mysql -usunny -pPass1234-h172.18.50.73;
創(chuàng)建完賬號后良蛮,要給賬號賦予權限抽碌,才能訪問對應的表
在服務器上,授權用戶sunny對數(shù)據(jù)庫服務器里的sunny這個庫具有所有的權限
grant all on sunny.* tosunny@'172.18.50.%';
授權sunny具有管理所有庫的權限
grant all on *.* tosunny@'172.18.50.%';
多了identify這個關鍵字决瞳,在授權的時候同時創(chuàng)建賬號
grant select,update on sunny.* tojack@'192.168.32.%' identified by "Pass123456";
.查看當前用戶:
SELECT user();
.查看用戶:這個命令需要在mysql庫里查看货徙,因為user這張表是建在mysql庫里,use mysql;
SELECT User,Host,PasswordFROM user;
2.2 刪除用戶
DROP USER? 'username'@'host';
示例:刪除默認的空用戶
DROP USER ''@'localhost';
例子
drop user jack@"192.168.32.%";
2.3 更改口令
1)SET PASSWORD FOR'user'@'host' = PASSWORD(‘password');
PASSWORD(‘password')改口令皮胡,=
PASSWORD(‘password')這個函數(shù)主要是用來給密碼進行加密痴颊;建議用這個方法執(zhí)行更改密碼的操作。
例子屡贺,注意密碼也要用引號引起來蠢棱,馬上生效,客戶端只要推出重新登陸就要用新密碼登陸
set password for"sunny"@"192.168.32.%" = password("Pass123456");
2) UPDATE user SETpassword=PASSWORD('magedu') WHERE User='root' ;
注意:上面修改表的命令不會馬上生效甩栈,客戶端退出重新登陸也還是要用舊密碼泻仙,需要在服務器端執(zhí)行:FLUSH PRIVILEGES生效
這個命令不一定都要執(zhí)行,有些時候會馬上生效量没,如果授權后玉转,而且刷新權限后還不生效,就退出重新登錄就會生效
3)/usr/local/mysql/bin/mysqladmin-u root–poldpasswordpassword 'newpassword‘
另外允蜈,linux下破解密碼最暴力的是清掉mysql這個目錄冤吨,但是也會把mysql目錄下的表都刪掉,不建議這么破解賬號
windows下忘記root密碼的時候饶套,破解密碼
1.關閉正在運行的MySQL服務漩蟆。
2.打開DOS窗口,轉到mysql\bin目錄妓蛮。
3.輸入mysqld
--skip-grant-tables回車怠李。--skip-grant-tables的意思是啟動MySQL服務的時候跳過權限表認證。
4.再開一個DOS窗口(因為剛才那個DOS窗口已經不能動了),轉到mysql\bin目錄捺癞。
5.輸入mysql回車夷蚊,如果成功,將出現(xiàn)MySQL提示符>髓介。
6.連接權限數(shù)據(jù)庫:use mysql;惕鼓。
6.改密碼:update
user set password=password("123") where user="root";(別忘了最后加分號)。
7.刷新權限(必須步驟):flush privileges;唐础。
8.退出quit箱歧。
9.注銷系統(tǒng),再進入一膨,使用用戶名root和剛才設置的新密碼123登錄呀邢。
源文檔<http://www.jb51.net/article/39454.htm>
3? 權限管理
3.1? 授權
.權限級別:管理權限、數(shù)據(jù)庫豹绪、表价淌、字段、存儲例程
.Help GRANT
.GRANT priv_type,... ON [object_type]db_name.tb_nameTO 'user'@'host'[IDENTIFIED BY 'password'] [WITH GRANT OPTION];
[IDENTIFIED BY 'password']的命令不僅授權瞒津,而且如果賬號不存在蝉衣,會直接新生成不存在的賬號
WITH GRANT OPTION該賬號可以把自己的權限授權給別的賬號,一般不這么操作
priv_type: ALL[PRIVILEGES]
db_name.tb_name:
*.*:所有庫的所表
db_name.*:指定庫的所有表
db_name.tb_name:指定庫的指定表
db_name.routine_name:指定庫的存儲過程和函數(shù)
.示例:
GRANT SELECT,DELETE ontestdb.* TO 'testuser'@'%'IDENTIFIED BY 'testpass‘;
授權后如果新密碼不生效仲智,用命令:flush privileges;進行生效
以下命令授權sunny這個用戶在任何機器上都可以登陸买乃,而且對sunny這個數(shù)據(jù)的所有表具有select和update的權限
grant select,update onsunny.* to sunny@'%' identified by "Pass123456";
以下命令把數(shù)據(jù)庫sunny的所有表格都授予root@192.168.25.%這個賬號
grant all on sunny.* to root@“192.168.25.%”;
.查看指定用戶獲得的授權:
Help SHOW GRANTS
SHOW GRANTS FOR
'user'@'host';查看指定用戶的授權
SHOW GRANTS FORCURRENT_USER[()];
查看當前用戶的所有授權
show grants forcurrent_user();
3.2 回收授權
注意,需要先查看以下到底授權了哪些钓辆,這對授權進行回收剪验,沒有授權,回收不了前联,如原來授權了sunny.*,現(xiàn)在要回收sunny.f2只回收一張表的權限功戚,就不允許的
REVOKE priv_type, ... ONdb_name.tb_nameFROM 'user'@'host
例子
revoke update on sunny.* fromjack@"%";
REVOKE DELETE ON testdb.*FROM 'testuser'@'%‘
.注意:MariaDB服務進程啟動時會讀取mysql庫中所有授權表至內存
(1) GRANT或REVOKE等執(zhí)行權限操作會保存于系統(tǒng)表中,MariaDB的服務進程通常會自動重讀授權表似嗤,使之生效
(2)對于不能夠或不能及時重讀授權表的命令啸臀,可手動讓MariaDB的服務進程重讀授權表:mysql> FLUSH PRIVILEGES;
?