- MySQL權限說明
MySQL是經常要使用的一種關系型數據庫,數據庫作為存儲重要數據的地方,相應的,對數據庫的授權管理,也必須很小心,下面,我將MySQL的權限作了整理,方便需要的時候查看。
MySQL權限級別
服務器 》 數據庫 》 表 》 列
另外還有存儲過程、視圖和索引
MySQL權限列表:
權 限 |
作用范圍 |
作 用 |
all |
服務器 |
所有權限 |
select |
表、列 |
選擇行 |
insert |
表、列 |
插入行 |
update |
表、列 |
更新行 |
delete |
表 |
刪除行 |
create |
數據庫、表、索引 |
創建 |
drop |
數據庫、表、視圖 |
刪除 |
reload |
服務器 |
允許使用flush語句 |
shutdown |
服務器 |
關閉服務 |
process |
服務器 |
查看線程信息 |
file |
服務器 |
文件操作 |
grant option |
數據庫、表、存儲過程 |
授權 |
references |
數據庫、表 |
外鍵約束的父表 |
index |
表 |
創建/刪除索引 |
alter |
表 |
修改表結構 |
show databases |
服務器 |
查看數據庫名稱 |
super |
服務器 |
超級權限 |
create temporary tables |
表 |
創建臨時表 |
lock tables |
數據庫 |
鎖表 |
execute |
存儲過程 |
執行 |
replication client |
服務器 |
允許查看主/從/二進制日志狀態 |
replication slave |
服務器 |
主從復制 |
create view |
視圖 |
創建視圖 |
show view |
視圖 |
查看視圖 |
create routine |
存儲過程 |
創建存儲過程 |
alter routine |
存儲過程 |
修改/刪除存儲過程 |
create user |
服務器 |
創建用戶 |
event |
數據庫 |
創建/更改/刪除/查看事件 |
trigger |
表 |
觸發器 |
create tablespace |
服務器 |
創建/更改/刪除表空間/日志文件 |
proxy |
服務器 |
代理成為其它用戶 |
usage |
服務器 |
沒有權限 |
MySQL授權命令
創建用戶
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
CREATE USER 'user'@'192.168.1.10' IDENTIFIED BY 'password';
CREATE USER 'user'@'%'; #不設置密碼
說明:如果主機位使用%,那么將允許從任意主機登錄;密碼可以為空,若為空,則用戶可以不需要密碼登錄服務器。
補充:主機名或者IP中可以使用%進行通配,如**%.baidu.com**;192.168.1.%
補充:如果即有字母,又有數字,則不進行匹配(防止惡意訪問)
補充:IPv4地址可以使用掩碼,如192.168.0.0/255.255.0.0 匹配整個B類地址
進行授權
GRANT privileges ON databasename.tablename TO 'username'@'host';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON . TO 'user'@'%';
如果授予所有權限,則可以使用ALL,所有數據庫和所有表可以使用*
注意:ALL并不包括GRANT OPTION權限(也不包括proxy權限),如果需要使本用戶可以給其它用戶授權,則可以使用如下語句:
GRANT GRANT OPTION ON . TO 'user'@'%'; 或者:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
修改密碼
SET PASSWORD FOR 'user'@'%' = PASSWORD('pass');
mysqladmin -u用戶名 -p舊密碼 password 新密碼
取消授權
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
REVOKE SELECT ON . FROM 'user'@'%';
刪除用戶
DROP USER 'username'@'host';
查看用戶權限
查看當前用戶權限:
show grants;
查看其它用戶權限:
show grants for 'user'@'%';
用戶重命名
RENAME USER 'user'@'%' TO 'dong'@'%';
刷新權限
flush privileges;
回到頂部
MySQL權限說明
all,服務器
授予所有權限
alter,表
可以使用alter table來改變表的結構。alter table同時需要create和insert權限;重命名表需要舊表的alter和drop權限,新表的create和insert權限
alter routine,存儲過程
更改和刪除存儲過程(過程和函數)
create,數據庫/表/索引
允許創建新的數據庫和表以及索引
create routine,存儲過程
允許創建存儲過程(過程和函數)
create tablespace,服務器
創建、更改或刪除表空間和日志文件組
create temporary tables,表
使用create temporary table創建臨時表。會話創建臨時表后,不再對該表進行權限檢查,創建會話可以對該表執行任何操作
create user,服務器
創建用戶,允許使用alter user/create user/drop user/rename user/revoke all privileges語句對用戶權限進行操作
create view,視圖
創建視圖,允許使用create view語句
delete,表
允許刪除行
drop,數據庫/表/視圖
刪除現有數據庫、表和視圖。在分區表使用alter table … drop partition語句,truncate table也需要drop權限。若將mysql庫的drop權限授予用戶,則該用戶可以刪除權限數據庫
event,數據庫
創建、更改、刪除或查看事件調度程序的事件
execute,存儲過程
執行存儲過程(過程和函數)
file,服務器
允許使用load data infile和select … into outfile語句以及load_file()函數。從5.7.17開始,create table語句中的data directory或者index directory選項也需要該權限
grant option,數據庫/表/存儲過程
授予其它用戶或者從其它用戶刪除你所擁有的權限。 grant option權限使用戶可以將其權限授予其他用戶。具有不同特權和grant option權限的兩個用戶可以組合特權。
index,表
創建或刪除索引。適用于現有表,如果你具有create權限,則可以在創建表語句中包含索引定義
insert,表/列
插入行。analyze table/optimize table/repair table表維護語句也需要該權限
lock tables,數據庫
鎖表。使用lock tables語句顯示的鎖定你擁有select權限的表,包括寫入鎖,可以防止其它他話讀取鎖定的表
process,服務器
顯示線程信息。使用show processlist/mysqladmin processlist查看其它用戶的線程,還可以使用show engine語句
proxy,服務器
代理權限。可以代理成為另一個用戶
references,數據庫/表
創建外鍵約束的父表需要該權限
reload,服務器
允許使用flush語句。同進還啟用等效的mysqladmin命令:flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,flush-threads,refresh和reload
replication client,服務器
允許使用show master status/show slave status/show binary logs語句
replication slave,服務器
允許從服務器請求當前主服務器上的更新
select,表/列
選擇行。其他讀取列的語句也需要該權限,如delete或update語句中where子句指定的列
show databases,服務器
通過show databases語句查看數據庫名稱
show view,視圖
通過show create view語句查看視圖,與explain一起使用的視圖也需要此權限
shutdown,服務器
使用shutdown語句,mysqladmin關閉以及mysql_shutdown()函數
super,服務器
通過修改全局系統變量來啟用配置更改。對某些系統變量,設置會話值也需要該權限。binlog_format,sql_log_bin,sql_log_off
全局事務特性更改
啟動和停止復制,包括組復制
允許使用change master to和change replication filter語句
二進制日志控制,purge binary logs和binlog語句
執行視圖或存儲程序時啟用授權ID
允許使用create server,alter server和drop server語句
允許使用mysqladmin debug命令
啟用innodb密鑰輪換
使用des_encrypt()函數讀取DES密鑰文件
使用版本令牌用戶定義函數
對非super帳戶客戶端連接的控制
使用kill語句或者mysqladmin kill命令終止屬于其他用戶的線程
即使達到max_connections控制的連接限制,服務器也會授受來自super客戶端的連接
即使使用了read_only系統變量,也可以執行更新
super客戶端連接時,服務器不執行init_connect系統變量內容
處于脫機模式offline_mode的服務器不會終止super客戶端的連接,并接受來自super客戶端的新連接
如果啟用二進制日志記錄,可能還需要super權限創建或更改存儲過程
trigger,服務器
觸發器。創建、刪除、執行、顯示該表的觸發器
update,表/列
更新行
usage,服務器
沒有任何權限