mysql 8.0中如何将所有权限授予root用户

piwo6bdm  于 2021-06-21  发布在  Mysql
关注(0)|答案(14)|浏览(423)

尝试

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

得到
错误1064(42000):您的sql语法有错误;检查与mysql服务器版本相对应的手册,以获得正确的语法,以便在第1行中使用“identified by‘root’with grant option”。
注意:在以前的版本中尝试时,也可以使用相同的方法。
也试过了

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

得到
错误1410(42000):不允许使用grant创建用户
mysql(8.0.11.0)用户名/密码为root/root。

svdrlsy4

svdrlsy41#

我在centos上也遇到同样的问题,这对我很有效(版本:8.0.11):

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
yrdbyhpb

yrdbyhpb2#

您的mysql上不存在指定的用户(因此,mysql正在尝试使用grant创建它,就像在版本8之前一样,但是由于本版本中引入的限制而失败)。
mysql在这一点上是相当愚蠢的,所以如果您有“root”@“localhost”并试图授予“root”@“%”特权,它会将它们视为不同的用户,而不是任何主机(包括localhost)上的root用户的泛化概念。
这个错误信息也有误导性。
因此,如果您收到错误消息,请使用以下内容检查现有用户

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

然后创建缺少的用户(正如mike所建议的),或者将grant命令调整为实际存在的用户规范。

e4eetjau

e4eetjau3#

我也有同样的问题。即使路由有“%”,也无法远程连接。现在,看看 my.ini 文件(windows中的配置文件) bind-address 声明被遗漏了。
所以。。。我把这个 bind-address = * 之后 [mysqld] 并重新启动了服务。现在成功了!

34gzjxbg

34gzjxbg4#

从MySQL8开始,您不再能够(隐式地)使用 GRANT 命令。改用create user,后跟grant语句:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

注意安全风险 WITH GRANT OPTION ,请参见:
授予数据库上的所有权限

nhhxz33t

nhhxz33t5#

检查您的用户名和域是否与以前创建的相同。mysql根据用户表中的两列来选择账号,如果不一样,mysql可能会认为您想通过授权创建一个新账号,这在8.0版本之后是不支持的。

owfi6suc

owfi6suc6#

我的规格:

mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

对我有用的是:

mysql> USE mysql;
mysql> UPDATE User SET Host='%' WHERE User='root' AND Host='localhost';
xnifntxz

xnifntxz7#

这对我有用:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
bis0qfac

bis0qfac8#

我看到很多(错误的)答案,就这么简单:

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'P@ssW0rd';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

注意:不是自创的 user 你可以用 root 连接到数据库。但是,使用默认根帐户让应用程序连接到数据库并不是首选方法。
其他特权(请注意并记住最小特权原则):

-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';

-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';

-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';

如果您遇到以下错误:
错误1130(hy000):不允许主机“1.2.3.4”连接到此mysql服务器
您需要在中添加/更改以下两行 /etc/mysql/my.cnf 重新启动mysql:

bind-address           = 0.0.0.0
skip-networking
hgtggwj0

hgtggwj09#

就我的2美分。我在尝试从mysql工作台连接时遇到了完全相同的问题。我正在运行一个bitnamimysql虚拟机来建立一个用于开发的本地沙盒。
bitnami的教程说要运行'grant all privileges'命令:

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

这显然不起作用,我终于用迈克·利施克的答案让它起作用了。
我认为发生的情况是root@%用户具有错误的与之相关联的凭据。因此,如果您试图修改用户的权限,但运气不好,请尝试:
正在删除用户。
再次创建用户。
确保在my.cnf配置文件上有正确的绑定。在我的例子中,我已经注解掉了这条线,因为它只是用于沙盒环境。
从mysql控制台:
列出用户(有助于查看所有用户):

select user, host from mysql.user;

删除所需用户:

drop user '{{ username }}'@'%';

创建用户并授予权限:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

运行此命令:

FLUSH PRIVILEGES;

找到mysql配置文件“my.cnf”,并查找一行如下所示:

bind-address=127.0.0.1

并用“#”注解它:


# bind-address=127.0.0.1

然后重新启动mysql服务。
希望这能帮助有同样问题的人!

owfi6suc

owfi6suc10#

1还需要在服务器上授权
mysql>授予上的所有特权。使用grant选项设置为“root”@“%”;
mysql>刷新权限
2检查用户表:
mysql>使用mysql
mysql>从用户中选择主机、用户

3.修改配置文件
mysql默认绑定ip:127.0.0.1,如果要远程访问服务,只需删除config即可


# Modify the configuration file

vi /usr/local/etc/my.cnf

# Comment out the ip-address option

[mysqld]

# Only allow connections from localhost

# bind-address = 127.0.0.1

4.最后重启服务
brew服务重新启动mysql

de90aj5v

de90aj5v11#

1) 这对我有用。首先,创建一个新用户。示例:用户 foo 带密码 bar ```

mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2) 将下面的代码替换为用户名“foo”。

mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

注意:database\u name是您想要拥有权限的数据库。意味着所有的一切
3) 以用户foo身份登录

mysql> mysql -u foo -p

密码:bar
4) 确保您从sequelize的初始连接设置为foo with pw bar。
tzdcorbm

tzdcorbm12#

我的规格:

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

对我有用的是:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

两个查询中的响应:

Query OK, O rows affected (0.10 sec*)

n、 b:我之前创建了一个数据库(db\u name),并且正在创建一个用户凭证,该凭证具有授予db中所有表的所有权限,而不是使用默认的根用户,我在某处读到的是一个最佳实践。

cx6n0qe3

cx6n0qe313#

这可能适用于:

grant all on dbtest.* to 'dbuser'@'%' identified by 'mysql_password';
zc0qhyus

zc0qhyus14#

我也有同样的问题,所以才来到这里。特别是对于当地的发展,我希望能够做到 mysql -u root -p 没有 sudo . 我不想创建新用户。我想用 root 从本地php web应用程序。
错误消息具有误导性,因为默认值没有问题 'root'@'%' 用户权限。
相反,正如一些人在其他答案中提到的那样,解决办法只是设置 bind-address=0.0.0.0 而不是 bind-address=127.0.0.1 在我的 /etc/mysql/mysql.conf.d/mysqld.cnf 配置。否则不需要任何更改。

相关问题