我在 5.1.52 中有一个带有 mysql 的新 centos 6.2。然后我看到了两个空的用户名,然后我删除了它,然后我看到 3 个 root 用户删除了它并创建了一个像这样的 CREATE USER 'root'@'%' IDENTIFIED BY ' ** ' ;。但是当我现在以 root 身份进入我的 phpMyAdmin 时,我无法创建新数据库。我在这里做错了什么?
我在 5.1.52 中有一个带有 mysql 的新 centos 6.2。然后我看到了两个空的用户名,然后我删除了它,然后我看到 3 个 root 用户删除了它并创建了一个像这样的 CREATE USER 'root'@'%' IDENTIFIED BY ' ** ' ;。但是当我现在以 root 身份进入我的 phpMyAdmin 时,我无法创建新数据库。我在这里做错了什么?
您的问题源于首先删除所有root用户。
当您使用创建用户时
CREATE USER
,它只需在 mysql.user 表中输入一个 rwo。之后您需要立即发出此命令:如果您不立即发出 GRANT,则所有 db 权限都将被禁用(即在 mysql.user 表中,update_priv='N'、delete_priv='N' 等)
如果你有 root@localhost 并且仍然无法访问它,你可能不得不像这样侵入它:
STEP 01) 像这样重启mysql
STEP 02)从命令行输入mysql(此时不需要密码)
步骤 03) 做
desc mysql.user
您将不得不调整每个权限,因为 GRANT 命令不起作用将
skip-grant-tables
被启用例子
对于 MySQL 5.1,您可以输入一个新的 root@localhost,其密码为“whatever”,如下所示:
STEP 04) 重启mysql
您可以使用密码“whatever”从此处以 root@localhost 身份登录。
随意用您想要的密码替换任何内容。
试试看 !!!
更新 2012-04-10 11:28 EDT
当您进行全新安装时,您将在 mysql.user 表中看到匿名用户。匿名用户是空白的用户。立即删除它们,因为这可能会带来安全风险!
原因如下:匿名用户可以访问前 4 个字母为的任何数据库
test
。您可以在测试数据库中执行大量 CRUD 密集型操作。您可能还想将测试数据库重命名为完全不同的名称。请阅读这些链接,因为我之前在 DBA StackExchange 中已经解决了这个问题。无法从 mysql.user 中删除匿名用户
这是一组正常的 MySQL 权限吗?
要确认是否需要这样做,请注意MySQL 5.0 认证学习指南在第 498 页第 6 段的要点中所说的内容:
更新 2012-04-10 12:50 EDT
在全新安装上,您只需运行mysql_secure_installation。如果您已经加载了用户,您可以自己运行项目符号(假设您想将它们设置为 myckrit。如果您不确定 mysql_secure_installation 在做什么,只需运行这些命令):
要恢复 root 访问权限,请停止您的服务器并使用该
--skip-grant-tables
选项启动它。如果 phpMyAdmin 允许您登录(无需密码),或者您有命令行访问权限,请连接并发出 (
mysql -uroot -h127.0.0.1
):注销,然后以 root@localhost (
mysql -uroot -hlocalhost -p
) 身份连接,输入您的密码并你不想在任何主机上root!此外,如果您仍然启用网络,您将希望尽快执行此操作。
您需要为 root 帐户授予适当的权限,而不仅仅是创建它。MySQL 自己并不知道您想要一个超级用户帐户。
You should use the appropriate
@'host'
option appropriate for your situation. 如果你不需要远程管理这个数据库,那么你应该使用@'localhost'
.更新
如果您没有足够的权限来授予新权限,您可以尝试几个选项。
尝试按照 Rolando 的说明进行操作,但要替换一些步骤。看起来他有关于 Windows 的说明,显示如何重新启动 MySQL 服务。代替 Rolando 的步骤 1,执行以下操作:停止 MySQL。然后使用这些选项启动 MySQL
/usr/bin/mysqld_safe --skip-grant-tables --skip-networking --defaults-file=/etc/my.cnf &> /dev/null &
(根据您的环境需要替换路径和文件名)。用您拥有完全超级用户权限的另一个 MySQL 实例中的相同文件替换 mysql 目录和所有文件 - 该目录包含 MySQL 系统表,例如 user、host、db、tables_priv 等。在执行此操作之前,请确保备份您的数据库如果它包含任何重要数据。如果你有一个备份副本,你可能会替换 mysql 目录。