我已经创建了数据库,例如'mydb'。

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

现在我可以登录到数据库从任何地方,但不能创建表。

如何授予该数据库和(将来)表上的所有特权。我不能在“mydb”数据库中创建表。我总是得到:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

当前回答

GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

适用于schema上的特权:)

可选:在mypasswd之后,您可以添加WITH GRANT OPTION

其他回答

我在MySQL 8.0.21版本工作时遇到了这个挑战

我想将名为my_app_db的数据库的权限授予在localhost主机上运行的根用户。

但是当我运行命令时:

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';

我得到了错误:

错误1064(42000):你有一个错误的SQL语法;查看MySQL服务器版本对应的手册,以获得使用'my_app_db附近的正确语法。*在第1行>到“root”@“localhost”

以下是我的解决方法:

登录到MySQL控制台。您可以将root更改为您想要登录的用户:

mysql -u root -p

输入mysql root密码

接下来,列出MySQL服务器上的所有用户及其主机。与PostgreSQL不同,它通常存储在mysql数据库中。所以我们需要首先选择mysql数据库:

use mysql;
SELECT user, host FROM user;

注意:如果你不运行use mysql,你会得到no database selected错误。

这应该会给你一个这样的输出:

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

接下来,根据从列表中获得的信息,将特权授予您想要的用户。在向数据库授予权限之前,我们需要首先选择数据库。对于我来说,我使用的是运行在localhost主机上的root用户:

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

注意:GRANT ALL PRIVILEGES ON database_name。*到“root”@“localhost”;命令可能不适用于现代版本的MySQL。大多数现代版本的mysql在选择要使用的数据库后,在grant privileges命令中将database_name替换为*。

然后您可以退出MySQL控制台:

exit

就是这样。

我希望这对你们有帮助

你好,我用这段代码在mysql有超级用户

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

然后

FLUSH PRIVILEGES;

要将数据库:mydb上的所有权限授予用户:myuser,只需执行:

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

or:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGES关键字不是必需的。

我也不知道为什么其他答案建议在命令的末尾加上IDENTIFIED BY 'password'。我认为这不是必需的。

GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

适用于schema上的特权:)

可选:在mypasswd之后,您可以添加WITH GRANT OPTION

这个SQL只授予所有数据库的基本权限。它们对于Drupal或Wordpress来说已经足够了,而且还允许一个开发人员帐户用于本地项目。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';