root 사용자를 제외하고 'test'@ 'localhost'사용자 (암호 사용 : YES)에 대한 액세스가 거부되었습니다.


100

mysql 비 루트 / 관리자 사용자에게 문제가 있습니다. 사용자 및 권한을 생성하기 위해 아래 단계를 따르고 있습니다. 잘못하고있는 경우 수정합니다.

에 설치 중 mysql입니다 RHEL 5.7 64bit. 패키지는 아래에 언급되어 rpm install있습니다.

  1. 를 사용하여 mysql db를 mysql_install_db만든 다음
  2. mysql 서비스를 시작한 다음
  3. mysql_upgrade또한 우리는 서버를 사용하고 있습니다.

이 프로세스 후에는 다음으로 로그인 할 수 root있지만 루트가 아닌 사용자로는 서버에 로그인 할 수 없습니다.

[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)

이것이 내가 직면 한 문제입니다. 이에 대한 해결책이 있습니까?


루트로 로그인 한 후 할 수SELECT * FROM mysql.user
노암 시청사

1
귀하에게 도움이 된 답변을 수락하면 다른 사용자가 귀하의 문제를 어떻게 해결했는지 알 수 있습니다.
사용자가 아닌 사용자

답변:


59

모든 데이터베이스에 대한 모든 권한을 루트가 아닌 사용자에게 부여하지 마십시오. 안전하지 않습니다 (이미 해당 역할에 "루트"가 있음).

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

이 문은 새 사용자를 만들고 선택한 권한을 부여합니다. IE :

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

모든 권한을 자세히 보려면 문서 를 살펴보십시오.

편집 :이 쿼리 ( "root"로 로그인)로 더 많은 정보를 찾을 수 있습니다.

select Host, User from mysql.user;

무슨 일이 있었는지보기 위해


나는 루트에 대한 그 진술에 동의하지 않습니다. 예, 당신은 어리석은 슈퍼 특권을 제공해서는 안됩니다. 그러나 DB 내에 적절한 감사 추적이 없기 때문에 일반적으로 공유 계정을 사용해서는 안됩니다. 루트와 같은 공유 계정이 있어야하는 경우 감사 추적이 손상되지 않았는지 확인하기 위해 다른 항목을 래핑해야합니다.
krad

36

원격 시스템 (예제 워크 벤치) 등을 사용하여 MySQL에 연결하는 경우 다음 단계를 사용하여 MySQL이 설치된 OS에서이 오류를 제거하십시오.

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

MYSQL 인스턴스에 로그인 해보십시오.
이것은이 오류를 제거하는 데 도움이되었습니다.


1
"MySQL의 -u 루트 -p"를 실행할 때조차 오류 메시지를 표시로조차, 작동하는지
마리아 Klühspies

25

시험:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

또는 더 나은 사용 : mysql_setpermission사용자 생성


1
이것은 문제를 해결하지 못합니다. CREATE USER 'goldy'@ '%'IDENTIFIED by 'some_pass'; 유효한 쿼리입니다
pratim_b

어떤 이유로 %모든 호스트를 위해 작동해야하는 그의 문제는 해결되지 않습니다. 따라서 지정 localhost하면 작동합니다. 그 나던 일 경우, 뭔가 MySQL의에서 꺼져
노암 시청사

13

사용자 'golden'@ '%'을 (를) 만들려고했지만 'golden'@ 'localhost'라는 이름의 다른 사용자가 방해를 받고있는 것 같습니다.

사용자를 보려면 다음 명령을 수행하십시오.

SELECT user,host FROM mysql.user;

다음 두 항목이 표시되어야합니다.

1) 사용자 = 황금, 호스트 = %

2) 사용자 = 황금, 호스트 = 로컬 호스트

다음 명령을 수행하십시오.

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

MySQL Workbench를 다시 시작하십시오.

그런 다음 원래 명령을 다시 수행하십시오.

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

그런 다음 MySQL에 로그인하려고 할 때 다음과 같이 입력하십시오.

여기에 이미지 설명 입력

'연결 테스트'를 누르고 비밀번호 '비밀번호'를 입력하십시오.


2
이것은 내가 여기서 찾은 유일한 해결책입니다. 감사합니다.
Sumuk Shashidhar

8

먼저 다음을 사용하여 사용자를 만들었습니다.

CREATE user user@localhost IDENTIFIED BY 'password_txt';

인터넷 검색 후 이것을 본 후 다음을 사용하여 사용자의 비밀번호를 업데이트했습니다.

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

나중에 연결할 수 있습니다.


3

모든 조언을했지만 문제가 여전히 지속되는 다른 사람을 위해.

스토어드 프로 시저를 확인하고 DEFINERS를보십시오. 이러한 정의자는 더 이상 존재하지 않을 수 있습니다.

내 문제는 와일드 카드 호스트 (%)를 특정 IP로 변경하여 데이터베이스를보다 안전하게 만들었을 때 나타났습니다. 아쉽게도 'user'@ '172 ....'가 기술적으로 정확하더라도 여전히 'user'@ '%'를 사용하는 뷰가 있습니다.


저를 올바른 길로 안내해 주셔서 감사합니다. 뷰와 저장 프로 시저의 SQL 보안 설정에 대해서도 몰랐습니다. 뷰를 생성하는 사용자가 아닌 명령을 실행하는 사용자의 권한을 사용하도록 뷰에서 SQL Security를 ​​Invoker로 설정했습니다. 다음은 참조 용 링크입니다. dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin

2

나도 비슷한 문제가 있는데 나중에 호스트 이름을 변경했기 때문에 발견되었습니다 localhost.

따라서 다음을 지정하여 해결됩니다. --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

2

사용자 테이블에 localhost 항목이 있는지 확인하십시오. 그것이 내가 가진 문제였습니다. 전의:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

1

사용자를 생성하는 방식에 따라 MySQL은 다른 방식으로 해석합니다. 예를 들어 다음과 같은 사용자를 생성하는 경우 :

create user user01 identified by 'test01';

MySQL은 다음을 사용하여 권한을 부여 할 것으로 예상합니다. grant all on <your_db>.* to user01;

잊지 마세요 flush privileges;

그러나 이와 같은 사용자를 생성하는 경우 (IP 주소를 전달하여) 다음과 같이 변경해야합니다.

create user 'user02'@'localhost' identified by 'teste02';

따라서 권한을 부여하려면 다음을 수행해야합니다.

grant all on <your_db>.* to user02@localhost;
flush privileges;

0

제 경우에는 "mysql -u root -p"대신 "mysql"을 입력하여 mysql을 사용하려고했기 때문에 동일한 오류가 발생합니다.


0

mysqlworkbench에서 서버를 연결하고 다음 명령을 실행하십시오 .-> ALTER USER 'root'@ 'localhost'IDENTIFIED BY 'yourpassword';


0

이 오류 메시지를 검색 한 후 귀찮은 검색을하려면 다음을 수행하십시오.

사용자 'someuser @ somewhere'에 대한 액세스가 거부되었습니다 (비밀번호 사용 : YES).

나에게 문제는 암호를 따옴표로 묶지 않았습니다. 예. -p'password'대신 사용해야-ppassword


-8

호스트 이름이나 MySQL 호스트 주소에 'localhost'대신 컴퓨터 이름을 추가하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.