授予**所有**数据库权限

mar*_*osh 589 mysql mariadb mysql-error-1142

我创建了数据库,例如'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;
Run Code Online (Sandbox Code Playgroud)

现在我可以从任何地方登录到数据库,但无法创建表.

如何授予该数据库和(将来)表的所有权限.我无法在'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'
Run Code Online (Sandbox Code Playgroud)

dia*_*man 878

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

这就是我创建"超级用户"权限的方式(虽然我通常会指定一个主机).

重要的提示

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

GRANT OPTION权限使您可以向其他用户提供或从其他用户中删除您自己拥有的权限.

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

  • @Romain你真的没有把很多东西带到这里 - 我没有给我的用户myuser命名 - 提问者只是使用用户名作为例子 - 我使用相同的示例用户名来保持一致性. (35认同)
  • 很公平.但是,人们还必须考虑其他人,可能是新手,以后可以阅读这个问题.这不是SO的重点吗? (22认同)
  • 我也不认为这个答案是好的.它为所有数据库和所有表提供"管理员"权限,这不是所要求的. (7认同)
  • 我编辑了这个答案,说mydb.*而不是*.*,因为它是如此广泛的投票和观察答案,我相信安全性 - 尤其是像MySQL这样的抛光粪便 - 非常重要.人们希望读者能够调查答案的细节而不是复制和粘贴,但我喜欢偶尔生活在现实中. (5认同)
  • 设置MySQL服务器的@Romain用户可能足够聪明,意识到他们应该用自己的自定义用户名替换"myuser". (4认同)
  • 我投票的原因与@ user3338098相同.其中"标识为"的答案应该是公认的答案.此外,只有在必要时才能使用"WITH GRANT OPTION".我不相信OP表明它是. (3认同)
  • @kenorb,使用`grant`命令时不需要`flush privileges`.[X4的](http://stackoverflow.com/questions/5016505/mysql-grant-all-privileges-on-database/20070276#comment44277783_20070276) (2认同)
  • 这不安全.这在没有密码的users表中创建了一个条目,mysql忽略了所有其他权限行,只查看最后一个匹配的行.因此,允许几分钟的完全访问权限生效,并拒绝使用密码访问任何人.这是一个可怕的安全违规行为! (2认同)

ako*_*nov 513

这是一个老问题,但我不认为接受的答案是安全的.这对于创建超级用户很有好处,但如果要在单个数据库上授予权限则不好.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';
Run Code Online (Sandbox Code Playgroud)

%似乎没有涵盖套接字通信,这localhost是为了.WITH GRANT OPTION仅对超级用户有利,否则通常存在安全风险.

希望这可以帮助.

  • +1不包括`WITH GRANT OPTION`并且指向指定的数据库而不是全部(`*`). (24认同)
  • @Thufir,搜索`unix套接字`.在linux上使用`localhost`时,myslq客户端试图使用unix套接字而不是TCP连接到服务器. (2认同)
  • mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; (2认同)

小智 114

这对某些人有用:

从MySQL命令行:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

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

因此,首先要做的是为用户提供他们所需信息的访问权限.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Run Code Online (Sandbox Code Playgroud)

此命令中的星号指的是它们可以访问的数据库和表(分别) - 此特定命令允许用户读取,编辑,执行和执行所有数据库和表中的所有任务.

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

您的更改现在将生效.

有关更多信息,请访问:http://dev.mysql.com/doc/refman/5.6/en/grant.html

如果您对命令行不熟悉,那么您可以使用MySQL workbench,NavicatSQLyog等客户端

  • 使用`grant`命令时不需要`flush privileges`.[X4的](http://stackoverflow.com/questions/5016505/mysql-grant-all-privileges-on-database/26244137#comment44277771_26244137) (5认同)
  • [停止使用FLUSH PRIVILEGES](http://dbahire.com/stop-using-flush-privileges/) (4认同)
  • 要么你从 Linode 批发复制,要么他们从你那里复制:https://www.linode.com/docs/databases/mysql/install-mysql-phpmyadmin-ubuntu-14-04 (3认同)

小智 28

 1.创建数据库

CREATE DATABASE db_name;
Run Code Online (Sandbox Code Playgroud)

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

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

 3.使用数据库

USE db_name;
Run Code Online (Sandbox Code Playgroud)

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


小智 20

此SQL授予所有数据库,但只授予基本权限.它们足以用于Drupal或Wordpress,并且作为一个精确的,允许一个开发者帐户用于本地项目.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)


小智 16

GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';
Run Code Online (Sandbox Code Playgroud)

适用于架构的权限:)

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


小智 13

我能够只通过添加使其工作GRANT OPTION,没有它始终接收权限被拒绝错误

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)


gas*_*ina 12

您好我使用此代码在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;
Run Code Online (Sandbox Code Playgroud)

然后

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

  • 使用`grant`命令时不需要`flush privileges`.[X4的](http://stackoverflow.com/questions/5016505/mysql-grant-all-privileges-on-database#comment44277812_5016505) (11认同)
  • [停止使用FLUSH PRIVILEGES](http://dbahire.com/stop-using-flush-privileges/) (4认同)

pgm*_*ank 6

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

GRANT ALL ON mydb.* TO 'myuser'@'localhost';
Run Code Online (Sandbox Code Playgroud)

或者:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
Run Code Online (Sandbox Code Playgroud)

关键字PRIVILEGES不是必需的。

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


Dev*_*per 5

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

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';
Run Code Online (Sandbox Code Playgroud)

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

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
Run Code Online (Sandbox Code Playgroud)


Pro*_*ton 5

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

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

但是当我运行命令时:

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的“my_app_db.* TO 'root'@'localhost'' 附近使用的正确语法>

这是我修复的方法

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

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

输入您的mysql 根密码

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

use mysql;
SELECT user, host FROM user;
Run Code Online (Sandbox Code Playgroud)

注意:如果不运行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)
Run Code Online (Sandbox Code Playgroud)

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

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
Run Code Online (Sandbox Code Playgroud)

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

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

exit
Run Code Online (Sandbox Code Playgroud)

就是这样。

我希望这有帮助