1. 程式人生 > 實用技巧 >MySQL 許可權管理

MySQL 許可權管理

許可權管理

   在MySQL中,我們可以使用root使用者創建出一些新的使用者併為他們分配一些許可權,如可編輯那些資料庫,可使用那些SQL語句等等。

   打個比方,一個開發部門可能公用一個數據庫,而各個開發小組的組長包括成員只能檢視或編輯自身業務範圍之內的記錄,這種需求下就需要使用到許可權管理。

系統許可權

   系統許可權是儲存於MySQL資料庫中,該資料庫下有4張關於許可權的表。

表名描述授權書寫
user 針對所有資料庫,所有庫下所有表,以及表下的所有欄位 *.*
db 針對某一資料庫,該資料庫下的所有表,以及表下的所有欄位 資料庫名.*
tables_priv 針對某一張表,以及該表下的所有欄位 資料庫名.資料表名
columns_priv 針對某一個欄位 欄位名1,欄位名2

   我們使用select * from MySQL.userl來看一下這張表部分內容。

*************************** 1. row ***************************
                  Host: localhost  -- 只能從本地進行登入
                  User: root   -- 針對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: password_expired: N password_last_changed: 2020-08-30 23:17:49 password_lifetime: NULL account_locked: N
針對root使用者的許可權

建立使用者

   建立使用者與修改使用者許可權必須登入root

賬戶,其他賬戶均無法完成該兩項操作。

   create user "使用者名稱"@"允許登入的地址" identified by "密碼;"

create user "Yunya"@"localhost" identified by "123"; -- 建立使用者名稱為雲崖的使用者,允許該使用者從本地進行登入

create user "Yunya"@"192.168.31.10" identified by "123"; -- 建立使用者名稱為雲崖的使用者,允許該使用者從192.168.31.10進行登入

create user "Yunya"@"192.168.31.%" identified by "123"; -- 建立使用者名稱為雲崖的使用者,允許該使用者從192.168.31.xxx的網段進行登入

create user "Yunya"@"%" identified by "123"; -- 建立使用者名稱為雲崖的使用者,允許該使用者從任意ip地址的網路進行登入

分配許可權

   分配許可權與釋放許可權必須在root賬戶下進行

grant all on *.* to "Yunya"@"%"; -- 為雲崖分配所有許可權
grant select on db1.* to "Yunya"@"%" -- 為雲崖分配db1資料庫下的所有資料表的檢視許可權

grant select(id,name),update(age) on db1.t1 to "Yunya"@"%" -- 為雲崖分配db1資料庫下的t1資料表的檢視id,name欄位與更新age欄位的許可權

revoke all on *.* to "Yunya"@"%"; -- 釋放掉Yunya的所有許可權

   接下來將為Yunya分配db1.t1select許可權與update許可權

create database db1;

create table db1.t1(
        id int auto_increment primary key,
        name char(5)
);

create table db1.t2(
        id int auto_increment primary key,
        name char(5)
);

use db1;

insert into t1(name) values ("t1");

insert into t2(name) values ("t2");

grant select,update on db1.t1 to "Yunya"@"%";
   開始測試。

mysql> show databases;  # Yunya只能檢視這些資料庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
+--------------------+
2 rows in set (0.00 sec)

mysql> use db1;
Database changed
mysql> show tables;  # Yunya只能看到t1表
+---------------+
| Tables_in_db1 |
+---------------+
| t1            |
+---------------+
1 row in set (0.00 sec)

mysql> delete from t1 where name = "t1";  # 無法完成記錄的刪除操作
ERROR 1142 (42000): DELETE command denied to user 'Yunya'@'localhost' for table 't1'
mysql> select name from t1;  # 可以使用查詢操作
+------+
| name |
+------+
| t1   |
+------+
1 row in set (0.00 sec)

mysql>
許可權分配

   最後我們重新登入root使用者,檢視一下MySQL.USER表中的變化。

*************************** 4. row ***************************
                  Host: %  -- 允許從任意IP進行登入
                  User: Yunya
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              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: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257  -- 儲存的密文密碼
      password_expired: N
 password_last_changed: 2020-09-03 23:27:26
     password_lifetime: NULL
        account_locked: N
新增的使用者Yunya許可權資訊