MySQL 許可權管理
阿新 • • 發佈:2020-09-04
許可權管理
在MySQL
中,我們可以使用root
使用者創建出一些新的使用者併為他們分配一些許可權,如可編輯那些資料庫,可使用那些SQL
語句等等。
打個比方,一個開發部門可能公用一個數據庫,而各個開發小組的組長包括成員只能檢視或編輯自身業務範圍之內的記錄,這種需求下就需要使用到許可權管理。
系統許可權
系統許可權是儲存於MySQL
資料庫中,該資料庫下有4張關於許可權的表。
表名 | 描述 | 授權書寫 |
---|---|---|
user | 針對所有資料庫,所有庫下所有表,以及表下的所有欄位 | *.* |
db | 針對某一資料庫,該資料庫下的所有表,以及表下的所有欄位 | 資料庫名.* |
tables_priv | 針對某一張表,以及該表下的所有欄位 | 資料庫名.資料表名 |
columns_priv | 針對某一個欄位 | 欄位名1,欄位名2 |
我們使用select * from MySQL.user
l來看一下這張表部分內容。
*************************** 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:針對root使用者的許可權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
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.t1
的select
許可權與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許可權資訊