问题描述
当我安装 mariadb(目前在我的 manjaro linux 上为 10.5 版)时,出于某种未知原因。它不会让我没有 sudo 登录。所以我进行了调查(并且我使用了那个身份验证插件 unix_socket 和 MysqL_native_password 等东西;不幸的是无济于事,因为用户表不再是一个表而是一个视图);后来我发现using MariaDB authentication mariadb documentation; MysqL.grobal_priv 表中 root 和 MysqL 的密码无效。
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
SET PASSWORD FOR 'MysqL'@'localhost' = PASSWORD('pass');
现在我可以不用密码登录了,但我的问题是
- 为什么会这样。我确实在 MysqL_secure_installation 命令上设置了密码。
- 我只需要以这种方式设置(将 authentication_string 和 Password 设置为相同)即可。
仅供参考:我确实在密码中使用了特殊符号 !@。也许 bash 控制台在这个无效的密码初始化中起到了一定的作用。只是猜测
解决方法
回答问题 1:新 MariaDB 安装的默认访问权限是 root IDENTIFIED VIA unix_socket(因此需要 sudo)。因此,即使您在安装过程中设置了密码,它也不会被使用(即无效)。这样做是为了确保安全(无远程访问),并且其他以 root 身份运行的进程无需密码即可访问服务器(升级检查等)。
回答问题 2: 是的,就是这么简单,见下文。但请注意,您可能需要更新系统维护任务的密码 - 检查您的日志 (systemctl status mariadb.service)。
无论如何要更改为“root”:
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
或
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
然后重启mariadb:
systemctl restart mariadb
瞧,您将可以通过“mysql -u root -p”从您的个人帐户访问
要改回来:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION;
FLUSH PRIVILEGES;
我通常发现最好保留“root”用户(套接字),并使用 GRANT ALL 创建一个新的“root”用户(“super”、“administrator”、“superadmin”等) PRIVILEGES ON .,在需要时使用密码进行身份验证..
GRANT ALL PRIVILEGES ON *.* TO 'super'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION
GRANT PROXY ON ''@'%' TO 'super'@'localhost' WITH GRANT OPTION
FLUSH PRIVILEGES;