669

I've created database, for example '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;

Now i can login to database from everywhere, but can't create tables.

How to grant all privileges on that database and (in the future) tables. I can't create tables in 'mydb' database. I always get:

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

11 回答 11

986
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

这就是我创建“超级用户”权限的方式(尽管我通常会指定一个主机)。

重要的提示

虽然这个答案可以解决访问问题,但WITH GRANT OPTION创建一个可以编辑其他用户权限的 MySQL 用户

GRANT OPTION 权限使您能够将您自己拥有的权限授予其他用户或从其他用户中删除。

出于安全原因,您不应将此类用户帐户用于公众可以访问的任何流程(即网站)。建议您创建一个仅具有数据库权限的用户用于此类用途。

于 2011-02-16T12:45:05.047 回答
555

这是一个老问题,但我认为接受的答案并不安全。创建超级用户很有用,但如果您想授予单个数据库的权限,则不好。

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

%似乎不包括套接字通信,那localhost是为了。WITH GRANT OPTION只对超级用户有好处,否则通常会有安全风险。

MySQL 5.7+ 的更新似乎这样警告:

不推荐使用 GRANT 语句修改现有用户的除权限以外的属性,并将在未来的版本中删除。使用 ALTER USER 语句进行此操作。

所以设置密码应该使用单独的命令。感谢@scary-wombat 的评论。

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
于 2013-03-29T16:56:29.950 回答
134

这将对某些人有所帮助:

从 MySQL 命令行:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

遗憾的是,此时 newuser 没有权限对数据库进行任何操作。事实上,如果 newuser 甚至尝试登录(使用密码、密码),他们将无法访问 MySQL shell。

因此,首先要做的是让用户能够访问他们需要的信息。

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

此命令中的星号(分别)表示他们可以访问的数据库和表——此特定命令允许用户读取、编辑、执行和执行所有数据库和表中的所有任务。

完成要为新用户设置的权限后,请务必重新加载所有权限。

FLUSH PRIVILEGES;

您的更改现在将生效。

欲了解更多信息:http ://dev.mysql.com/doc/refman/5.6/en/grant.html

如果您对命令行不满意,则可以使用MySQL WorkbenchNavicatSQLyog等客户端

于 2013-11-19T11:26:45.303 回答
32

 1.创建数据库

CREATE DATABASE db_name;

 2.为数据库db_name创建用户名

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3.使用数据库

USE db_name;

 4. 最后你在数据库 db_name 中,然后执行 create 、 select 和 insert 操作等命令。

于 2016-03-20T05:13:36.217 回答
23

此 SQL 授予所有数据库但仅授予基本权限。它们对于 Drupal 或 Wordpress 来说已经足够了,并且作为一个优点,允许一个开发人员帐户用于本地项目。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
于 2014-12-09T00:37:02.917 回答
21
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

适用于架构的特权:)

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

于 2015-06-07T08:21:13.260 回答
17

我只能通过添加才能使其工作GRANT OPTION,否则总是会收到权限被拒绝错误

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
于 2015-10-25T14:49:00.307 回答
16

您好,我使用此代码在 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;
于 2014-10-07T19:53:56.923 回答
8

我在使用MySQL Ver 8.0.21时遇到了这个挑战

我想授予在主机上运行my_app_db的用户命名的数据库的权限。rootlocalhost

但是当我运行命令时:

use my_app_db;

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

我得到错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'my_app_db.* TO '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)

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

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

注意:该GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';命令可能不适用于现代版本的 MySQL。在您选择要使用的数据库后,大多数现代版本的 MySQL 会替换授予权限命令中的database_namewith 。*

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

exit

而已。

我希望这有帮助

于 2020-09-30T16:53:45.843 回答
6

仅从远程服务器访问 mydb 数据库

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

从远程服务器访问所有数据库。

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
于 2015-06-25T11:32:54.747 回答
4

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

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

或者:

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

PRIVILEGES关键字不是必需的。

另外我不知道为什么其他答案建议将IDENTIFIED BY 'password'其放在命令的末尾。我相信这不是必需的。

于 2018-03-29T14:16:08.497 回答