ERROR 1044(42000) : 拒绝用户“@‘ localhost’访问数据库‘ db’

我想开始在 MySQL 中编写查询。

show grants显示:

+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+

我没有任何 user-id,但是当我想创建一个用户时,我没有特权,而且当我甚至没有一个用户时,我也不知道如何创建特权!

mysql> CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'parsa';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER pr
ivilege(s) for this operation

我试着以 root 用户的身份登录:

mysql> mysql -u root -p;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
-u root -p' at line 1
mysql> mysql -u root -p root;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
-u root -p root' at line 1
871106 次浏览

不,应该在 bash 中运行 mysql -u root -p,而不是在 MySQL 命令行中。 如果在 mysql 中,可以键入 出口退出。

您可能想尝试使用完整的 login 命令:

mysql -h host -u root -p

主机是 127.0.0.1

这样做只是为了确保合作的存在。

使用 mysql -u root -p允许我进行大量的数据库搜索,但是由于路径设置而拒绝创建任何数据库。

您可能需要为 MySQL 数据库设置一个 root 帐户:

在终端类型中:

mysqladmin -u root password 'root password goes here'

然后调用 MySQL 客户端:

mysql -h localhost -u root -p

首先,如果您不熟悉命令行,可以尝试从 Web 浏览器中使用 phpmyadmin。这将确保您实际上创建了一个 mysql 数据库和一个用户名。

下面是从命令行(bash)进行连接的方式:

mysql -h hostname -u username -p database_name

例如:

fabio@crunchbang ~ $ mysql -h 127.0.0.1 -u fabio -p fabiodb

我是被另一个问题带到这里的。 每当我尝试登录时,我都会收到这条消息,因为我没有正确地进行身份验证,而是以匿名用户的身份登录。解决我问题的办法是:

要查看您是哪个用户,以及您拥有哪些权限:

select user(), current_user();

删除这个讨厌的匿名用户:

drop user ''@'localhost';

大多数开发人员 登录到服务器(我假设您有 mysql 数据库的用户名和密码) ,然后从 Bash 切换到 mysql> prompt,然后使用下面的命令(这不起作用)

mysql -h localhost -u root -p

需要做的是在 bash 提示符中使用上面的命令—— > 这样做的时候,它会询问密码,如果给定的话,它会直接进入 mysql 提示符和

然后数据库、表可以逐个创建

我也面临过类似的僵局,所以分享经验

@ Nickparsa... 你有两个问题:

1) mysql -uroot -p 应该在 bash (也称为您的终端)中键入,而不是在 MySQL 命令行中

exit

现在回到 bash/Terminal 命令行。

你有一个语法错误:

mysql -uroot -p;

- p 前面的分号需要去掉,正确的语法是:

mysql -uroot -p

在 bash 命令行中键入正确的语法。如果已经设置了密码,请输入密码; 否则只需按回车按钮。你应该得到一个类似于这样的回答: enter image description here

希望这个能帮上忙!

如果您处于 MySQL shell 中,请键入 出口退出它,它将返回到命令提示符。

现在使用以下命令启动 MySQL:

sudo mysql -u root -p

如果你的用户名不是 root,用你的用户名替换上面命令中的‘ root’:

sudo mysql -u <your-user-name> -p

然后它会询问您的 MySQL帐户/密码,您的 MySQL将不会显示任何访问权限问题,然后打开。

我在上面的每个答案中都命令正确,我错过了工作台,我们为用户提到了‘从主机限制连接’,它默认为“%”-将其改为“ localhost”,然后就可以正常连接了!

这与用户权限有关。给予适当的授权将解决这个问题。

步骤[1] : 打开终端并运行此命令

$ mysql -uroot -p

产出[1] : 这应该会得到如下所示的 mysql 提示符

enter image description here

步骤[2] :

mysql> CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'your_password';
mysql> grant all privileges on *.* to 'parsa'@'localhost';

句法:

mysql> grant all privileges on `database_name`.`table_name` to 'user_name'@'hostname';

注:

  • 主机名可以是 IP 地址,localhost,127.0.0.1
  • database_name/table_name中,* 表示所有数据库
  • hostname中,要指定所有主机,请使用’%’

步骤[3] : 通过输入 quit/exit命令或按 Ctrl+D来脱离当前的 mysql 提示符。

步骤[4] : 登录到您的新用户

$ mysql -uparsa -pyour_password

步骤[5] : 创建数据库

mysql> create database `database_name`;

使用 sudo 连接 mysql 并允许必要的用户使用,

sudo mysql -u user;
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost';

我使用角色为数据库应用程序用户授予最少的特权。我不断得到‘ ERROR 1044(42000) : 用户访问被拒绝...’,直到我 RTFM 发现我必须给每个用户一个默认角色,以便他们的帐户可以在他们登录时进行身份验证。

#create a role
CREATE ROLE 'rolename';


#give necessary privileges to role
GRANT INSERT, UPDATE, DELETE, SELECT ON database.table TO 'rolename';


#create user
CREATE USER 'username'@'host' IDENTIFIED BY 'password';


#give the user a role(s)
GRANT 'rolename' TO 'username'@'host';


#set the user's default otherwise it's ERROR 1044
SET DEFAULT ROLE 'rolename' FOR 'username'@'host';