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