MySQL權限相關知識總結-老DBA經(jīng)驗分享

權限生效小知識

MySQL的授權用戶由兩部分組成:'用戶名'@'主機名/IP/IP段'

注意:包含特殊字符則必須加上引號

字符 含義
%和_ %代表所有主機县遣,'10.10.1.%'代表所有來自10.10.1網(wǎng)段的主機
域名 '%.mysql.com'代表來自mysql.com這個域名下的所有主機
localhost/127.0.0.1/::1 本機/ipv4/ipv6的本機地址
同一個用戶@IP IP是包含關系锈候,小范圍IP的權限生效
同一個用戶@IP 權限是包含關系讼积,最大范圍生效往毡,存在的權限都可以使用
dba@% 本地執(zhí)行[mysql -udba -p -P -h 本機IP地址]可以登錄赌渣;
所有賬號本地登錄都依賴sock文件 賬號有密碼情況下僅指定sock文件不能登錄晓淀;刪除sock文件使用賬號密碼本地登錄也會失敗怜瞒。
  • 執(zhí)行grant,revoke,setpassword,renameuser命令修改權限之后线罕,MySQL會自動將修改后的權限信息同步加載到系統(tǒng)內存中止潮;執(zhí)行insert/update/delete系統(tǒng)權限表之后,須執(zhí)行刷新權限命令才能同步系統(tǒng)內存中:flush privileges/mysqladmin flush-privileges/mysqladmin reload
  • 修改tables和columns級別權限钞楼,客戶端下次操作新權限就會生效
  • 修改database級別權限喇闸,新權限在客戶端執(zhí)行use database命令后生效
  • 修改global級別權限,需要重新創(chuàng)建連接新權限才能生效
  • --skip-grant-tables 可以跳過所有系統(tǒng)權限表允許所有用戶登錄,只在特殊情況下暫時使用

連接MySQL常見報錯問題

  • 網(wǎng)絡問題
can not connect to mysql server on 'xxxxx'
#檢查防火墻是否限制了MySQL的端口
#檢查MySQL服務是否關閉
#檢查selinux 是否強制
  • 權限表中有賬號沒地址
host 'xxxxx'  is not allowed to connect to this mysql server
  • 權限表中沒有賬號或密碼錯誤
Access denied for user 'dba'@'xx.xx.xx.x'
  • 權限表中沒有具體權限
'DROP' command denied to user 'dba'@'localhost' for table 'xxx';
Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

授權原則

  • 生產系統(tǒng)中MySQL用戶創(chuàng)建由DBA統(tǒng)一協(xié)調按需創(chuàng)建燃乍,DBA通常直接使用root用戶來管理數(shù)據(jù)庫唆樊;
  • 通常會創(chuàng)建指定業(yè)務數(shù)據(jù)庫上的增刪改查、臨時表刻蟹、執(zhí)行存儲過程的權限給應用程序來連接數(shù)據(jù)庫逗旁;
  • 通常會創(chuàng)建指定業(yè)務數(shù)據(jù)庫上的只讀權限給特定應用程序或某些高級別人員來查詢數(shù)據(jù),防止數(shù)據(jù)被修改舆瘪;
  • 修改mysql的端口片效,通過防火墻限制訪問mysql端口的ip
  • root賬號設置強密碼并指定只容許本地登錄,其他用戶設置強密碼并嚴格指定對應賬號的訪問ip
  • 如果需要記錄登錄信息英古,可以開啟查詢日志淀衣,查詢日志會記錄登錄和查詢語句
  • mysql進程運行賬號 :

linux : 新建mysql賬號,安裝時指定以mysql賬戶運行召调,給程序所在目錄讀取權限膨桥,data所在目錄讀取和寫入權限;
windows : 禁止使用local system運行mysql賬戶唠叛,新建帳號給mysql程序所在目錄讀取權限和data目錄讀取和寫入權限

  • 用戶授權權限最小原則 : 單數(shù)據(jù)庫授權只嚣,權限夠用即可,單數(shù)據(jù)庫賬戶不能擁有super/process/file等全局權限玻墅,可避免安全隱患
  • 刪除無用數(shù)據(jù)庫 : test數(shù)據(jù)庫對新建的賬戶默認有權限
授權語句關鍵點 含義
訪問地址 要訪問的數(shù)據(jù)庫服務器ip和port
權限 具體需要的權限介牙,開發(fā)一般授予 select,update,insert,delete,create temporary tables,execute
用戶名 具體訪問人dev_name 、op_name澳厢、 test_name等
訪問源地址 訪問人的客戶端ip 或者 應用程序ip

常用操作需要的權限舉例

-- 執(zhí)行show processlist
    只有連接權限時环础,只能查看自己的連接
    具有process權限時,可以看到所有連接
-- 查看information_schema庫下表
    process (innodb相關表需要process權限)  
-- mysql邏輯備份mysqldump所需權限
    select+lock tables        
    【--single-transaction 參數(shù)下不需要鎖表剩拢,所以不需要lock tables權限】
    【要備份觸發(fā)器存儲過程等线得,需要添加TRIGGER、EVENT徐伐、EXECUTE 等權限】
    【MySQL版本5.7測試】
        賬號權限:只有l(wèi)ock tables 
        備份語句 mysqldump -u -p -A> 
        備份結果:文件內容只有創(chuàng)建數(shù)據(jù)庫語句
-- mysql邏輯恢復最小權限
    GRANT SELECT, INSERT, CREATE, DROP, ALTER ON *.*
    如果有外鍵關聯(lián):REFERENCES
    如果有觸發(fā)器或者存儲過程:??待測試   
-- rename
    INSERT, CREATE, DROP, ALTER
-- truncat
清空表需要有drop權限(授權后需要重新使用表或重新登錄)
    
-- usage  
可以執(zhí)行show databases看到information_schema的所有表結構贯钩,能看到除innodb表之外的表數(shù)據(jù);
執(zhí)行select sleep(10);等內置函數(shù)办素;
show processlist 查看該用戶所有會話連接角雷;
可以執(zhí)行kill命令 殺掉該用戶所有連接;

-- select *.*  
可以執(zhí)行show databases看到所有庫表,查看所有庫表結構和數(shù)據(jù)

-- references   
字段級   用戶可以將其它表的一個字段作為某一個表的外鍵約束

用戶創(chuàng)建和刪除舉例

--創(chuàng)建用戶
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin';
CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure';
CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'obscure'; 
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO 'custom'@'host47.exa.com';       
-- 5.7之前可以使用grant直接創(chuàng)建賬戶
-- 用戶重命名
RENAME USER mhh@localhost TO miao@localhost;
-- 刪除用戶
DROP USER test@localhost;
--如果用戶已存在:ERROR 1396 (HY000): Operation CREATE USER failed for 'dba'@'localhost'

授權和回收舉例

-- 列授權
GRANT select(id, num, class) ON testdb.log TO dba@localhost;
-- 存儲過程授權
GRANT execute ON procedure testdb.pr_add TO 'dba'@'localhost';
-- 函數(shù)授權
GRANT execute ON function testdb.fn_add TO 'dba'@'localhost';
-- 加期限授權
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY; 密碼30天后過期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE INEVER;  密碼不過期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT; 默認過期策略
-- 設置MySQL用戶密碼過期策略【系統(tǒng)參數(shù)性穿,作用于所有用戶】
default_password_lifetime=180 設置180天過期
default_password_lifetime=0 設置密碼不過期
--手動強制某個用戶密碼過期
  ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE;
  SELECT 1;
  ERROR 1820 (HY000): You must SET PASSWORD before executing this statement 
  ALTER USER USER() IDENTIFIED BY 'new_password';
  Query OK, 0 rows affected (0.01 sec)
  SELECT 1;
  |1|

-- 回收權限
REVOKE drop ON test.* FROM test@localhost;

用戶資源限制

-- 通過執(zhí)行create user/alter user設置/修改用戶的資源限制
CREATE USER 'username'@'localhost' IDENTIFIED BY 'xxxxx' WITH MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2;
ALTER USER 'username'@'localhost' WITH MAX_USER_CONNECTIONS 10;
? MAX_QUERIES_PER_HOUR:一個用戶在一個小時內可以執(zhí)行查詢的次數(shù)(基本包含所有語句)
? MAX_UPDATES_PER_HOUR:一個用戶在一個小時內可以執(zhí)行修改的次數(shù)(僅包含修改數(shù)據(jù)庫或表的語句)
? MAX_CONNECTIONS_PER_HOUR:一個用戶在一個小時內可以連接MySQL的時間
? MAX_USER_CONNECTIONS:一個用戶可以在同一時間連接MySQL實例的數(shù)量
-- 取消某項資源限制既是把原先的值修改成0
ALTER USER 'username'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0;
-- 當針對某個用戶的max_user_connections非0時勺三,則忽略全局系統(tǒng)參數(shù) max_user_connections,反之則全局系統(tǒng)參數(shù)生效

修改root密碼

--V5.6 
update mysql.user set password=password('xxxx') where user='root' and host = 'localhost';flush privileges;
--V5.7 
update mysql.user set authentication_string=password('pwd ') where user='root' and host = 'localhost';flush privileges;
--V5.8 
alter user 'root'@'localhost' identified by '';
ALTER USER 'dba'@'localhost' IDENTIFIED BY 'dba140';--需要alter權限
SET PASSWORD FOR 'dba'@'localhost' = PASSWORD('xxx');--不需要具體權限
GRANT USAGE ON *.* TO 'dba'@'localhost' IDENTIFIED BY 'xxx'; --需要grant權限
mysqladmin -u user_name -h host_name password "new_password";
--修改本身用戶密碼方式:
  ALTER USER USER() IDENTIFIED BY 'mypass'; 
  SET PASSWORD = PASSWORD('mypass');

MySQL用戶lock

--通過執(zhí)行create user/alter user命令中帶account lock/unlock子句設置用戶的lock狀態(tài)
--create user語句默認的用戶是unlock狀態(tài)
create user username@localhost identified by 'xxx' account lock; 
--alter user語句默認不會修改用戶的lock/unlock狀態(tài) 
alter user 'mysql.sys'@localhost account lock;
alter user 'mysql.sys'@localhost account unlock;
-- 當客戶端使用lock狀態(tài)的用戶登錄MySQL時需曾,會收到報錯 
Access denied for user 'user_name'@'host_name'. Account is locked.

權限統(tǒng)計

mysql -uxxx -pxxx -NBe "select concat(\"'\",user,\"'\",'@',\"'\",host,\"'\") from mysql.user order by user desc;" |while read userhost ;do mysql -uxxx -pxxx -NBe "show grants for ${userhost};";done >/tmp/pri.sql
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吗坚,一起剝皮案震驚了整個濱河市祈远,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌商源,老刑警劉巖车份,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牡彻,居然都是意外死亡扫沼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門讨便,熙熙樓的掌柜王于貴愁眉苦臉地迎上來充甚,“玉大人,你說我怎么就攤上這事霸褒。” “怎么了盈蛮?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵废菱,是天一觀的道長。 經(jīng)常有香客問我抖誉,道長殊轴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任袒炉,我火速辦了婚禮旁理,結果婚禮上,老公的妹妹穿的比我還像新娘我磁。我一直安慰自己孽文,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布夺艰。 她就那樣靜靜地躺著芋哭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郁副。 梳的紋絲不亂的頭發(fā)上减牺,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音存谎,去河邊找鬼拔疚。 笑死,一個胖子當著我的面吹牛既荚,可吹牛的內容都是我干的稚失。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼固以,長吁一口氣:“原來是場噩夢啊……” “哼墩虹!你這毒婦竟也來了嘱巾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤诫钓,失蹤者是張志新(化名)和其女友劉穎旬昭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菌湃,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡问拘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惧所。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤坐。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖下愈,靈堂內的尸體忽然破棺而出纽绍,到底是詐尸還是另有隱情,我是刑警寧澤势似,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布拌夏,位于F島的核電站,受9級特大地震影響履因,放射性物質發(fā)生泄漏障簿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一栅迄、第九天 我趴在偏房一處隱蔽的房頂上張望站故。 院中可真熱鬧,春花似錦毅舆、人聲如沸西篓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽污淋。三九已至,卻和暖如春余掖,著一層夾襖步出監(jiān)牢的瞬間寸爆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工盐欺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赁豆,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓冗美,卻偏偏與公主長得像魔种,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粉洼,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容