【发布时间】:2016-10-16 04:20:50
【问题描述】:
我正在通过 Vagrant 运行 Homestead 来安装本地 Laravel。我通过 ssh (vagrant ssh) 登录 Homestead,并使用主机 localhost、用户 homestead、密码 secret。我能够成功连接,并且运行 show databases; 告诉我那里有一个 information_schema 数据库。我认为一切都很好,我可以为我的 Laravel 项目创建一个新数据库并开始工作。
不幸的是,运行 CREATE DATABASE mynewdb; 返回:
错误 1044 (42000):用户 'homestead'@'localhost' 拒绝访问数据库 'mynewdb'
我尝试通过以下方式为宅基地用户提供更多特权:
GRANT ALL PRIVILEGES ON mynewdb.* TO 'homestead'@'localhost' WITH GRANT OPTION;
但会返回类似的拒绝访问消息:
Access denied for user 'homestead'@'localhost' (using password: YES)
我尝试了该命令的其他一些变体,例如使用“%”而不是“localhost”,但似乎我的宅基地用户没有完全管理此数据库所需的权限。
我认为我应该能够使用 --skip-grant-tables 标志简单地重新启动 mysql 服务,然后以 homestead 或 root 身份登录并拥有完全权限。这也失败了:
vagrant@homestead:~$ sudo /etc/init.d/mysql stop
[....] Stopping mysql (via systemctl): mysql.servic[.ok
vagrant@homestead:~$ sudo /etc/init.d/mysql start --skip-grant-tables
[....] Starting mysql (via systemctl): mysql.servic[.ok
vagrant@homestead:~$ mysql -h localhost
ERROR 1045 (28000): Access denied for user 'vagrant'@'localhost' (using password: NO)
vagrant@homestead:~$ mysql -h localhost -u homestead
ERROR 1045 (28000): Access denied for user 'homestead'@'localhost' (using password: NO)
vagrant@homestead:~$ mysql -h localhost -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
vagrant@homestead:~$ mysql
ERROR 1045 (28000): Access denied for user 'vagrant'@'localhost' (using password: NO)
在这些尝试之后,我使用 homestead 和 secret 登录,只是为了检查是否有任何变化:
vagrant@homestead:~$ mysql -h localhost -u homestead -p
mysql> create database mynewdb;
错误 1044 (42000):用户 'homestead'@'localhost' 拒绝访问数据库 'mynewdb'
最后,我注意到在我的 homestead.yml 文件中有一个看起来像这样的条目:
databases:
- homestead
我将此条目修改为:
databases:
- homestead
- mynewdb
然后重启宅基地虚拟机:
vagrant halt
vagrant up
然后再次尝试使用 homestead MySQL 用户创建新的数据库。这些都没有做任何事情,对于试图做任何事情的宅基地用户仍然完全拒绝访问。
获得访问权的建议?
【问题讨论】:
-
对不起,我有点困惑。
mynewdb数据库是否已创建?如果没有,宅基地用户是否有权创建新数据库? -
mynewdb 尚未创建。似乎宅基地用户没有任何权限来创建新数据库。我在网上阅读的所有内容都说宅基地用户应该等同于 root,并具有完全权限。我认为权限有可能在过去的某个时候被弄乱/覆盖。我需要做的就是在不访问 root 帐户的情况下重置权限。我显然可以访问宅基地的服务器,所以我可以重新启动 MySQL,将其关闭等。如何在不完全重新安装 MySQL 的情况下获得访问权限?
-
我在我的问题中添加了更多关于我如何尝试使用 --skip-grant-tables 重新启动 mysql 服务,但无法做到的问题。
-
我对vagrant一无所知,对设置mysql也知之甚少。只是想问一个澄清的问题。你会得到我的 +1,祝你好运