MySQL GRANT

摘要:在本教程中,您将学习如何使用 MySQL GRANT语句向用户帐户授予权限。

MySQL GRANT语句简介

CREATE USER语句创建一个或多个没有权限的用户帐户。这意味着用户帐户可以登录MySQL服务器,但不能执行任何操作,例如选择数据库和从表中查询数据

要允许用户帐户使用数据库对象,您需要授予用户帐户权限。 GRANT语句授予用户帐户一项或多项权限。

下面说明了GRANT语句的基本语法:

GRANT privilege [,privilege],.. 
ON privilege_level 
TO account_name;Code language: SQL (Structured Query Language) (sql)

在这个语法中:

首先,在GRANT关键字后指定一个或多个权限。如果授予多个权限,需要用逗号分隔权限。

此示例将示例数据库中的employees SELECT权限授予用户帐户bob@localhost

GRANT SELECT
ON employees
TO bob@localhost;Code language: SQL (Structured Query Language) (sql)

以下示例将表employees UPDATEDELETEINSERT权限授予bob@localhost

GRANT INSERT, UPDATE, DELETE
ON employees 
TO bob@localhost;Code language: SQL (Structured Query Language) (sql)

其次,指定确定特权适用级别的privilege_level

MySQL 支持以下主要权限级别:

MySQL 授予 - 权限级别

全局权限适用于 MySQL 服务器中的所有数据库。要分配全局权限,请使用*.*语法,例如:

GRANT SELECT 
ON *.* 
TO bob@localhost;
Code language: SQL (Structured Query Language) (sql)

账户用户bob@localhost可以查询当前MySQL Server所有数据库中所有表的数据。

数据库权限适用于数据库中的所有对象。要分配数据库级别权限,请使用 ON database_name.*语法,例如:

GRANT INSERT 
ON classicmodels.* 
TO bob@localhost;Code language: SQL (Structured Query Language) (sql)

在此示例中, bob@localhost可以将数据插入classicmodels数据库中的所有表中。

表权限适用于表中的所有列。要分配表级权限,请使用ON database_name.table_name语法,例如:

GRANT DELETE 
ON classicmodels.employees 
TO bob@localhsot;Code language: SQL (Structured Query Language) (sql)

在此示例中, bob@localhost可以从数据库classicmodels中的employees表中删除行。

如果跳过数据库名称,MySQL 将使用默认数据库,如果没有默认数据库,则会发出错误。

列权限适用于表中的单个列。您必须为每个权限指定一个或多个列,例如:

GRANT 
   SELECT (employeeNumner,lastName, firstName,email), 
   UPDATE(lastName) 
ON employees 
TO bob@localhost;
Code language: SQL (Structured Query Language) (sql)

在此示例中, bob@localhost可以从employeeNumberlastNamefirstNameemail四列中选择数据,并仅更新employees表中的lastName列。

存储例程权限适用于存储过程和存储函数,例如:

GRANT EXECUTE 
ON PROCEDURE CheckCredit 
TO bob@localhost;
Code language: SQL (Structured Query Language) (sql)

在本例中, bob@localhost可以执行当前数据库中的存储过程CheckCredit

代理用户权限允许一个用户成为另一用户的代理。代理用户获得被代理用户的所有权限。例如:

GRANT PROXY 
ON root 
TO alice@localhost;
Code language: SQL (Structured Query Language) (sql)

在此示例中, alice@localhost假定root的所有权限。

最后,在TO关键字后指定要授予权限的用户的帐户名。

请注意,为了使用GRANT语句,您必须具有GRANT OPTION权限以及您正在授予的权限。如果启用了read_only系统变量,则需要具有SUPER权限才能执行GRANT语句。

MySQL GRANT语句示例

通常,您首先使用CREATE USER语句创建新的用户帐户,然后使用GRANT语句向用户授予权限。

首先,使用以下CREATE USER语句创建一个名为super@localhost的新用户:

CREATE USER super@localhost 
IDENTIFIED BY 'Secure1Pass!';Code language: SQL (Structured Query Language) (sql)

其次,使用SHOW GRANTS语句显示分配给super@localhost user权限。

SHOW GRANTS FOR super@localhost;Code language: SQL (Structured Query Language) (sql)
MySQL 授予 - 无特权

USAGE表示super@localhost可以登录数据库但没有权限。

第三,将当前数据库服务器中所有数据库的所有权限授予super@localhost

GRANT ALL 
ON classicmodels.* 
TO super@localhost;Code language: SQL (Structured Query Language) (sql)

第四,再次使用SHOW GRANTS语句:

SHOW GRANTS FOR super@localhost;Code language: SQL (Structured Query Language) (sql)
MySQL 授予示例

GRANT语句允许的权限

下表说明了可用于GRANTREVOKE语句的所有允许的权限:

特权意义等级
全球的数据库桌子柱子存储的例程代理人
所有[特权]授予指定访问级别的所有权限( GRANT OPTION除外)
改变允许用户使用ALTER TABLE语句X X X
改变常规允许用户更改和删除存储过程或存储函数。 X X X
创造允许用户创建数据库和表X X X
创建例程允许用户创建存储过程和存储函数X X
创建表空间允许用户创建、更改或删除表空间和日志文件组X
创建临时表允许用户使用CREATE TEMPORARY TABLE语句创建临时表X X
创建用户允许用户使用CREATE USER, DROP USER, RENAME USERREVOKE ALL PRIVILEGES语句。 X
创建视图允许用户创建或修改视图。 X X X
删除允许用户使用DELETE语句X X X
降低允许用户删除数据库、表和视图X X X
事件启用事件调度程序的事件使用。 X X
执行允许用户执行存储的例程X X X
文件允许用户读取数据库目录中的任何文件。 X
授予选择权允许用户有权授予或撤销其他帐户的权限。 X X X X X
指数允许用户创建或删除索引。 X X X
插入允许用户使用INSERT语句X X X X
锁表允许用户对您拥有SELECT权限的表使用LOCK TABLES X X
过程允许用户使用SHOW PROCESSLIST语句查看所有进程。 X
代理人启用用户代理。
参考允许用户创建外键X X X X
重新加载允许用户使用FLUSH语句X
复制客户端允许用户查询主服务器或从服务器在哪里X
复制从机允许用户使用复制从服务器从主服务器读取二进制日志事件。 X
选择允许用户使用SELECT语句X X X X
显示数据库允许用户显示所有数据库X
显示视图允许用户使用SHOW CREATE VIEW语句X X X
关闭允许用户使用 mysqladmin shutdown 命令X
极好的允许用户使用其他管理操作,例如CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBAL和 mysqladmin 命令X
扳机允许用户使用TRIGGER操作。 X X X
更新允许用户使用UPDATE语句X X X X
用法相当于“无特权”

在本教程中,您学习了如何使用 MySQL GRANT语句向用户授予权限。

本教程有帮助吗?