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

Blog.060 MySQL 資料庫使用者管理與授權

本章目錄

1. 資料庫使用者管理
2. 資料庫使用者授權

1. 資料庫使用者管理

    (1)新建使用者

  • CREATE USER '使用者名稱'@'來源地址' [IDENTIFIED BY [PASSWORD] '密碼'];
  • ‘使用者名稱’:指定將建立的使用者名稱
  • ‘來源地址’:指定新建立的使用者可在哪些主機上登入,可使用IP地址、網段、主機名的形式,本地使用者可用localhost,允許任意主機登入可用萬用字元%
  • ‘密碼’:若使用明文密碼,直接輸入’密碼’,插入到資料庫時由Mysql自動加密;

    若使用加密密碼,需要先使用SELECT PASSWORD(‘密碼’); 獲取密文,再在語句中新增 PASSWORD ‘密文’;


    若省略“IDENTIFIED BY”部分,則使用者的密碼將為空(不建議使用)


    (2)檢視使用者資訊

  • 建立後的使用者儲存在 mysql 資料庫的 user 表裡
  • USE mysql;
  • SELECT User,authentication_string,Host from user;

    (3)重新命名使用者

  • RENAME USER 'zhangsan'@'localhost' TO 'wangwu'@'localhost';
  • SELECT User,authentication_string,Host from user;

    (4)刪除使用者

  • DROP USER 'lisi'@'localhost';
  • SELECT User,authentication_string,Host from user;

    (5)修改當前登入使用者密碼

  • SET PASSWORD = PASSWORD('abc123');
  • quit
  • mysql -u root -p

    (6)修改其他使用者密碼

  • SET PASSWORD FOR 'wangwu'@'localhost' = PASSWORD('abc123');
  • use mysql;
  • SELECT User,authentication_string,Host from user;

    (7)忘記 root 密碼的解決辦法

  • 修改 /etc/my.cnf 配置檔案,不使用密碼直接登入到 mysql
1 vim /etc/my.cnf
2 [mysqld]
3 skip-grant-tables                    #新增,使登入mysql不使用授權表
4 systemctl restart mysqld
5 mysql                                #直接登入
  • 使用 update 修改 root 密碼,重新整理資料庫
1 UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('112233') where user='root';
2 FLUSH PRIVILEGES;
3 quit
4 
5 再把 /etc/my.cnf 配置檔案裡的 skip-grant-tables 刪除,並重啟 mysql 服務。
6 mysql -u root -p
7 112233

2. 資料庫使用者授權

    (1)授予許可權

1 GRANT語句:專門用來設定資料庫使用者的訪問許可權。當指定的使用者名稱不存在時,GRANT語句將會建立新的使用者;當指定的使用者名稱存在時,GRANT 語句用於修改使用者資訊。
2 
3 GRANT 許可權列表 ON 資料庫名.表名 TO '使用者名稱'@'來源地址' [IDENTIFIED BY '密碼'];
1 #許可權列表:用於列出授權使用的各種資料庫操作,以逗號進行分隔,如“select,insert,update”。使用“all”表示所有許可權,可授權執行任何操作。
2 
3 #資料庫名.表名:用於指定授權操作的資料庫和表的名稱,其中可以使用萬用字元“*”。
4 
5 #'使用者名稱@來源地址':用於指定使用者名稱稱和允許訪問的客戶機地址,即誰能連線、能從哪裡連線。來源地址可以是域名、IP 地址,還可以使用“%”萬用字元,表示某個區域或網段內的所有地址,如“%.lic.com”、“192.168.184.%”等。
6 
7 #IDENTIFIED BY:用於設定使用者連線資料庫時所使用的密碼字串。在新建使用者時,若省略“IDENTIFIED BY”部分, 則使用者的密碼將為空。

    #允許使用者wangwu在本地查詢 CLASS 資料庫中所有表的資料記錄,但禁止查詢其他資料庫中的表的記錄。

1 例:
2 GRANT select ON CLASS.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';
3 quit;
4 mysql -u wangwu -p
5 123456
6 show databases;
7 use information_schema;
8 show tables;
9 select * from INNODB_SYS_TABLESTATS;

    #允許使用者wangwu在本地遠端連線 mysql ,並擁有所有許可權。

1 quit;
2 mysql -u root -p112233
3 GRANT ALL PRIVILEGES ON *.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';
4 
5 flush privileges;
6 quit
7 
8 mysql -u wangwu -p123456
9 create database SCHOOL;

    (2)檢視許可權

1 SHOW GRANTS FOR 使用者名稱@來源地址;
2 
3 例:
4 SHOW GRANTS FOR 'wangwu'@'localhost';

    (3)撤銷許可權

1 REVOKE 許可權列表 ON 資料庫名.表名 FROM 使用者名稱@來源地址;
2 
3 例:quit;
4 mysql -u root -p112233
5 SHOW GRANTS FOR 'wangwu'@'localhost';
6 REVOKE SELECT ON "CLASS".* FROM 'wangwu'@'localhost';
7 
8 SHOW GRANTS FOR 'wangwu'@'localhost';

    #USAGE許可權只能用於資料庫登陸,不能執行任何操作;USAGE許可權不能被回收,即 REVOKE 不能刪除使用者。

1 flush privileges;

-