mysql用戶管理和權(quán)限設(shè)置方式
mysql用戶管理和權(quán)限設(shè)置
MYSQL到底都有哪些權(quán)限呢?
從官網(wǎng)復(fù)制一個(gè)表來看看:
權(quán)限 | 權(quán)限級(jí)別 | 權(quán)限說明 |
CREATE | 數(shù)據(jù)庫、表或索引 | 創(chuàng)建數(shù)據(jù)庫、表或索引權(quán)限 |
DROP | 數(shù)據(jù)庫或表 | 刪除數(shù)據(jù)庫或表權(quán)限 |
GRANT OPTION | 數(shù)據(jù)庫、表或保存的程序 | 賦予權(quán)限選項(xiàng) |
REFERENCES | 數(shù)據(jù)庫或表 | |
ALTER | 表 | 更改表,比如添加字段、索引等 |
DELETE | 表 | 刪除數(shù)據(jù)權(quán)限 |
INDEX | 表 | 索引權(quán)限 |
INSERT | 表 | 插入權(quán)限 |
SELECT | 表 | 查詢權(quán)限 |
UPDATE | 表 | 更新權(quán)限 |
CREATE VIEW | 視圖 | 創(chuàng)建視圖權(quán)限 |
SHOW VIEW | 視圖 | 查看視圖權(quán)限 |
ALTER ROUTINE | 存儲(chǔ)過程 | 更改存儲(chǔ)過程權(quán)限 |
CREATE ROUTINE | 存儲(chǔ)過程 | 創(chuàng)建存儲(chǔ)過程權(quán)限 |
EXECUTE | 存儲(chǔ)過程 | 執(zhí)行存儲(chǔ)過程權(quán)限 |
FILE | 服務(wù)器主機(jī)上的文件訪問 | 文件訪問權(quán)限 |
CREATE TEMPORARY TABLES | 服務(wù)器管理 | 創(chuàng)建臨時(shí)表權(quán)限 |
LOCK TABLES | 服務(wù)器管理 | 鎖表權(quán)限 |
CREATE USER | 服務(wù)器管理 | 創(chuàng)建用戶權(quán)限 |
PROCESS | 服務(wù)器管理 | 查看進(jìn)程權(quán)限 |
RELOAD |
服務(wù)器管理 | 執(zhí)行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權(quán)限 |
REPLICATION CLIENT | 服務(wù)器管理 | 復(fù)制權(quán)限 |
REPLICATION SLAVE | 服務(wù)器管理 | 復(fù)制權(quán)限 |
SHOW DATABASES | 服務(wù)器管理 | 查看數(shù)據(jù)庫權(quán)限 |
SHUTDOWN | 服務(wù)器管理 | 關(guān)閉數(shù)據(jù)庫權(quán)限 |
SUPER | 服務(wù)器管理 | 執(zhí)行kill線程權(quán)限 |
MYSQL的權(quán)限如何分布,就是針對(duì)表可以設(shè)置什么權(quán)限,針對(duì)列可以設(shè)置什么權(quán)限等等
這個(gè)可以從官方文檔中的一個(gè)表來說明:
權(quán)限分布 | 可能的設(shè)置的權(quán)限 |
表權(quán)限 | 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
列權(quán)限 | 'Select', 'Insert', 'Update', 'References' |
過程權(quán)限 | 'Execute', 'Alter Routine', 'Grant' |
MySQL權(quán)限經(jīng)驗(yàn)原則
權(quán)限控制主要是出于安全因素,因此需要遵循一下幾個(gè)經(jīng)驗(yàn)原則:
- 1、只授予能滿足需要的最小權(quán)限,防止用戶干壞事。比如用戶只是需要查詢,那就只給select權(quán)限就可以了,不要給用戶賦予update、insert或者delete權(quán)限。
- 2、創(chuàng)建用戶的時(shí)候限制用戶的登錄主機(jī),一般是限制成指定IP或者內(nèi)網(wǎng)IP段。
- 3、初始化數(shù)據(jù)庫的時(shí)候刪除沒有密碼的用戶。安裝完數(shù)據(jù)庫的時(shí)候會(huì)自動(dòng)創(chuàng)建一些用戶,這些用戶默認(rèn)沒有密碼。
- 4、為每個(gè)用戶設(shè)置滿足密碼復(fù)雜度的密碼。
- 5、定期清理不需要的用戶?;厥諜?quán)限或者刪除用戶。
MySQL權(quán)限實(shí)戰(zhàn)
1. 創(chuàng)建用戶
命令:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
說明:
username
:你將創(chuàng)建的用戶名host
:指定該用戶在哪個(gè)主機(jī)上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸,可以使用通配符%
password
:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器
例子:
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; CREATE USER 'pig'@'192.168.1.101' IDENDIFIED BY '123456'; CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; CREATE USER 'pig'@'%' IDENTIFIED BY ''; CREATE USER 'pig'@'%';
2. 授權(quán)
命令:
GRANT privileges ON databasename.tablename TO 'username'@'host'
說明:
privileges
:用戶的操作權(quán)限,如SELECT
,INSERT
,UPDATE
等,如果要授予所的權(quán)限則使用ALL
databasename
:數(shù)據(jù)庫名tablename
:表名,如果要授予該用戶對(duì)所有數(shù)據(jù)庫和表的相應(yīng)操作權(quán)限則可用*
表示,如*.*
例子:
GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; GRANT ALL ON *.* TO 'pig'@'%'; GRANT ALL ON maindataplus.* TO 'pig'@'%';
需要注意的是:
用以上命令授權(quán)的用戶不能給其它用戶授權(quán),如果想讓該用戶可以授權(quán),用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
3. 設(shè)置與更改用戶密碼
命令:
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果是當(dāng)前登錄用戶用:
SET PASSWORD = PASSWORD("newpassword");
例子:
SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");
需要注意的是,從MySQL 5.7.6版本開始,MySQL不推薦使用此語法,會(huì)在將來的版本中將PASSWORD函數(shù)刪除。
作為代替的解決方案,在8.0版本中直接使用明文密碼:
SET PASSWORD FOR 'pig'@'%' = 'newpasswd2';
4. 撤銷用戶權(quán)限
命令:
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
說明:
privilege
, databasename
, tablename
:同授權(quán)部分
例子:
REVOKE SELECT ON *.* FROM 'pig'@'%';
注意:
假如你在給用戶'pig'@'%'
授權(quán)的時(shí)候是這樣的(或類似的):
GRANT SELECT ON test.user TO 'pig'@'%'
則在使用
REVOKE SELECT ON *.* FROM 'pig'@'%';
命令并不能撤銷該用戶對(duì)test數(shù)據(jù)庫中user表的SELECT
操作。
相反,如果授權(quán)使用的是
GRANT SELECT ON *.* TO 'pig'@'%';
則
REVOKE SELECT ON test.user FROM 'pig'@'%';
命令也不能撤銷該用戶對(duì)test數(shù)據(jù)庫中user表的Select
權(quán)限。
具體信息可以用命令
SHOW GRANTS FOR 'pig'@'%';
查看。
5. 刪除用戶
命令:
DROP USER 'username'@'host';
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用xshell實(shí)現(xiàn)代理功能并navicat?for?MySQL?進(jìn)行測試
本文介紹使用xshell實(shí)現(xiàn)代理功能并使用navicat?for?MySQL進(jìn)行測試,文章主要利用SSH連接工具xshell就可以實(shí)現(xiàn)簡單的代理功能,下面實(shí)現(xiàn)過程,需要的小伙伴可以參考一下2022-02-02MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)
本文主要介紹了MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08MySql開發(fā)之自動(dòng)同步表結(jié)構(gòu)
這篇文章主要給大家介紹了關(guān)于MySql開發(fā)之自動(dòng)同步表結(jié)構(gòu)的相關(guān)資料,這樣可以避免在開發(fā)中由于修改數(shù)據(jù)庫字段導(dǎo)致的數(shù)據(jù)庫表不一致問題,需要的朋友可以參考下2021-05-05