MySQL 权限授予
简介:在本教程中,您将学习如何使用MySQL GRANT语句向MySQL用户授予权限。
MySQL GRANT语句简介
之后创建一个新的用户帐户,用户没有任何特权。要授予用户帐户权限,请使用GRANT
语句。
以下说明了GRANT
语句的语法:
GRANT privilege,[privilege],.. ON privilege_level TO user [IDENTIFIED BY password] [REQUIRE tsl_option] [WITH [GRANT_OPTION | resource_option]];让我们
GRANT
更详细地研究一下这个陈述。
- 首先,在
GRANT
关键字后指定一个或多个权限。如果授予用户多个权限,则每个权限由逗号分隔。(请参阅下表中的权限列表)。 - 接下来,指定
privilege_level
确定权限应用级别的。MySQL支持global(*.*
),database(database.*
),table(database.table
)和列级别。如果使用列权限级别,则必须在每个权限之后指定一个或逗号分隔列的列表。 - 然后,放置
user
您要授予的权限。如果用户已存在,则GRANT
语句将修改其权限。否则,GRANT
语句将创建一个新用户。可选子句IDENTIFIED BY
允许您为用户设置新的密码。 - 之后,指定用户是否必须通过SSL,X059等安全连接连接到数据库服务器。
- 最后,可选
WITH GRANT OPTION
子句允许您授予其他用户或从其他用户中删除您拥有的权限。此外,您可以使用WITH
子句分配MySQL数据库服务器的资源,例如,设置用户每小时可以使用的连接数或语句数。这在MySQL共享托管等共享环境中非常有用。
GRANT
语句,您必须具有GRANT OPTION
您授予的权限和权限。如果read_only
启用了系统变量,则需要具有SUPER
执行GRANT
语句的权限。
让我们练习一些使用MySQL GRANT
语句的例子来更好地理解。
MySQL GRANT示例
通常,我们首先使用CREATE USER
语句创建新用户帐户,然后使用GRANT
语句向用户授予权限。
例如,以下CREATE USER
语句创建一个新的超级用户帐户。
CREATE USER super@localhost IDENTIFIED BY 'dolphin';要显示分配给super @ localhost用户的特权,请使用
SHOW GRANTS
statement。
SHOW GRANTS FOR super@localhost;
+-------------------------------------------+ | Grants for super@localhost | +-------------------------------------------+ | GRANT USAGE ON *.* TO `super`@`localhost` | +-------------------------------------------+ 1 row in set (0.03 sec)要授予super @ localhost用户帐户的所有权限,请使用以下语句。
GRANT ALL ON *.* TO 'super'@'localhost' WITH GRANT OPTION;
ON *.*
子句表示数据库中的所有数据库和所有对象。在WITH GRANT OPTION
允许super@localhost
授予权限给其他用户。
现在,如果SHOW GRANTS
再次使用语句,您将看到super @ localhost的权限已更新。
SHOW GRANTS FOR super@localhost;
+----------------------------------------------------------------------+ | Grants for super@localhost | +----------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO `super`@`localhost` WITH GRANT OPTION | +----------------------------------------------------------------------+ 1 row in set (0.00 sec)要创建在mysqldemo 示例数据库中具有所有权限的用户,请使用以下语句:
CREATE USER auditor@localhost IDENTIFIED BY 'whale'; GRANT ALL ON mysqldemo.* TO auditor@localhost;您可以在单个
GRANT
语句中授予多个权限。例如,您可以 使用以下语句创建一个可以对mysqldemo
数据库执行SELECT,INSERT和UPDATE语句的用户 :
CREATE USER rfc IDENTIFIED BY 'shark'; GRANT SELECT, UPDATE, DELETE ON mysqldemo.* TO rfc;现在,如果您使用rfc用户帐户登录MySQL服务器并发出以下语句:
CREATE TABLE city( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) );MySQL发出以下错误消息:
ERROR 1142 (42000): CREATE command denied to user 'rfc'@'localhost' for table 'city'
GRANT的允许权限
下表说明了可用于GRANT
和REVOKE
语句的所有允许权限:
特权 | 说明 | 级别 | |||||
全局 | 数据库 | 表 | 列 | 程序 | 代理 | ||
ALL [PRIVILEGES] | 授予除GRANT OPTION之外的指定访问级别的所有权限 | ||||||
ALTER | 允许用户使用ALTER TABLE语句 | X | X | X | |||
ALTER ROUTINE | 允许用户更改或删除存储的例程 | X | X | X | |||
CREATE | 允许用户创建数据库和表 | X | X | X | |||
CREATE ROUTINE | 允许用户创建存储的例程 | X | X | ||||
CREATE TABLESPACE | 允许用户创建,更改或删除表空间和日志文件组 | X | |||||
CREATE TEMPORARY TABLES | 允许用户使用CREATE TEMPORARY TABLE创建临时表 | X | X | ||||
CREATE USER | 允许用户使用CREATE USER,DROP USER,RENAME USER和REVOKE ALL PRIVILEGES语句。 | X | |||||
CREATE VIEW | 允许用户创建或修改视图。 | X | X | X | |||
DELETE | 允许用户使用DELETE | X | X | X | |||
DROP | 允许用户删除数据库,表和视图 | X | X | X | |||
EVENT | 启用事件计划程序的事件使用。 | X | X | ||||
EXECUTE | 允许用户执行存储的例程 | X | X | X | |||
FILE | 允许用户读取数据库目录中的任何文件。 | X | |||||
GRANT OPTION | 允许用户拥有授予或撤消其他帐户权限的权限。 | X | X | X | X | X | |
INDEX | 允许用户创建或删除索引。 | X | X | X | |||
INSERT | 允许用户使用INSERT语句 | X | X | X | X | ||
LOCK TABLES | 允许用户对具有SELECT权限的表使用LOCK TABLES | X | X | ||||
PROCESS | 允许用户使用SHOW PROCESSLIST语句查看所有进程。 | X | |||||
PROXY | 启用用户代理。 | ||||||
REFERENCES | 允许用户创建外键 | X | X | X | X | ||
RELOAD | 允许用户使用FLUSH操作 | X | |||||
REPLICATION CLIENT | 允许用户查询以查看主服务器或从属服务器的位置 | X | |||||
REPLICATION SLAVE | 允许用户使用复制从属从主服务器读取二进制日志事件。 | X | |||||
SELECT | 允许用户使用SELECT语句 | X | X | X | X | ||
SHOW DATABASES | 允许用户显示所有数据库 | X | |||||
SHOW VIEW | 允许用户使用SHOW CREATE VIEW语句 | X | X | X | |||
SHUTDOWN | 允许用户使用mysqladmin shutdown命令 | X | |||||
SUPER | 允许用户使用其他管理操作,例如CHANGE MASTER TO,KILL,PURGE BINARY LOGS,SET GLOBAL和mysqladmin命令 | X | |||||
TRIGGER | 允许用户使用TRIGGER操作。 | X | X | X | |||
UPDATE | 允许用户使用UPDATE语句 | X | X | X | X | ||
USAGE | 相当于“没有特权” |