1. 程式人生 > >MySQL中許可權管理

MySQL中許可權管理

一、訪問控制

資料庫伺服器通常包含有重要的資料,這些資料的安全和完整可通過訪問控制來維護。訪問控制實際上就是為使用者提供且僅提供他們所需的訪問權。
mysql的使用者賬號及相關資訊儲存在名為mysql的資料庫(系統)中,其中的user表包含了所有使用者的賬號,user表中的user列儲存使用者的登入 名。可以使用下面的sql語句檢視資料庫的使用者賬號:

select user from mysql.user;
  • 1

這裡寫圖片描述

建立使用者賬號

成功安裝了mysql伺服器後,系統會建立一個名為root的使用者,root使用者擁有對整個mysql伺服器完全控制的許可權。為了避免惡意使用者冒名使用root賬號操控資料庫,通常需要建立一系列具備適當許可權的賬號,而儘可能地不用或少用root賬號登入系統,以此來確保資料的安全訪問。
建立使用者名稱為zhangsan的新使用者,口令為明文123:

create user'zhangsan'@'localhost'identified by'123';

這裡寫圖片描述
如果想對明文123進行加密可以使用password()函式,它加密後返回的是雜湊值:

select password(123);

這裡寫圖片描述

則此時的建立新使用者的語句就為:

create user 'zhangsan'@'localhost'identified by password'上面通過password()函式加密的雜湊值';

刪除使用者

注意必須明確給出該賬號的主機名

drop user zhangsan@localhost;

修改使用者賬號

rename user'zhangsan'@'localhost'to'lisi'@'localhost';

修改使用者口令(密碼)

新口令必須傳遞到password()中進行加密,或者是已經加密過的口令值(此時要加上引號)。
將使用者zhangsan的口令修改成明文“hello”對應的雜湊值:

set password for 'zhangsan'@'localhost'=password('hello');

二、賬戶許可權管理

新建立的使用者賬號沒有訪問許可權,只有登入到mysql伺服器,不能執行任何資料庫操作,我們可以用下面的sql語句檢視新建立的使用者zhangsan的許可權:

show grants for 'zhangsan'@'localhost';

這裡寫圖片描述
根據輸出結果,可以看到使用者zhangsan僅有一個許可權usage on 星號.星號,表示該使用者對任何資料庫和任何表都沒有許可權。
所以需要為該使用者分配適當的訪問許可權。

許可權的授予

許可權的授予通過grant語句實現。下面是一些例項:

grant select(cust_id,cust_name)
    on mysql_test.customers
    to'zhangsan'@'localhost';--授予在資料庫mysql_test的表customers上擁有對列cust_id和列cust_name的select許可權
grant select ,update
    on mysql_test.customers
    to 'liming'@'localhost'identified by'123';--新建一個使用者為liming,並授予其在資料庫mysql_test的表customers上擁有select和update的許可權
grant all
    on mysql_test.*
    to'zhangsan'@'localhost';--授予可以在資料庫mysql_test中執行所有操作的許可權
grant create user
    on *.*
    to'zhangsan'@'localhost';--授予系統中已存在使用者zhangsan擁有建立使用者的許可權

許可權的轉移與限制

授予當前系統中一個不存在的使用者zhou在資料庫mysql_test的表customers上擁有select 和update 的許可權,並允許其將自身的這個許可權授予其他使用者(通過with grant option):

grant select,update
    on mysql_test.customers
    to'zhou'@'localhost'identified by'123'
    with grant option;

如果上面with子句後面跟的是max_queries_per_hour count、
max_updates_per_hour count、
max_connections_per_hour count、
max_user_connections count
中的某一項,則該grant語句可用於限制許可權

grant delete
    on mysql_test.customers
    to 'zhangsan'@'localhost'
    with max_queries_per_hour 1;--每小時只能處理一條delete語句的許可權

許可權的撤銷

使用revoke可以實現許可權的撤銷,而不會刪除使用者

revoke select 
    on mysql_test.customers
    from'zhangsan'@'localhost';--回收使用者zhangsan在資料庫mysql_test的表customers上的select許可權

例子:

現在需要建立一個使用者,該使用者不能刪除擁有 drop   delete許可權,操作如下: