mysql資料庫使用者及使用者許可權管理
1、mysql資料庫的許可權
(1)mysql資料庫使用者許可權級別
1)全域性性管理許可權:作用於整個mysql例項級別
2)資料庫級別:作用於指定的某個資料庫上或者所有資料庫上
3)資料庫物件級別許可權:作用於指定的資料庫物件上(表或者檢視)
(2)mysql資料庫使用者許可權
許可權名稱 |
許可權說明 |
All/All Privileges |
全域性或者全資料庫物件級別的所有許可權 |
Alter |
修改表結構的許可權,但必須要求有create和insert許可權配合 |
Alter routine |
修改或者刪除儲存過程、函式的許可權 |
Create |
建立新的資料庫和表的許可權 |
Create routine |
允許建立儲存過程、函式的許可權 |
Create tablespace |
允許建立、修改、刪除表空間和日誌組的許可權 |
Create temporary tables |
建立臨時表許可權 |
Create user |
建立、修改、刪除、重新命名user |
Create view |
建立檢視 |
Delete |
刪除行資料 |
drop |
刪除資料庫、表、檢視的許可權,包括truncate table命令 |
Event |
查詢,建立,修改,刪除MySQL事件 |
Execute |
執行儲存過程和函式 |
File |
在MySQL可以訪問的目錄進行讀寫磁碟檔案操作,可使用的命令包括load data infile,select ,into outfile,load file()函式等 |
Grant option |
授權或者收回給其他使用者你給予的許可權 |
Index |
建立和刪除索引 |
Insert |
在表裡插入資料 |
Lock |
對擁有select許可權的表進行鎖定,以防止其他連結對此表的讀或寫 |
Process |
允許檢視MySQL中的程序資訊,比如執行show processlist, mysqladmin processlist, show engine等命令 |
Reference |
允許建立外來鍵 |
Reload |
執行flush命令,指明重新載入許可權表到系統記憶體中 |
Replication client |
執行show master status,show slave status,show binary logs命令 |
Replication slave |
允許slave主機通過此使用者連線master以便建立主從複製關係 |
Select |
從表中檢視資料 |
Show databases |
通過執行show databases命令檢視所有的資料庫名 |
Show view |
通過執行show create view命令檢視檢視建立的語句 |
Shutdown |
關閉資料庫例項,執行語句包括mysqladmin shutdown |
Super |
允許執行一系列資料庫管理命令,包括kill強制關閉某個連線命令,change master to建立複製關係命令,以及create/alter/drop server等命令 |
Trigger |
允許建立,刪除,執行,顯示觸發器的許可權 |
Update |
修改表中資料的許可權 |
Usage |
建立一個使用者之後的預設許可權,本身代表無許可權 |
(3)存放使用者許可權表的說明
Mysql資料庫使用者許可權儲存在mysql庫的user, db, tables_priv, columns_priv, procs_priv這幾個系統表中, MySQL例項啟動後就載入到記憶體中
存放許可權的表 |
表的作用 |
user |
存放使用者賬戶資訊以及全域性級別(所有資料庫)許可權,(存放了那些使用者可以訪問那些資料庫的許可權) |
db |
資料庫級別許可權,決定了來自哪些主機的哪些使用者可以訪問此資料庫 |
tables_priv |
存放表級別的許可權,決定了來自哪些主機的哪些使用者可以訪問資料庫的那張表 |
columns_priv |
存放列級別的許可權,決定了來自哪些主機的哪些使用者可以訪問資料庫表的欄位 |
procs_priv |
存放儲存過程和函式級別的許可權 |
Mysql資料庫許可權管理中,欄位user,password,authencation_string,db,table_name大小寫敏感,而欄位host,column_name,routine_name對大小寫不敏感。
2、使用者許可權管理
(1)建立使用者及授權
Mysql使用者建立可以通過create user/grant命令建立,也可以通過insert語句直接操作MySQL系統許可權表來建立。
建立及給使用者授權命令:
建立使用者:CREATE USER [email protected]'host' IDENTIFIED BY 'password'
使用者授權:GRANT permission ON database.tables TO [email protected]’host’
建立使用者並授權:GRANT permission ON database.tables TO [email protected]'hostt' WITH GRANT OPTION;
MYSQL建立使用者及給使用者授權的使用者名稱主機部分由兩部分組成,分別為使用者名稱和登入主機名,格式為’username’@’hostname’;hostname欄位可以使用主機名或者ip地址,同時hostname欄位允許使用”%”和”_”兩種字元進行匹配。
# 建立使用者dayi123並授予本地登入所有庫所有許可權
mysql> create user 'dayi123'@'localhost' identified by 'dayi123';
mysql> grant all privileges on *.* to 'dayi123'@'localhost' with grant option;
# 建立使用者使用者dayi通過192.168.0.0段ip地址登入的增刪該查跟新庫web的許可權
mysql> grant select,insert,update,delete,create,drop on web.* to 'dayi'@'192.168.%.%' identified by 'dayi123';
# 給root使用者授權可以通過192.168.0.0段地址登入
mysql> grant all on *.* to [email protected]'192.168.%.%' identified by 'dayi123';
(2)使用者許可權檢視
檢視已經授權給使用者許可權資訊命令:show grants for ‘username’@’host’
# 檢視授權給'dayi'@'192.168.%.%'的許可權資訊
mysql> show grants for 'dayi'@'192.168.%.%';
+---------------------------------------+
| Grants for [email protected]%.% |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'dayi'@'192.168.%.%' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `web`.* TO 'dayi'@'192.168.%.%' |
+---------------------------------------------------+
2 rows in set (0.00 sec)
檢視建立使用者的語句:show create user ‘username’@’host’
# 檢視給使用者’dayi’沒有授權的資訊
mysql> show create user [email protected]'192.168.%.%';
+------------------------------------------+
| CREATE USER for [email protected]%.% |
+--------------------------------------------+
| CREATE USER 'dayi'@'192.168.%.%' IDENTIFIED WITH 'mysql_native_password' AS '*8FD40AC91E6D5D89D1060096FDEF8A4ECAA05B5C' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |
+-----------------------------------------------+
1 row in set (0.00 sec)
(3)收回使用者許可權
收回使用者許可權是可以通過語句revoke完成,命令格式為:
Revoke permission on ‘database’,’tables’ from ‘username’@’host’
# 收回使用者dayi遠端登入的drop許可權;
mysql> revoke drop on web.* from [email protected]'192.168.%.%';
Query OK, 0 rows affected (0.00 sec)
(4)設定使用者密碼
Mysql資料庫一般在建立使用者時就給使用者設定了密碼,如果在使用者建立完成後想修改密碼,可通過相應的命令來完成。
1)修改其他使用者密碼(當前使用者要有許可權),一般在root使用者下操作
登入mysql後的修改命令:
Alter user ‘username’@’host’ identified by ‘newpassword’
Set password for ‘username’@’host’=password(‘newpassword’)
Grant user on permission to ‘user’@’host’ identified by ‘newpassword’
在系統命令列下修改:
mysqladmin –u uername –h host password “newpassword”
# 修改dayi123的密碼為dayi1234
mysql> alter user 'dayi123'@'localhost' identified by 'dayi1234';
Query OK, 0 rows affected (0.35 sec)
# 修改dayi遠端登入密碼為dayi1234
mysql> set password for 'dayi'@'192.168.%.%'=password('dayi1234');
Query OK, 0 rows affected, 1 warning (0.00 sec)
2)修改當前使用者密碼
alter user user() identified by ‘newpassword’
set password=password(‘newpassword’)
# 修改當前登入的root的密碼為dayi1234
mysql> alter user user() identified by 'dayi1234';
Query OK, 0 rows affected (0.00 sec)
(5)mysql使用者刪除
刪除命令:drop user ‘username’@’host’
# 刪除使用者dayi遠端登入
mysql> drop user 'dayi'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec)
# 檢視刪除後的使用者
mysql> select user,host from mysql.user;
+---------------+-------------+
| user | host |
+---------------+-------------+
| root | 192.168.%.% |
| dayi | localhost |
| dayi123 | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-------------+
(6)使用者的鎖定與解鎖
在建立使用者時或使用者建立後可以將使用者鎖定,使用者被鎖定後,此使用者無法完成登入,鎖定與解鎖的命令如下:
在建立使用者時鎖定使用者:
Create user ‘username’@’host’ identified by ‘password’ account lock;
使用者建立受鎖定使用者L
Alter user ‘username’@’host’ account lock
解鎖使用者:alter user ‘username’@’host’ account unlock;
# 鎖定使用者dayi123
mysql> alter user 'dayi123'@'localhost' account lock;
Query OK, 0 rows affected (0.00 sec)
# 使用者被鎖定後等錄時報如下錯:
~]# mysql -udayi123 -p
Enter password:
ERROR 3118 (HY000): Access denied for user 'dayi123'@'localhost'. Account is locked.
# 解鎖使用者dayi123
mysql> alter user 'dayi123'@'localhost' account unlock;
Query OK, 0 rows affected (0.00 sec)
(7)設定密碼過期策略
Mysql資料庫使用者同系統使用者一樣,可以設定密碼過期策略,密碼的過期天數可以在配置檔案裡面設定,也可以通過命令設定,通過命令為每個使用者設定密碼的過期天數則會覆蓋系統配置檔案中的設定。
1)配置檔案中設定
選項:default_password_lifetime=”過期天數” :如果設定為0,則密碼永不過期。
2)通過命令設定
命令:alter user ‘username’@’localhost’ password expire interval number day; 設定過期天數
alter user ‘username’@’localhost’ password expire never; 設定密碼不過期
alter user ‘username’@’localhost’ password expire default; 預設過期策略
alter user ‘username’@’localhost’ password expire; 手動強制密碼過期
#設定使用者dayi123的密碼180天后過期
mysql> alter user 'dayi123'@'localhost' password expire interval 180 day;
Query OK, 0 rows affected (0.00 sec)
# 設定使用者dayi的密碼立即過期
mysql> alter user 'dayi'@'localhost' password expire;
Query OK, 0 rows affected (0.00 sec)
# 設定密碼過期後執行命令時需要修改密碼才能執行命令
]# mysql -udayi –p
……
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
(8)mysql資料庫使用者資源限制
通過修改mysql資料庫資源限制可以限制使用者在某個時間段內連線mysql資料庫的時間、執行語句的次數等。
1)設定引數:
max_user_connections:全域性選項,限制所有使用者在同一時間連線mysql資料庫例項的數量
MAX_QUERIES_PER_HOUR:一個使用者在一個小時內可以執行查詢的次數(基本包含所有語句)
MAX_UPDATES_PER_HOUR:一個使用者在一個小時內可以執行修改的次數(僅包含修改資料庫或表的語句)
MAX_CONNECTIONS_PER_HOUR:一個使用者在一個小時內可以連線MySQL的時間
MAX_USER_CONNECTIONS:一個使用者可以在同一時間連線MySQL例項的數量
2)設定mysql資料庫使用者資源限制
設定mysql資料庫使用者資源限制時可以在建立使用者時設定,也可以在使用者建立完成後通過命令設定。
# 建立使用者day,並對使用者day的資源進行控制
mysql> create user 'day'@'localhost' identified by 'dayi123' with max_queries_per_hour 20 max_updates_per_hour 10 max_connections_per_hour 5 max_user_connections 2;
Query OK, 0 rows affected (0.00 sec)
# 對使用者dayi進行資源控制
mysql> alter user 'dayi'@'localhost' with max_queries_per_hour 20 max_updates_per_hour 10 max_connections_per_hour 5 max_user_connections 2;
Query OK, 0 rows affected (0.00 sec)
當需要取消某個選項的,只需將某個選項的值設定為0即可。