MySQL資料庫使用者管理和使用者授權
--------資料庫使用者管理--------
1、新建使用者
CREATE USER '使用者名稱'@'來源地址' [IDENTIFIED BY [PASSWORD] '密碼'];
----------------------------------------------------------------------------------------------------------
'使用者名稱':指定將建立的使用者名稱
'來源地址':指定新建立的使用者可在哪些主機上登入,可使用IP地址、網段、主機名的形式,本地使用者可用localhost,允許任意主機登入可用萬用字元%
'密碼':若使用明文密碼,直接輸入'密碼',插入到資料庫時由Mysql自動加密;
若使用加密密碼,需要先使用SELECT PASSWORD('密碼'); 獲取密文,再在語句中新增 PASSWORD '密文';
若省略“IDENTIFIED BY”部分,則使用者的密碼將為空(不建議使用)
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456'; SELECT PASSWORD('abc123'); CREATE USER 'user2'@'localhost' IDENTIFIED BY PASSWORD '*6691484EA6B50DDDE1926A220DA01FA9E575C18A';
2、檢視使用者資訊
建立後的使用者儲存在 mysql 資料庫的 user 表裡
USE mysql; SELECT User,authentication_string,Host from user;
3、重新命名使用者
rename user 'test1'@'localhost' to 'user1'@'localhost';
4、刪除使用者
drop user 'test2'@'%';
5、修改當前登入使用者密碼
set password = password('12345');
6、修改其他使用者密碼
set password for 'user1'@'localhost' = password('abc1234');
7、忘記 root 密碼的解決辦法
1 )修改 /etc/my.cnf 配置檔案,不使用密碼直接登入到 mysql
vim /etc/my.cnf [mysqld] skip-grant-tables #新增,使登入mysql不使用授權表 systemctl restart mysqld mysql #直接登入
2)使用 update 修改 root 密碼,重新整理資料庫
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root'; FLUSH PRIVILEGES; quit mysql -u root -pabc123
最後再把 /etc/my.cnf 配置檔案裡的 skip-grant-tables 刪除,並重啟 mysql 服務
--------資料庫使用者授權--------
1、授予許可權
GRANT語句:專門用來設定資料庫使用者的訪問許可權。當指定的使用者名稱不存在時,GRANT語句將會建立新的使用者;當指定的使用者名稱存在時,GRANT 語句用於修改使用者資訊。
GRANT 許可權列表 ON 資料庫名.表名 TO '使用者名稱'@'來源地址' [IDENTIFIED BY '密碼'];
----------------------------------------------------------------------------------------------------------
#許可權列表:用於列出授權使用的各種資料庫操作,以逗號進行分隔,如“select,insert,update”。使用“all”表示所有許可權,可授權執行任何操作。
#資料庫名.表名:用於指定授權操作的資料庫和表的名稱,其中可以使用萬用字元“*”。例如,使用“def.*”表示授權操作的物件為 def資料庫中的所有表。
#'使用者名稱@來源地址':用於指定使用者名稱稱和允許訪問的客戶機地址,即誰能連線、能從哪裡連線。來源地址可以是域名、IP 地址,還可以使用“%”萬用字元,表示某個區域或網段內的所有地址,如“%.def.com”、“192.168.229.%”等。
#IDENTIFIED BY:用於設定使用者連線資料庫時所使用的密碼字串。在新建使用者時,若省略“IDENTIFIED BY”部分, 則使用者的密碼將為空。
----------------------------------------------------------------------------------------------------------
#允許使用者 alpha 在本地查詢 def 資料庫中abc表的資料記錄,但禁止查詢其他資料庫中的表的記錄
grant select on def.abc to 'alpha'@'localhost' identified by 'abc123';
#允許使用者 beta 在所有終端遠端連線 mysql ,並擁有所有許可權
GRANT ALL PRIVILEGES ON *.* TO 'beta'@'%' IDENTIFIED BY '123456'; flush privileges; quit mysql -u beta -p123456 use def; show tables; select * from abc;
2、檢視許可權
SHOW GRANTS FOR 使用者名稱@來源地址;
例:
SHOW GRANTS FOR 'beta'@'%';
3、撤銷許可權
REVOKE 許可權列表 ON 資料庫名.表名 FROM 使用者名稱@來源地址;
例:
REVOKE ALL ON *.* FROM 'lisi'@'%'; SHOW GRANTS FOR 'lisi'@'%'; #USAGE許可權只能用於資料庫登陸,不能執行任何操作;USAGE許可權不能被回收,即 REVOKE 不能刪除使用者。 flush privileges;