MySQL授权GRANT语句
简介:在本教程中,您将学习如何使用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语句向用户授予特权。