我刚刚安装了Ubuntu 16.04并在其上安装了Web服务器。一切运作良好,但我无法访问数据库。 我在互联网上尝试了一切,也在这里,但没有任何作用......即使我创建新用户并授予所有权限,我也无法创建数据库:( 在PHP中,我遇到了这个错误:
SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'
当我尝试登录终端时,它可以工作,但在PHP和phpmyadmin中没有。请帮忙。
PHP代码:
protected $host = '127.0.0.1';
protected $db = 'dbname';
protected $name = 'root';
protected $pass = 'root';
protected $conn;
private static $settings = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
public function __construct() {
try {
$this->conn = new PDO("mysql:host=$this->host;dbname=$this->db", $this->name, $this->pass, self::$settings);
} catch (PDOException $e) {
echo $e->getMessage();
}
}
答案 0 :(得分:76)
事实证明,您不能再使用5.7中的book
用户而不会成为sudoer。这意味着您不能再运行root
而必须执行mysql -u root
。
这也意味着如果您在GUI(或任何非命令行应用程序)中使用sudo mysql -u root
用户,它将不再有效。要使其工作,您必须创建具有所需权限的新用户,并使用该权限。
有关详细信息,请参阅this答案。
答案 1 :(得分:54)
这些步骤适用于使用Ubuntu 16.04,Apache 2.4,MariaDB,PDO的多个系统
以root身份登录MYSQL
mysql -u root
授予权限。对新用户执行:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
绑定到所有地址:
最简单的方法是注释掉你的行 /etc/mysql/mariadb.conf.d/50-server.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf文件,具体取决于您运行的系统:
#bind-address = 127.0.0.1
退出mysql并重启mysql
exit
service mysql restart
默认情况下,它仅绑定到localhost,但如果您对该行进行注释,则它会绑定到它找到的所有接口。注释掉该行等同于bind-address = *。
检查以root身份执行的mysql服务的绑定:
netstat -tupan | grep mysql
答案 2 :(得分:25)
也许有点晚了,但我发现这个答案在网上看。它可以帮助其他人解决同样的问题。
$sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q
现在你应该可以在phpmyadmin中以root用户身份登录。
(找到here。)
答案 3 :(得分:2)
MySQL在" localhost"之间产生了影响。和" 127.0.0.1"。
有可能' root' @' localhost'不允许,因为在用户表中有一个条目只允许从127.0.0.1进行root登录。
这也可以解释为什么服务器上的某些应用程序可以连接到数据库,有些不是因为有不同的方法连接到数据库。而你目前不允许它通过" localhost"。
答案 4 :(得分:1)
要为phpMyAdmin创建用户:
sudo mysql -p -u root
现在,您可以使用您选择的用户名添加一个新的MySQL用户。
CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
最后向刚刚创建的用户授予超级用户特权。
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' WITH GRANT OPTION;
如有任何疑问,请发表评论
答案 5 :(得分:1)
简而言之,在MariaDB上
1) sudo mysql -u root;
2) use mysql;
3) UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('pass1234') WHERE User = 'root';
4) FLUSH PRIVILEGES;
5) exit;
答案 6 :(得分:0)
mysql和服务器的用户有两个不同的东西,看看如何将用户添加到数据库并使用这些凭据登录
答案 7 :(得分:0)
对于mysql Ver 14.14 Distrib 5.7.22,更新语句现在为:
update user set authentication_string=password('1111') where user='root';
答案 8 :(得分:0)
仅为MySQL创建新用户不使用root。有一个安全问题
sudo mysql -p -u root
以root权限登录到MySQL或MariaDB
CREATE USER 'troy121'@'%' IDENTIFIED BY 'mypassword123';
登录并创建新用户
GRANT ALL PRIVILEGES ON *.* TO 'magento121121'@'%' WITH GRANT OPTION;
并授予访问“。”的特权。和“ @”“%”的任何位置,而不仅仅是'localhost'
exit;
如果您想查看特权表SHOW GRANTS;
和享受。
答案 9 :(得分:0)
如果即使在创建新用户并为他们分配数据库特权后仍收到该错误,那么要看的最后一件事是检查是否已在数据库中为用户分配了特权。
要执行此操作,请登录到mysql(这大概是限制了对数据库访问权限的应用程序,但是您作为root用户可以通过mysql -u user -p来访问数据库表)
应用命令
mysql -u root -p
密码:(提供您的数据库凭据)
成功登录
类型
use mysql;
从这一点开始,如下检查每个用户权限是否已从db表中启用
select User,Grant_priv,Host from db;
如果已创建用户的Grant_priv col的值为N,则使用以下命令将该值更新为Y
UPDATE db SET Grant_priv = "Y" WHERE User= "your user";
现在尝试使用该应用程序并与数据库进行交易。
答案 10 :(得分:0)
我在 ubuntu 20.04
和 MySQL 8.0
中遇到了同样的问题,我执行了以下步骤:
sudo mysql -p -u root
SELECT user,plugin,host FROM mysql.user
auth_socket
更改为 mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
CTRL+z
退出 MySQLsudo service MySQL restart