MySQL权限

来源:互联网 发布:淘宝今日分享任务在哪 编辑:程序博客网 时间:2024/06/13 12:48

授予MySQL帐户的权限决定了帐户可以执行哪些操作。MySQL权限在其应用的上下文和不同操作级别上有所不同:

  • 管理权限使用户能够管理MySQL服务器的操作。这些权限是全局的,因为它们不是特定于特定数据库的。

  • 数据库权限适用于数据库及其中的所有对象。可以为特定数据库或全局授予这些权限,以便它们适用于所有数据库。

  • 数据库对象(如表,索引,视图和存储例程)的权限可以针对数据库中的特定对象,数据库中给定类型的所有对象(例如数据库中的所有表)或全局的所有对象所有数据库中给定类型的对象)。

有关帐户权限的信息存储在 userdb, tables_privcolumns_priv,和procs_priv在表 mysql系统数据库(见 第6.2.2节“授权表”)。第6.2.6节“权限更改生效时指示的情况下,MySQL服务器启动时将这些表的内容读入内存 访问控制决定基于授权表的内存中副本。

一些MySQL版本引入了授予表结构的更改,以添加新的权限或功能。为了确保您可以利用任何新功能,只要升级MySQL,就可以更新授权表以拥有当前的结构。请参见第4.4.7节“ mysql_upgrade - 检查和升级MySQL表”

下表显示在GRANT和 REVOKE语句中使用的特权名称 ,以及与授权表中的每个权限相关联的列名称以及特权适用的上下文。

表6.2 GRANT和REVOKE的允许权限

特权上下文ALL [PRIVILEGES]“ 所有权限 ”的同义词服务器管理ALTERAlter_privALTER ROUTINEAlter_routine_priv存储例程CREATECreate_priv数据库,表或索引CREATE ROUTINECreate_routine_priv存储例程CREATE TABLESPACECreate_tablespace_priv服务器管理CREATE TEMPORARY TABLESCreate_tmp_table_privCREATE USERCreate_user_priv服务器管理CREATE VIEWCreate_view_priv查看DELETEDelete_privDROPDrop_priv数据库,表或视图EVENTEvent_priv数据库EXECUTEExecute_priv存储例程FILEFile_priv文件访问服务器主机GRANT OPTIONGrant_priv数据库,表或存储的例程INDEXIndex_privINSERTInsert_priv表或列LOCK TABLESLock_tables_priv数据库PROCESSProcess_priv服务器管理PROXY请参阅proxies_priv服务器管理REFERENCESReferences_priv数据库或表RELOADReload_priv服务器管理REPLICATION CLIENTRepl_client_priv服务器管理REPLICATION SLAVERepl_slave_priv服务器管理SELECTSelect_priv表或列SHOW DATABASESShow_db_priv服务器管理SHOW VIEWShow_view_priv查看SHUTDOWNShutdown_priv服务器管理SUPERSuper_priv服务器管理TRIGGERTrigger_privUPDATEUpdate_priv表或列USAGE“ 没有权限 ”的同义词服务器管理

以下列表提供了MySQL中可用权限的一般说明。特定的SQL语句可能具有比此处指示的更具体的权限要求。如果是这样,有关陈述的描述提供了细节。

  • ALL或 ALL 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有关详细信息,请参见第13.1.18.3节“CREATE TEMPORARY TABLE语法”

  • CREATE USER权限允许使用的ALTER USER, CREATE USER, DROP USER, RENAME USER,和 REVOKE ALL PRIVILEGES语句。

  • CREATE VIEW权限允许使用该CREATE VIEW 语句。

  • DELETE特权使行从数据库中的表被删除。

  • DROP特权使您能够删除(删除)现有的数据库,表和视图。DROP为了ALTER TABLE ... DROP PARTITION在分区表上使用语句需要该 权限该 DROP也需要特权TRUNCATE TABLE。 如果授予DROP 的特权mysql数据库用户,该用户可以删除其中的MySQL访问权限被存储在数据库中。

  • EVENT需要 该权限来创建,更改,删除或查看事件计划程序的事件。

  • EXECUTE执行存储例程(过程和函数)需要 该权限。

  • FILE权限允许您使用LOAD DATA INFILE和 SELECT ... INTO OUTFILE语句和 LOAD_FILE()功能在服务器主机上读取和写入文件具有该FILE权限的用户可以读取服务器主机上任何可由MySQL服务器读取或读取的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)该 FILE权限还使用户能够在MySQL服务器具有写入权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。作为一项安全措施, 服务器将不会覆盖现有文件。FILE从MySQL 5.7.17开始,该权限需要在语句中使用DATA DIRECTORYor INDEX DIRECTORYtable选项 CREATE TABLE

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

  • GRANT OPTION权限使您能够给予其他用户或从其他用户删除您拥有的这些权限。

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

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

  • LOCK TABLES权限允许使用显式LOCK TABLES语句来锁定具有该SELECT权限的表。这包括使用写锁,这可以阻止其他会话读取锁定的表。

  • PROCESS权限属于显示有关在服务器中执行的线程的信息(即有关会话执行的语句的信息)。该权限允许使用 SHOW PROCESSLISTmysqladmin进程列表来查看属于其他帐户的线程; 你可以随时看到你自己的线程。PROCESS权限还允许使用的SHOW ENGINE

  • PROXY权限使用户能够模拟或被称为另一用户。请参阅 第6.3.10节“代理用户”

  • REFERENCESMySQL 5.7.6之前 的权限未使用。从5.7.6开始,创建外键约束需要REFERENCES父表的 权限。

  • RELOAD权限允许使用该FLUSH语句。这也使中mysqladmin等效于命令FLUSH操作: flush-hostsflush-logs, flush-privileges, flush-status, flush-tables, flush-threadsrefresh,和reload

    reload命令告诉服务器将授权表重新加载到内存中。 flush-privileges是同义词 reloadrefresh 命令关闭并重新打开日志文件并刷新所有表。其他 命令执行类似于但更具体的功能 ,并且在某些情况下可能是优选的。例如,如果要仅仅刷新日志文件,是一个更好的选择。 flush-xxxrefreshflush-logsrefresh

  • REPLICATION CLIENT 权限允许使用的SHOW MASTER STATUSSHOW SLAVE STATUSSHOW BINARY LOGS语句。

  • REPLICATION SLAVE应授予从属服务器用作连接到当前服务器作为主服务器的帐户 的权限。没有此权限,从站不能请求对主服务器上的数据库进行的更新。

  • SELECT特权使您能够从数据库中的表中选择行。 SELECT语句SELECT只有在实际从表中检索行时才需要该 权限。一些 SELECT语句不访问表,可以在没有任何数据库的权限的情况下执行。例如,您可以使用 SELECT简单的计算器来评估不引用表的表达式:

    SELECT 1+1;SELECT PI()*2;

    SELECT读取列值的其他语句也需要 该权限。例如,SELECT需要用于上的右侧引用列 col_nameexpr 赋值UPDATE语句或用于在指定的列WHERE的条款 DELETE或 UPDATE语句。

    SELECT对于正在使用的表或视图EXPLAIN,还包括任何基础视图表,还需要 该权限 

  • SHOW DATABASES权限使帐户能够通过发出SHOW DATABASE语句来查看数据库名称 没有此权限的帐户只能看到具有某些权限的数据库,如果服务器已启动该--skip-show-database选项,则无法使用该语句 请注意,任何全局权限都是数据库的特权。

  • 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 TOCHANGE REPLICATION FILTER语句。

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

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

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

    • 启用mysqladmin调试 命令。

    • 启用InnoDB按键旋转。

    • 启用该DES_ENCRYPT()功能读取DES密钥文件 

    • 启用版本令牌用户定义的功能。

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

      • 使用该KILL 语句或mysqladmin kill 命令来杀死属于其他帐户的线程。(你可以随时杀死自己的线程。)

      • SUPER即使max_connections 达到系统变量控制的连接限制 ,服务器也接受客户端的 一个连接 

      • 即使read_only启用系统变量,也可以进行更新 这适用于表更新和帐户管理语句的使用,例如 GRANT和 REVOKE

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

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

    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数据库本身的特权可用于更改密码和其他访问权限信息。密码存储加密,所以恶意用户不能简单地读取它们来了解纯文本密码。但是,具有对user表 authentication_string列的写入访问权限的用户 可以更改帐户的密码,然后使用该帐户连接到MySQL服务器。


原创粉丝点击