授予MySQL帐户的特权决定了该帐户可以执行哪些操作。MySQL特权在应用的上下文和不同的操作级别上有所不同:
管理权限允许用户管理MySQL服务器的操作。这些特权是全局的,因为它们不特定于特定的数据库。
数据库特权适用于数据库及其中的所有对象。可以为特定数据库授予这些特权,也可以全局授予这些特权,以便它们适用于所有数据库。
数据库对象(如表、索引、视图和存储例程)的特权可以授予给数据库中的特定对象,授予给数据库中给定类型的所有对象(例如,数据库中的所有表),或者全局授予给所有数据库中给定类型的所有对象。
的授权表中存储有关帐户特权的信息mysql
系统数据库。有关这些表的结构和内容的描述,请参见第6.2.3节“授予表格”.MySQL服务器在启动时将授权表的内容读入内存,并在中指定的情况下重新加载它们第6.2.9节,“当特权更改生效时”.服务器将访问控制决策建立在授权表的内存副本上。
一些MySQL版本对授权表进行了更改,以添加新的特权或特性。为了确保可以利用任何新功能,每当升级MySQL时,请将授权表更新为当前结构。看到第2.11节“升级MySQL”.
下面的部分总结了可用的特权,提供了每个特权的更详细的描述,并提供了使用指南。
中使用的特权名格兰特
而且撤销
语句,以及与授予表中的每个特权相关联的列名,以及应用该特权的上下文。
表6.2 GRANT和REVOKE的允许权限
特权 | 格兰特表列 | 上下文 |
---|---|---|
所有(特权) |
的同义词”所有权限” | 服务器管理 |
改变 |
Alter_priv |
表 |
改变日常 |
Alter_routine_priv |
存储程序 |
创建 |
Create_priv |
数据库、表或索引 |
创建程序 |
Create_routine_priv |
存储程序 |
创建表空间 |
Create_tablespace_priv |
服务器管理 |
创建临时表 |
Create_tmp_table_priv |
表 |
创建用户 |
Create_user_priv |
服务器管理 |
创建视图 |
Create_view_priv |
的观点 |
删除 |
Delete_priv |
表 |
下降 |
Drop_priv |
数据库、表或视图 |
事件 |
Event_priv |
数据库 |
执行 |
Execute_priv |
存储程序 |
文件 |
File_priv |
对服务器主机的文件访问 |
GRANT选项 |
Grant_priv |
数据库、表或存储例程 |
指数 |
Index_priv |
表 |
插入 |
Insert_priv |
表或列 |
锁表 |
Lock_tables_priv |
数据库 |
过程 |
Process_priv |
服务器管理 |
代理 |
看到proxies_priv 表格 |
服务器管理 |
参考文献 |
References_priv |
数据库或表 |
重新加载 |
Reload_priv |
服务器管理 |
复制客户端 |
Repl_client_priv |
服务器管理 |
复制的奴隶 |
Repl_slave_priv |
服务器管理 |
选择 |
Select_priv |
表或列 |
显示数据库 |
Show_db_priv |
服务器管理 |
显示视图 |
Show_view_priv |
的观点 |
关闭 |
Shutdown_priv |
服务器管理 |
超级 |
Super_priv |
服务器管理 |
触发 |
Trigger_priv |
表 |
更新 |
Update_priv |
表或列 |
使用 |
的同义词”没有特权” | 服务器管理 |
下面的列表提供了MySQL中每个可用特权的一般描述。特定的SQL语句可能具有比这里所指出的更具体的特权需求。如果是,相关语句的描述将提供详细信息。
这些特权说明符是简写的”在给定特权级别上可用的所有特权”(除了
GRANT选项
).例如,授予所有
在全局级或表级,分别授予所有全局特权或所有表级特权。启用使用
ALTER TABLE
语句更改表的结构。ALTER TABLE
还需要创建
而且插入
特权。重命名表需要改变
而且下降
在旧桌子上,创建
,插入
在新桌子上。允许使用更改或删除存储例程(存储过程和函数)的语句。
允许使用创建新数据库和表的语句。
允许使用创建存储例程(存储过程和函数)的语句。
允许使用创建、更改或删除表空间和日志文件组的语句。
控件创建临时表
创建临时表
声明。在会话创建临时表之后,服务器不再对该表执行进一步的特权检查。正在创建的会话可以对表执行任何操作,例如
删除表
,插入
,更新
,或选择
.有关更多信息,请参见第13.1.18.2节,“创建临时表语句”.启用使用
创建视图
声明。允许从数据库中的表中删除行。
允许使用删除(删除)现有数据库、表和视图的语句。的
下降
权限使用ALTER TABLE……删除分区
语句。的下降
也需要特权截断表
.启用使用为事件调度程序创建、更改、删除或显示事件的语句。
允许使用执行存储例程(存储过程和函数)的语句。
影响以下操作和服务器行为:
控件允许在服务器主机上读写文件
加载数据
而且选择……到输出文件
语句和LOAD_FILE ()
函数。的用户文件
特权可以读取服务器主机上任何世界可读或MySQL服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问这些文件中的任何一个。)支持在MySQL服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现特权表的文件。
从MySQL 5.7.17开始,允许使用
数据目录
或索引目录
表选项的创建表
声明。
作为一种安全措施,服务器不会覆盖现有文件。
若要限制可读写文件的位置,请设置
secure_file_priv
系统变量到特定目录。看到第5.1.7节,“服务器系统变量”.使您能够向其他用户授予或撤销您自己所拥有的特权。
的
过程
特权控制对服务器中执行的线程信息(即会话执行的语句信息)的访问。线程信息可用显示PROCESSLIST
声明中mysqladmin processlist命令,INFORMATION_SCHEMA。PROCESSLIST
表格可访问如下:请注意性能模式
线程
Table也提供线程信息,但是表访问使用不同的特权模型。看到第25.12.16.3节“线程表”.的
过程
权限还允许使用显示引擎
语句,访问INFORMATION_SCHEMA
InnoDB
表(名称以。开头的表)INNODB_
)和(从MySQL 5.7.31开始)访问INFORMATION_SCHEMA
文件
表格允许一个用户模拟或成为另一个用户。看到第6.2.14节“代理用户”.
外键约束的创建需要
参考文献
父表的特权。的
重新加载
启用以下操作:的使用
冲洗
声明。使用mysqladmin命令等价于
冲洗
操作:flush hosts
,flush-logs
,flush-privileges
,flush status
,刷新表
,flush-threads
,刷新
,重新加载
.的
重新加载
命令告诉服务器将授权表重新加载到内存中。flush-privileges
是的同义词吗重新加载
.的刷新
命令关闭并重新打开日志文件并刷新所有表。另一个冲洗,
命令执行的功能类似于xxx
刷新
,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件,flush-logs
是更好的选择吗刷新
.使用, mysqldump执行各种操作的选项
冲洗
操作:——flush-logs
而且——主数据
.的使用
重置
声明。
控件使帐户能够请求已对源服务器上的数据库进行的更新
显示奴隶主人
,显示RELAYLOG的事件
,显示BINLOG的事件
语句。类也需要此特权mysqlbinlog选项——read-from-remote-server
(- r
),——read-from-remote-master
.将此特权授予复制服务器用于连接到当前服务器作为源的帐户。允许从数据库中的表中选择行。
选择
声明要求选择
只有当它们实际访问表时才具有特权。一些选择
语句不能访问表,可以在没有任何数据库权限的情况下执行语句。例如,你可以用选择
作为一个简单的计算器,计算不引用表的表达式:选择1 + 1;选择π()* 2;
的
选择
对于读取列值的其他语句也需要特权。例如,选择
的右侧引用的列需要col_name
=expr
分配在更新
类中命名的列在哪里
条款删除
或更新
语句。命令使帐户能够查看数据库名称
显示数据库
声明。不具有此特权的帐户只能看到它们具有某些特权的数据库,如果服务器是用——skip-show-database
选择。启用使用
关闭
声明中mysqladmin关闭命令,mysql_shutdown ()
C API函数。影响以下操作和服务器行为:
通过修改全局系统变量启用服务器配置更改。对于某些系统变量,设置会话值也需要
超级
特权。如果系统变量受到限制,且需要特殊权限才能设置会话值,则由变量描述标识该限制。例子包括binlog_format
,sql_log_bin
,sql_log_off
.另请参阅第5.1.8.1节“系统变量特权”.启用对全局事务特征的更改(请参阅第13.3.6节,“SET TRANSACTION语句”).
启用帐户启动和停止复制,包括“组复制”。
允许在执行视图或存储程序时设置有效授权ID。具有此权限的用户可以在
定义者
视图或存储程序的属性。启用使用mysqladmin调试命令。
使
InnoDB
加密密钥轮换。允许读取DES密钥文件
DES_ENCRYPT ()
函数。启用版本令牌函数的执行。
启用对不允许的客户端连接的控制
超级
账户:启用使用
杀了
语句或mysqladmin杀死命令杀死属于其他帐户的线程。(一个帐户总是可以杀死自己的线程。)服务器不执行
init_connect
当系统变量内容超级
客户端连接。对象的一个连接
超级
客户端即使配置了连接限制max_connections
到达系统变量。处于脱机模式的服务器(
offline_mode
已启用)不会终止超级
的客户端连接,并接受新的连接超级
客户。的情况下也可以执行更新
read_only
启用系统变量。这适用于显式表更新和帐户管理语句的使用,如格兰特
而且撤销
它隐式地更新表。
您可能还需要
超级
如果启用了二进制日志记录,则可以创建或更改存储函数的特权第23.7节“存储程序二进制日志记录”.使触发操作。您必须对表具有为该表创建、删除、执行或显示触发器的权限。
当触发器被激活时(由具有执行权限的用户激活)
插入
,更新
,或删除
语句),触发器的执行要求定义触发器的用户仍然拥有触发
该表的特权。允许更新数据库中表中的行。
该特权说明符表示”没有特权。”它在全局级别使用
格兰特
修改帐户属性,如资源限制或SSL特征,而无需在特权列表中指定特定的帐户特权。秀奖助金
显示使用
表示帐户在特权级别上没有特权。
最好只授予帐户所需的特权。你在授予文件
管理权限: