1. 程式人生 > 其它 >MySQL資料庫使用者管理和使用者授權

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”部分, 則使用者的密碼將為空。
----------------------------------------------------------------------------------------------------------

all privilege許可權如下: insert (插入資料) select (查詢資料) update (更新表的資料) delete (刪除表中資料) create (建立庫,表) drop (刪除庫,表) refernces index (建立索引) alter (更改表屬性) create temp orary tables lock tables (鎖表) execute create view (建立檢視) show view (顯示檢視) create routine (建立儲存過程) alter routine (修改儲存過程) event (事件) trigger on (建立觸發器)

#允許使用者 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;