首頁  >  文章  >  資料庫  >  關於mysql學習之權限管理詳解

關於mysql學習之權限管理詳解

迷茫
迷茫原創
2017-03-26 13:24:281499瀏覽

資料庫權限的意義:

  為了確保資料庫中的業務資料不會被非授權的使用者非法竊取,需要對資料庫的存取者進行各種限制,而資料庫安全性控制措施主要有這三種,第一種使用者身分鑑別,手段可以是口令,磁卡,指紋等技術,只有擁有合法身分的人才可以進入資料庫。第二種存取權限控制,不同角色,對資料庫的存取權限是不同的,必須為每個角色設定其存取的資料庫物件、權限。第三種制定資料庫管理的管理制度,制度最終約束人的行為,透過制定相應的規章制度,可以保證在適當的時間、由適當的人對資料進行合適的操作。

mysql對使用者權限的檢查分為兩個階段

1、是否可以與mysql伺服器建立連結

2、是否具有某些操作權限(如:select update 等)

一、與mysql伺服器建立連結

mysql伺服器如何校驗使用者是否可以建立連結

1、驗證你從哪裡來host

2、你是誰user

3、密碼password

連結mysql的方式:C:\Users\PC003>mysql -h192.168.6.223 -uroot -pjalja

參數解釋:-h:從何處要建立連結

     -u: user

     -p:密碼

mysql> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *CFAFE434FB0E5D64538901E668E1EACD077A54DF |
| root | %         | *CFAFE434FB0E5D64538901E668E1EACD077A54DF |
+------+-----------+-------------------------------------------+

host=localhost表示可以使用預設主機進行連結(C:\Users\PC003>mysql  -uroot -pjalja,C:\Users\PC003>mysql  -uroot -pjalja,C:\Users\PC003> -hlocalhost -uroot -pjalja,C:\Users\PC003>mysql -h127.0.0.1 -uroot -pjalja)


host=%表示該伺服器可以與它所在一個區域網路(公網)內的所有主機建立鏈接,該方式在生產環境中不安全

host=192.168.6.224表示該伺服器只能與192.168.6.224主機建立鏈接  C:\Users\PC003>mysql -h192. 168.6.223 -uroot -pjalja

如何修改host:

mysql> update user set host='192.168.6.223' where user ='root'

mysql> flush privileges;刷新權限(因為修改後資料是在記憶體中每次操作用戶權限相關操作都要刷新)

修改密碼:

mysql> update user set password=password('111111') where user='root';
mysql> flush privileges;

二、mysql如何進行權限檢查

mysql中有一個mysql庫該庫下user表檢查該用戶是否存在,db表檢查該用戶對哪些庫有哪些操作權限,tables_priv表檢查該用戶對那些表有哪些操作權限。

建立使用者並授權:

grant [權限1,權限2] on *.* to user@'host' identfied by 'password';

常用權限:all,create,drop,insert,delete,update,select

#例如:授予ls使用者所有庫所有表的所有權限並且可以從該區域網路該網段任何主機登陸。

mysql> grant all on *.* to 'ls'@'192.168.6.%' identified by '111111';

使用該使用者登陸:C:\Users\PC003>mysql -h192.168.6.223 -uls -p111111;

查看ls使用者特定有哪些權限:

mysql> select * from  mysql.user where user='ls' \G;
*************************** 1. row ***************************
                  Host: 192.168.6.%
                  User: ls
              Password: *FD571203974BA9AFE270FE62151AE967ECA5E0AA
           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: N
       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:
 authentication_string: NULL

 權限回收:收回ls的所有權限

mysql> revoke all on *.* from ls@'192.168.6.%';

授權某個函式庫的權限:

mysql> grant all on blog.* to ls@'192.168.6.%';授予ls使用者擁有blog資料庫的所有權限。

這樣ls用戶在user表中沒有權限,這時將進行db級別的權限檢查

mysql> select * from  mysql.db where user='ls' 
\G;*************************** 1. row ***************************
                 Host: 192.168.6.%
                   Db: blog                 
                   User: ls
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
         Execute_priv: Y
           Event_priv: Y
         Trigger_priv: Y

回收ls用戶所有權限並賦予某各表權限:授予ls用戶blog庫中user表crud權限

mysql> revoke all on *.* from ls@'192.168.6.%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> grant insert,update,select,delete on blog.user to ls@'192.168.6.%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

這樣ls使用者在db層級中沒有權限,這時將進行tables_priv等級的權限檢查:

mysql> select * from  mysql.tables_priv where user='ls' 
\G;*************************** 1. row ***************************
       Host: 192.168.6.%
         Db: blog       
         User: ls
 Table_name: user
    Grantor: root@localhost
  Timestamp: 2017-02-09 14:35:38
 Table_priv: Select,Insert,Update,DeleteColumn_priv:1 row in set (0.00 sec)


#mysql權限控制流程:

注意:mysql的權限檢查可以精確到某列資料。

以上是關於mysql學習之權限管理詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn