摘要:在本教程中,您将学习如何使用 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
UPDATE
、 DELETE
和INSERT
权限授予bob@localhost
:
GRANT INSERT, UPDATE, DELETE
ON employees
TO bob@localhost;
Code language: SQL (Structured Query Language) (sql)
其次,指定确定特权适用级别的privilege_level
。
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
可以从employeeNumber
、 lastName
、 firstName
和email
四列中选择数据,并仅更新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)
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)
GRANT
语句允许的权限
下表说明了可用于GRANT
和REVOKE
语句的所有允许的权限:
特权 | 意义 | 等级 | |||||
全球的 | 数据库 | 桌子 | 柱子 | 存储的例程 | 代理人 | ||
所有[特权] | 授予指定访问级别的所有权限( 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 USER 和REVOKE 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 TO 、 KILL 、 PURGE BINARY LOGS 、 SET GLOBAL 和 mysqladmin 命令 | X | |||||
扳机 | 允许用户使用TRIGGER 操作。 | X | X | X | |||
更新 | 允许用户使用UPDATE 语句 | X | X | X | X | ||
用法 | 相当于“无特权” |
在本教程中,您学习了如何使用 MySQL GRANT
语句向用户授予权限。