除root用户外,拒绝用户“test”@“localhost”(使用密码:YES)的访问
我面临与MySQL非root / admin用户的问题,我按照以下步骤创build用户及其权限,纠正我,如果我做错了,
我正在安装mysql
RHEL 5.7 64bit
,下面提到的包,一旦我完成rpm install
我们
- 然后使用
mysql_install_db
创buildmysql数据库 - 然后启动mysql服务
- 使用
mysql_upgrade
也是我们对服务器做的。
在这个过程之后,我可以以root
身份login,但使用非root用户login到服务器:
[root@clustertest3 ~]# rpm -qa | grep MySQL MySQL-client-advanced-5.5.21-1.rhel5 MySQL-server-advanced-5.5.21-1.rhel5 [root@clustertest3 ~]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: # symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock srwxrwxrwx 1 mysql mysql 0 Nov 30 11:09 /var/lib/mysql/mysql.sock mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> SELECT USER(),CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | root@localhost | root@localhost | +----------------+----------------+ 1 row in set (0.00 sec) [root@clustertest3 ~]# mysql -ugolden -p Enter password: ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)
这是我面临的问题,有没有解决办法呢?
不要将所有数据库的所有权限授予非root用户,这是不安全的(而且您已经拥有该angular色的“root”),
GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
这个语句创build一个新的用户并授予它选定的特权。 IE:
GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
看看文档 ,看看所有的权限详细
编辑:你可以找这个查询更多的信息(以“根”login):
select Host, User from mysql.user;
看看发生了什么事
如果使用远程机器(例如工作台)等连接到MySQL,请使用以下步骤在安装了MySQL的操作系统上消除此错误
mysql -u root -p CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>'; GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%'; FLUSH PRIVILEGES;
尝试login到MYSQL实例。
这对我来说是消除这个错误。
尝试:
CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost'; FLUSH PRIVILEGES;
或者甚至更好地使用: mysql_setpermission
来创build用户
对于所有的build议,但问题的任何人仍然存在。
检查存储过程并查看DEFINERS。 那些定义者可能不再存在。
当我们将通配符主机(%)更改为IP特定时,我的问题就出现了,这使得数据库更安全。 不幸的是,即使'user''172 ….'在技术上是正确的,仍然有一些视图仍在使用'user'@'%'。
我也有类似的问题,后来我发现这是因为我改变了我的主机名(不是localhost
)。
因此,我通过指定--host=127.0.0.1
来解决它
mysql -p mydatabase --host=127.0.0.1
按照创build用户的方式,MySQL解释不同的方式。 例如,如果你创build一个这样的用户:
create user user01 identified by 'test01';
MySQL期望您使用grant all on <your_db>.* to user01;
一些特权grant all on <your_db>.* to user01;
不要忘记flush privileges;
但是,如果您通过传递IP地址来创build用户,则必须将其更改为:
create user 'user02'@'localhost' identified by 'teste02';
所以,给你一些特权,你必须这样做:
grant all on <your_db>.* to user02@localhost; flush privileges;
它看起来像你试图做一个用户'黄金'@'%',但一个不同的用户的名字'黄金'@'本地主机'是阻碍/优先。
做这个命令看用户:
SELECT user,host FROM mysql.user;
你应该看到两个条目:
1)user = golden,host =%
2)user = golden,host = localhost
做这些命令:
DROP User 'golden'@'localhost'; DROP User 'golden'@'%';
重新启动MySQL工作台。
然后再次执行您的原始命令:
CREATE USER 'golden'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
然后,当您尝试loginMySQL时,请像这样input:
点击“testing连接”并input您的密码“密码”。
在我的情况下,同样的错误发生,因为我试图通过只input“mysql”,而不是“mysql -u root -p”
只需在主机名或MySQL主机地址中添加计算机名称而不是“localhost”即可。