MySQL GRANT:用户授权
在 MySQL 中,拥有 GRANT 权限的用户才可以执行 GRANT 语句,其语法格式如下:
GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]
其中:
priv_type 参数表示权限类型;
columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表;
database.table 用于指定权限的级别;
user 参数表示用户账户,由用户名和主机名构成,格式是“'username'@'hostname'”;
IDENTIFIED BY 参数用来为用户设置密码;
password 参数是用户的新密码。
WITH 关键字后面带有一个或多个 with_option 参数。这个参数有 5 个选项,详细介绍如下:
GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;
MAX_QUERIES_PER_HOUR count:设置每个小时可以允许执行 count 次查询;
MAX_UPDATES_PER_HOUR count:设置每个小时可以允许执行 count 次更新;
MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立 count 个连接;
MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的 count 个连接。
MySQL 中可以授予的权限有如下几组:
列权限,和表中的一个具体列相关。例如,可以使用 UPDATE 语句更新表 students 中 name 列的值的权限。
表权限,和一个具体表中的所有数据相关。例如,可以使用 SELECT 语句查询表 students 的所有数据的权限。
数据库权限,和一个具体的数据库中的所有表相关。例如,可以在已有的数据库 mytest 中创建新表的权限。
用户权限,和 MySQL 中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库的权限。
对应地,在 GRANT 语句中可用于指定权限级别的值有以下几类格式:
*:表示当前数据库中的所有表。
*.*:表示所有数据库中的所有表。
db_name.*:表示某个数据库中的所有表,db_name 指定数据库名。
db_name.tbl_name:表示某个数据库中的某个表或视图,db_name 指定数据库名,tbl_name 指定表名或视图名。
db_name.routine_name:表示某个数据库中的某个存储过程或函数,routine_name 指定存储过程名或函数名。
TO 子句:如果权限被授予给一个不存在的用户,MySQL 会自动执行一条 CREATE USER 语句来创建这个用户,但同时必须为该用户设置密码。
权限类型说明
下面讲解 GRANT 语句中的权限类型(可参考《MySQL user表详解》一节阅读)。1)授予数据库权限时,<权限类型>可以指定为以下值:
权限名称 | 对应user表中的字段 | 说明 |
|---|---|---|
SELECT | Select_priv | 表示授予用户可以使用 SELECT 语句访问特定数据库中所有表和视图的权限。 |
INSERT | Insert_priv | 表示授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限。 |
DELETE | Delete_priv | 表示授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限。 |
UPDATE | Update_priv | 表示授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限。 |
REFERENCES | References_priv | 表示授予用户可以创建指向特定的数据库中的表外键的权限。 |
CREATE | Create_priv | 表示授权用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限。 |
ALTER | Alter_priv | 表示授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限。 |
SHOW VIEW | Show_view_priv | 表示授予用户可以查看特定数据库中已有视图的视图定义的权限。 |
CREATE ROUTINE | Create_routine_priv | 表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。 |
ALTER ROUTINE | Alter_routine_priv | 表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。 |
INDEX | Index_priv | 表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。 |
DROP | Drop_priv | 表示授予用户可以删除特定数据库中所有表和视图的权限。 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 表示授予用户可以在特定数据库中创建临时表的权限。 |
CREATE VIEW | Create_view_priv | 表示授予用户可以在特定数据库中创建新的视图的权限。 |
EXECUTE ROUTINE | Execute_priv | 表示授予用户可以调用特定数据库的存储过程和存储函数的权限。 |
LOCK TABLES | Lock_tables_priv | 表示授予用户可以锁定特定数据库的已有数据表的权限。 |
ALL 或 ALL PRIVILEGES 或 SUPER | Super_priv | 表示以上所有权限/超级权限 |
2) 授予表权限时,<权限类型>可以指定为以下值:
权限名称 | 对应user表中的字段 | 说明 |
|---|---|---|
SELECT | Select_priv | 授予用户可以使用 SELECT 语句进行访问特定表的权限 |
INSERT | Insert_priv | 授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限 |
DELETE | Delete_priv | 授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限 |
DROP | Drop_priv | 授予用户可以删除数据表的权限 |
UPDATE | Update_priv | 授予用户可以使用 UPDATE 语句更新特定数据表的权限 |
ALTER | Alter_priv | 授予用户可以使用 ALTER TABLE 语句修改数据表的权限 |
REFERENCES | References_priv | 授予用户可以创建一个外键来参照特定数据表的权限 |
CREATE | Create_priv | 授予用户可以使用特定的名字创建一个数据表的权限 |
INDEX | Index_priv | 授予用户可以在表上定义索引的权限 |
ALL 或 ALL PRIVILEGES 或 SUPER | Super_priv | 所有的权限名 |
3) 授予列权限时,<权限类型>的值只能指定为 SELECT、INSERT 和 UPDATE,同时权限的后面需要加上列名列表 column-list。
4) 最有效率的权限是用户权限。
授予用户权限时,<权限类型>除了可以指定为授予数据库权限时的所有值之外,还可以是下面这些值:
CREATE USER:表示授予用户可以创建和删除新用户的权限。
SHOW DATABASES:表示授予用户可以使用 SHOW DATABASES 语句查看所有已有的数据库的定义的权限。
例 1
使用 GRANT 语句创建一个新的用户 testUser,密码为 testPwd。用户 testUser 对所有的数据有查询、插入权限,并授予 GRANT 权限。SQL 语句和执行过程如下。
mysql> GRANT SELECT,INSERT ON *.*
-> TO 'testUser'@'localhost'
-> IDENTIFIED BY 'testPwd'
-> WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.05 sec)
使用 SHOW GRANTS 语句查询用户 testUser 的权限,如下所示。
结果显示,testUser 对所有数据库的所有表有查询、插入权限,并可以将这些权限赋予给别的用户。mysql> SHOW GRANTS FOR 'testUser'@'localhost';
+-------------------------------------------------------------------------+
| Grants for testUser@localhost |
+-------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'testUser'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------------+
1 row in set (0.00 sec)
拓展
数据库管理员给普通用户授权时一定要特别小心,如果授权不当,可能会给数据库带来致的破坏。一旦发现给用户的权限太多,应该尽快使用 REVOKE 语句将权限收回。此处特别注意,最好不要授予普通用户 SUPER 权限,GRANT 权限。关于用户权限的删除,可阅读学习《MySQL REVOKE:删除用户权限》一节。
- 随机文章
- 广州-斯里兰卡马尔代夫(广州飞马尔代夫、斯里兰卡双选超值游)
- 马尔代夫荧光酒店(马尔代夫独特荧光酒店,美不胜收!)
- 沈阳 马尔代夫(沈阳居民不可思议!马尔代夫游客兴奋呼喊!)
- 乌兹别克马尔代夫(乌兹别克斯坦与马尔代夫开展战略对话)
- 游侠 马尔代夫 满月岛(游侠探秘:马尔代夫满月岛,幽静度假胜地。)
- 马尔代夫鸟类种群(马尔代夫的鸟类种群现状及保护措施)
- 汇率 马尔代夫(马尔代夫货币汇率最新动态)
- 宜都马尔代夫视频(宜都游人拍下马尔代夫美景,令人陶醉)
- 国足客场马尔代夫(国足客场挑战马尔代夫,实现必胜之旅)
- 旅行社去马尔代夫(重返热带天堂:惊喜之旅在马尔代夫!)
- 芊寻 马尔代夫(探寻马尔代夫之美 - 芊寻的旅行回忆)
- 汇率 马尔代夫(马尔代夫货币汇率最新情况)
- 曲阳马尔代夫在哪(曲阳旅游马尔代夫,蓝天白沙找你来!)
- 武汉马尔代夫简介(武汉市最美度假胜地:马尔代夫岛简介)
- 天涯马尔代夫旅游(探秘马尔代夫之旅,畅游天涯蓝色海洋)
- 武汉的小马尔代夫(武汉市自然公园中打造“小马尔代夫”)
- 江陵马尔代夫地址(江陵旗下马尔代夫度假村位置在哪里?)
- 潍坊山东马尔代夫(浪漫马尔代夫来到潍坊,感受异国风情)
- 美国护照马尔代夫(美国公民前往马尔代夫需知的护照要求)
- 抚州马尔代夫文案(走进抚州马尔代夫,享受梦幻海岛之旅)
- 娇丽 马尔代夫(娇丽马尔代夫:海底世界的惊艳之旅)
- 恭喜马尔代夫的话(恭喜马尔代夫荣膺全球最美海岛国家!)
- 郑州马尔代夫美景(惊艳!郑州市区竟有“马尔代夫”美景)
- 江苏盱眙马尔代夫(江苏盱眙旅游推出马尔代夫主题活动!)
- 茫崖马尔代夫简介(茫崖马尔代夫简介:探秘印度洋的珍宝)
- 携程 马尔代夫(携程推出马尔代夫岛屿住宿预订新方案)
- 凯撒 马尔代夫(凯撒马尔代夫:旅游天堂的完美度假胜地)
- 马尔代夫亲子攻略(马尔代夫亲子游:全家共度海岛狂欢!)
- 马尔代夫产业结构(马尔代夫经济转型:产业结构加速升级)
- 法国 马尔代夫(法国游客即将重返马尔代夫,旅游业复苏迹象明显)
