mysql 用户权限学习

权限说明

以下列表提供了 MySQL 中每个可用权限的一般描述。特定的 SQL 语句可能具有比此处指出的更具体的权限要求。如果是,则相关声明的描述会提供详细信息。

  • ALLALL PRIVILEGES

    这些权限说明符的速记“可在给定的权限级别的所有权限” (除GRANT OPTION)。例如,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 语句创建临时表 。

    会话创建临时表后,服务器不会对该表执行进一步的权限检查。所述创建会话可以在桌子上进行任何操作,例如DROP TABLE, INSERT, UPDATE,或 SELECT

  • CREATE USER

    允许使用的ALTER USERCREATE USER, DROP USER, RENAME USER,和 REVOKE ALL PRIVILEGES语句。

  • CREATE VIEW

    启用CREATE VIEW语句的使用。

  • DELETE

    允许从数据库中的表中删除行。

  • DROP

    允许使用删除(移除)现有数据库、表和视图的语句。该 DROP权限才能使用该ALTER TABLE ... DROP PARTITION 语句的分区表。该 DROP也需要特权TRUNCATE TABLE

  • EVENT

    允许使用为事件调度程序创建、更改、删​​除或显示事件的语句。

  • EXECUTE

    允许使用执行存储例程(存储过程和函数)的语句。

  • FILE

    影响以下操作和服务器行为:

    • 使用LOAD DATAand SELECT ... INTO OUTFILE语句和 LOAD_FILE()函数在服务器主机上启用读取和写入文件。具有FILE 权限的用户可以读取服务器主机上任何世界可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)

    • 允许在 MySQL 服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。

    • 从 MySQL 5.7.17 开始,为语句启用DATA DIRECTORYorINDEX DIRECTORY表选项 CREATE TABLE

    作为安全措施,服务器不会覆盖现有文件。

    要限制可以读取和写入文件的位置,请将 secure_file_priv系统变量设置为特定目录。请参阅 第 5.1.7 节,“服务器系统变量”

  • GRANT OPTION

    使您能够向其他用户授予或撤销您自己拥有的那些权限。

  • INDEX

    允许使用创建或删除(删除)索引的语句。INDEX适用于现有表。如果您拥有CREATE表的 权限,则可以在CREATE TABLE语句中包含索引定义 。

  • INSERT

    允许将行插入到数据库的表中。 INSERT还需要对ANALYZE TABLE, OPTIMIZE TABLE和 REPAIR TABLE 表维护语句。

  • LOCK TABLES

    允许使用显式LOCK TABLES语句来锁定您拥有SELECT特权的表。这包括使用写锁,它可以防止其他会话读取锁定的表。

  • PROCESS

    PROCESS权限控制访问有关服务器内执行的线程的信息(即,有关语句的信息由会话执行)。可以使用SHOW PROCESSLIST 语句、mysqladmin processlist 命令和 INFORMATION_SCHEMA.PROCESSLIST 表访问可用的线程信息,如下所示:

    • 有了PROCESS 特权,用户可以访问有关所有线程的信息,甚至是属于其他用户的线程。

    • 没有PROCESS 权限,非匿名用户可以访问自己线程的信息,但不能访问其他用户的线程,匿名用户无法访问线程信息。

    笔记

    Performance Schema threads表还提供线程信息,但表访问使用不同的权限模型。

    PROCESS特权还允许使用SHOW ENGINE语句、访问 INFORMATION_SCHEMA InnoDB表(名称以 开头的表INNODB_)和(从 MySQL 5.7.31 开始)访问INFORMATION_SCHEMA FILES表。

  • PROXY

    使一个用户能够冒充或成为另一个用户。

  • REFERENCES

    创建外键约束需要REFERENCES父表的 特权。

  • RELOAD

    RELOAD实现以下操作:

    • FLUSH 语句的 使用。

    • 使用中mysqladmin等效于命令FLUSH 操作:flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh,和 reload

      reload命令告诉服务器将授权表重新加载到内存中。 flush-privileges是 的同义词 reload。该 refresh命令关闭并重新打开日志文件并刷新所有表。其他 命令执行类似于 的功能 ,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件, 则比 . flush-xxxrefreshflush-logsrefresh

    • 使用执行各种操作的mysqldump选项FLUSH: --flush-logs和 --master-data.

    • RESET 语句的 使用。

  • REPLICATION CLIENT

    允许使用的SHOW MASTER STATUSSHOW SLAVE STATUSSHOW BINARY LOGS语句。

  • REPLICATION SLAVE

    启用该帐户已作出对数据库的源服务器上,使用请求更新 SHOW SLAVE HOSTS, SHOW RELAYLOG EVENTS和 SHOW BINLOG EVENTS 语句。使用 mysqlbinlog选项 --read-from-remote-server ( -R) 和 --read-from-remote-master. 将此权限授予副本服务器用于连接到当前服务器作为其源的帐户。

  • SELECT

    允许从数据库中的表中选择行。 SELECT语句SELECT仅在实际访问表时才需要 特权。有些 SELECT语句不访问表,可以在没有任何数据库许可的情况下执行。例如,您可以将其 SELECT用作一个简单的计算器来计算不引用表的表达式:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-sql"><span style="color:#0077aa">SELECT</span> <span style="color:#990055">1</span><span style="color:#a67f59">+</span><span style="color:#990055">1</span><span style="color:#999999">;</span>
    <span style="color:#0077aa">SELECT</span> <span style="color:#dd4a68">PI</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#a67f59">*</span><span style="color:#990055">2</span><span style="color:#999999">;</span></code></span></span></span></span>

    SELECT其他读取列值的语句也需要 该权限。例如, 在 语句SELECTcol_name=expr赋值右侧引用的 UPDATE列或在or 语句的WHERE子句中 命名的列需要它 。 DELETEUPDATE

    SELECT是需要与用于表或视图特权 EXPLAIN,包括在视图定义任何潜在的表。

  • SHOW DATABASES

    通过发出SHOW DATABASE语句使帐户能够查看数据库名称 。没有这个权限的帐户只能看到他们有一些权限的数据库,如果服务器是用该--skip-show-database选项启动的,则根本不能使用该语句 。

    警告

    由于全局权限被视为适用于所有数据库的权限,因此任何全局权限都使用户能够SHOW DATABASES通过检查INFORMATION_SCHEMA SCHEMATA表或通过检查表来查看所有数据库名称 。

  • SHOW VIEW

    启用SHOW CREATE VIEW语句的使用。与 一起使用的视图也需要此权限EXPLAIN

  • SHUTDOWN

    启用SHUTDOWN 语句、mysqladmin shutdown 命令和 mysql_shutdown()C API 函数的使用。

  • SUPER

    影响以下操作和服务器行为:

    • 通过修改全局系统变量来启用服务器配置更改。对于某些系统变量,设置会话值也需要 SUPER权限。如果系统变量受到限制并且需要特殊权限来设置会话值,则变量描述会指示该限制。实例包括 binlog_format, sql_log_bin,和 sql_log_off

    • 启用对全局事务特性的更改

    • 使帐户能够启动和停止复制,包括组复制。

    • 允许使用CHANGE MASTER TOandCHANGE REPLICATION FILTER语句。

    • 通过PURGE BINARY LOGSand BINLOG语句启用二进制日志控制 。

    • 允许在执行视图或存储程序时设置有效的授权 ID。具有此权限的用户可以在DEFINER视图或存储程序的属性中指定任何帐户 。

    • 允许使用的CREATE SERVERALTER SERVERDROP SERVER语句。

    • 启用mysqladmin 调试 命令的使用。

    • 启用InnoDB加密密钥轮换。

    • 启用通过该DES_ENCRYPT()函数读取 DES 密钥文件 。

    • 启用版本令牌功能的执行。

    • 启用对不允许非SUPER帐户的客户端连接的控制:

      • 允许使用 KILL语句或 mysqladmin kill命令来终止属于其他帐户的线程。(一个帐户总是可以杀死自己的线程。)

      • 客户端连接init_connect时 ,服务器不执行 系统变量内容 SUPER

      • SUPER即使max_connections 达到了系统变量配置的连接限制 ,服务器也会接受来自客户端的 一个连接 。

      • 处于离线模式(offline_mode 启用)的服务器不会SUPER在下一个客户端请求时终止 客户端连接,并接受来自SUPER客户端的新连接 。

      • 即使read_only启用了系统变量,也可以执行更新 。这适用于明确的表的更新,并使用账户管理语句,如GRANT和 REVOKE隐式更新表。

    SUPER 如果启用了二进制日志记录, 您可能还需要创建或更改存储函数的权限,如 第 23.7 节“存储程序二进制日志记录”中所述

  • TRIGGER

    启用触发器操作。您必须具有此权限才能为表创建、删除、执行或显示该表的触发器。

    当触发器被激活(由谁拥有特权执行用户INSERT, UPDATE或 DELETE与触发器关联的表的语句),触发器执行要求谁定义触发器的用户仍然有TRIGGER对表的特权。

  • UPDATE

    允许更新数据库表中的行。

  • USAGE

    此权限说明符代表“无权限”。”它在全局级别 GRANT用于修改帐户属性,例如资源限制或 SSL 特征,而无需在权限列表中命名特定帐户权限。SHOW GRANTS显示 USAGE以指示帐户没有权限级别的权限。

特权授予指南

只授予帐户所需的权限是个好主意。您在授予FILE和管理权限时应特别小心:

  • FILE可以被滥用以将 MySQL 服务器可以在服务器主机上读取的任何文件读入数据库表。这包括服务器数据目录中的所有世界可读文件和文件。然后可以访问该表 SELECT以将其内容传输到客户端主机。

  • GRANT OPTION允许用户将他们的权限授予其他用户。具有不同权限且具有GRANT OPTION权限的两个用户可以合并权限。

  • ALTER 可用于通过重命名表来破坏特权系统。

  • SHUTDOWN 可以被滥用以通过终止服务器完全拒绝向其他用户提供服务。

  • PROCESS 可用于查看当前正在执行的语句的纯文本,包括设置或更改密码的语句。

  • SUPER 可用于终止其他会话或更改服务器的运行方式。

  • mysql系统数据库本身授予的权限可用于更改密码和其他访问权限信息:

    • 密码是加密存储的,因此恶意用户不能简单地阅读它们来知道明文密码。但是,对mysql.user系统表 authentication_string列具有写访问权限的用户 可以更改帐户的密码,然后使用该帐户连接到 MySQL 服务器。

    • INSERT或 UPDATEmysql系统数据库授予的 权限分别使用户能够添加权限或修改现有权限。

    • DROP对于 mysql系统数据库,用户可以远程访问权限表,甚至是数据库本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值