MySQL授权GRANT语句

时间:2019-11-20 08:52:34  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL GRANT语句为用户帐户授予特权。

MySQL GRANT语句简介

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

要允许用户帐户使用数据库对象,您需要授予用户帐户特权。
并且GRANT语句向用户帐户授予一个或多个特权。

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

GRANT privilege [,privilege],.. 
ON privilege_level 
TO account_name;

使用以下语法:

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

本示例将示例数据库中表employees的表的SELECT特权授予用户bob @ localhost:

GRANT SELECT
ON employees
TO bob@localhost;

以下示例将表employees的UPDATE,DELETE和INSERT特权授予bob @ localhost:

GRANT INSERT, UPDATE, DELETE
ON employees 
TO bob@localhost;

其次,指定privilege_level,该特权确定要应用特权的级别。

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

全局特权适用于MySQL Server中的所有数据库。
要分配全局特权,请使用*。
*语法,例如:

GRANT SELECT 
ON *.* 
TO bob@localhost;

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

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

GRANT INSERT 
ON classicmodels.* 
TO bob@localhost;

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

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

GRANT DELETE 
ON classicmodels.employees 
TO bob@localhsot;

在此示例中,bob @ localhost可以从数据库经典模型中的表employee中删除行。

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

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

GRANT 
   SELECT (employeeNumner,lastName, firstName,email), 
   UPDATE(lastName) 
ON employees 
TO bob@localhost;

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

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

GRANT EXECUTE 
ON PROCEDURE CheckCredit 
TO bob@localhost;

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

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

GRANT PROXY 
ON root 
TO alice@localhost;

在此示例中,alice @ localhost承担root的所有特权。

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

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

MySQL GRANT语句示例

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

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

CREATE USER super@localhost 
IDENTIFIED BY 'Secure1Pass!';

其次,使用SHOW GRANTS语句显示分配给super @ localhost用户的特权。

SHOW GRANTS FOR super@localhost;

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

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

GRANT ALL 
ON classicmodels.* 
TO super@localhost;

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

SHOW GRANTS FOR super@localhost;

GRANT语句的允许特权

下表说明了可用于GRANT和REVOKE语句的所有允许的特权:

权限说明用于表用于列用于存储例程用于代理
ALL [PRIVILEGES]授予指定访问级别的所有权限,授予选项除外
ALTER允许用户使用ALTER TABLEstatement
ALTER ROUTINE允许用户更改和删除存储过程或存储函数。
CREATE允许用户创建数据库和表
CREATE ROUTINE允许用户创建存储过程和存储函数
CREATE TABLESPACE允许用户创建、更改或删除表空间和日志文件组
CREATE TEMPORARY TABLES允许用户使用createtemporary table语句创建临时表
CREATE USER允许用户使用CREATE user、DROP user、RENAME user和REVOKE ALL PRIVILEGES语句。
CREATE VIEW允许用户创建或修改视图。
DELETE允许用户使用DELETE语句
DROP允许用户删除数据库、表和视图
EVENT启用事件计划程序的事件使用。
EXECUTE允许用户执行存储的例程
FILE允许用户读取数据库目录中的任何文件。
GRANT OPTION允许用户具有从其他帐户授予或撤消权限的权限。
INDEX允许用户创建或删除索引。
INSERT允许用户使用INSERT语句
LOCK TABLES允许用户对您具有SELECT特权的表使用锁表
PROCESS允许用户使用SHOW PROCESSLIST语句查看所有进程。
PROXY启用用户代理。
REFERENCES允许用户创建外键
RELOAD允许用户使用FLUSH语句
REPLICATION CLIENT允许用户查询主服务器或从服务器的位置
REPLICATION SLAVE允许用户使用复制从服务器从主服务器读取二进制日志事件。
SELECT允许用户使用SELECT语句
SHOW DATABASES允许用户显示所有数据库
SHOW VIEW允许用户使用SHOW CREATE VIEWstatement
SHUTDOWN允许用户使用mysqladmin shutdown命令
SUPER允许用户使用其他管理操作,如将MASTER更改为、KILL、清除二进制日志、SET GLOBAL和mysqladmin命令
TRIGGER允许用户使用触发器操作。
UPDATE允许用户使用UPDATE语句
USAGE相当于“没有特权”

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