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 username@'host' IDENTIFIED BY 'password'
用戶授權:GRANT permission ON database.tables TO username@’host’
創建用戶並授權:GRANT permission ON database.tables TO username@'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 root@'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 dayi@'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 dayi@'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即可。