首頁 > 軟體

MySQL資料庫使用者許可權管理

2022-06-09 14:05:00

1、使用者管理

mysql的使用者資訊儲存在了mysql.user中:

select * from mysql.userG

*************************** 5. row ***************************
                    Host: localhost
                    User: root
             Select_priv: Y
             Insert_priv: Y
             Update_priv: Y
             Delete_priv: Y
             Create_priv: Y
               Drop_priv: Y
             Reload_priv: Y
           Shutdown_priv: Y
            Process_priv: Y
               File_priv: Y
              Grant_priv: Y
         References_priv: Y
              Index_priv: Y
              Alter_priv: Y
            Show_db_priv: Y
              Super_priv: Y
   Create_tmp_table_priv: Y
        Lock_tables_priv: Y
            Execute_priv: Y
         Repl_slave_priv: Y
        Repl_client_priv: Y
        Create_view_priv: Y
          Show_view_priv: Y
     Create_routine_priv: Y
      Alter_routine_priv: Y
        Create_user_priv: Y
              Event_priv: Y
            Trigger_priv: Y
  Create_tablespace_priv: Y
                ssl_type:
              ssl_cipher:
             x509_issuer:
            x509_subject:
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: mysql_native_password
   authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
        password_expired: N
   password_last_changed: 2020-02-05 22:46:27
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: Y
          Drop_role_priv: Y
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL

主要欄位:

主機名和使用者名稱共同組成複合主鍵
Host 主機名,允許存取的使用者端,*代表所有使用者端都可以存取
User 使用者名稱

1.1、建立使用者

方式一:直接使用root使用者在mysql.user中插入記錄(不推薦)

方式二:使用建立使用者的SQL指令

基本語法:

create user 使用者 identified by 明文密碼
-- 使用者 使用者名稱@主機地址
-- 主機地址: '' 或者 %

範例:

create user 'user1'@'%' identified by '123456';
-- 檢視mysql.user表中是否存在新使用者
select user, host from mysql.user where user = 'user1';
+-------+------+
| user  | host |
+-------+------+
| user1 | %    |
+-------+------+

簡化版建立使用者,誰都可以存取,不需要密碼,不安全

create user user2;

1.2、刪除使用者

user和host具有唯一性

基本語法:

drop user 使用者名稱@host;

範例:

mysql> drop user 'user1'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> select user, host from mysql.user where user = 'user1';
Empty set (0.00 sec)

1.3、修改使用者密碼

需要使用函數對密碼進行加密password()

方式一:使用專門的修改密碼指令

基本語法:

set password for 使用者 = password(明文密碼);
set password for 'user1'@'%' = password(654321);
-- mysql5.7後續版本,8.0可用
alter user 'user1'@'%' identified by '654321';

方式二:使用更新語法

基本語法:

update mysql.user set password = password(明文密碼) where user = '' and host = '';
update mysql.user set password = password('123456') where user = 'user1' and host = '%';
-- 8.0報錯
update mysql.user set authentication_string = password('123456') where user = 'user1' and host = '%';

2、許可權管理

分為三類:

  • 資料許可權:增刪改查 select update delete insert
  • 結構許可權:結構操作(表操作) create drop
  • 管理許可權:許可權管理 create user、grant、revoke, 管理員

2.1、授予許可權 grant

將許可權分配給指定使用者

基本語法:

grant 許可權列表 on 資料庫/*.表名/* to 使用者
  • 許可權列表 使用逗號間隔,all privileges 代表全部許可權
  • 所有資料庫 *.*
  • 某個資料庫:資料庫.*
  • 單表:資料庫.表名
-- 分配許可權 不需要重新整理,馬上生效
grant select on mydatabase.my_student to 'user1'@'%';

2.2、取消許可權 revoke

基本語法:

revoke 許可權列表 /all privileges on 資料庫/*.表/* from 使用者
-- 回收許可權,不需要重新整理,馬上生效
revoke all privileges on mydatabase.my_student from 'user1'@'%';

2.3、重新整理許可權 flush

將操作的具體內容同步到對應的表中

基本語法:

flush privileges;

3、密碼丟失的解決方案

如果忘記root使用者的密碼

# 停止服務
mysql.server stop;

# 停止不了可以直接殺死程序
ps aux|grep mysql
kill <pid>

# 重新啟動服務,跳過許可權
mysqld --skip-grant-tables

# 直接無使用者名稱登入
mysql

非常危險,任何使用者端不需要任何使用者資訊都可以直接登入,而且是root許可權

修改root密碼:

alter user 'root'@'localhost' identified by '123456'; 

修改完後,關閉mysql伺服器,重啟

到此這篇關於MySQL資料庫使用者許可權管理的文章就介紹到這了,更多相關MySQL 許可權管理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com