MySQL 如何授予MySQL用户权限?
我们需要授予新用户权限,因为新用户没有权限。我们可以使用GRANT语句授予用户权限。其语法如下-
阅读更多:MySQL 教程
语法
GRANT privilege,[privilege],.. ON privilege_level
TO user [IDENTIFIED BY password]
[REQUIRE tsl_option]
[WITH [GRANT_OPTION | resource_option]];
上述语法的解释如下-
首先,在GRANT关键字后指定一个或多个权限。如果我们授予用户多个权限,则每个权限都用逗号隔开。
接下来,指定特权级别,它确定特权的应用级别。MySQL支持全局(.),数据库(database.*),表格(database.table)和列级别。如果我们使用列特权级别,则必须在每个特权后指定一个或多个逗号分隔的列。
然后,将要授予权限的用户放在第一个。如果用户已经存在,则GRANT语句修改其特权。否则,GRANT语句将创建一个新用户。IDENTIFIED BY可选子句允许我们为用户设置新密码。
接下来,我们指定用户是否必须通过安全连接(例如SSL,X059等)连接到数据库服务器。
在最后,可选WITH GRANT OPTION子句允许我们授予其他用户或从其他用户中删除我们拥有的特权。此外,我们可以使用WITH子句来分配MySQL数据库服务器的资源,例如设置用户每小时可以使用多少个连接或语句。这在共享环境(例如MySQL共享主机)中非常有用。
示例
在下面的示例中,我们正在创建一个用户并授予权限-
mysql> use mysql
Database changed
mysql> create user abcd@localhost identified by 'password123';
Query OK, 0 rows affected (0.04 sec)
下面的查询将为我们提供新用户帐户abcd@localhost的特权。
mysql> SHOW GRANTS FOR abcd@localhost;
+------------------------------------------+
| Grants for abcd@localhost |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'abcd'@'localhost' |
+------------------------------------------+
1 row in set (0.01 sec)
现在,要将所有特权授予abcd@localhost用户帐户,我们可以使用以下语句 –
mysql> GRANT ALL ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.05 sec)
在这里,ON .子句表示所有数据库和所有数据库中的对象。WITH GRANT OPTION允许abcd@localhost授予其他用户权限。
现在,如果我们再次使用SHOW GRANTS语句,我们将看到abcd@localhost的权限已更新。
mysql> SHOW GRANTS FOR abcd@localhost;
+---------------------------------------------------------------------+
| Grants for abcd@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
极客教程