MySQL의 커맨드 라인을 사용하여 사용자 계정 목록을 얻는 방법은 무엇입니까?


1348

MySQL 명령 줄 유틸리티를 사용하고 있으며 데이터베이스를 탐색 할 수 있습니다. 이제 사용자 계정 목록이 필요합니다. 어떻게해야합니까?

MySQL 버전을 사용하고 5.4.1있습니다.


@Mustapha 제목이 바뀌는 이유는 무엇입니까? 여기에 대답은 명령 줄뿐만 아니라 어디에서나 실행할 수있는 SQL입니다. 그리고 그 태그가 질문에 추가하는 것은 무엇입니까?
Rup

내 편집의 목적은 제목과 설명 사이의 일관성을 유지하는 것이었지만 좋은 점이 있다고 생각합니다. 당신의 편집 씨 @Rup 확인
무스타파 하디드

답변:


1848

이 쿼리를 사용하십시오.

SELECT User FROM mysql.user;

다음과 같은 테이블이 출력됩니다.

+-------+
| User  |
+-------+
| root  |
+-------+
| user2 |
+-------+

Matthew Scharley 가이 답변에 대한 의견에서 지적한User 것처럼 고유 한 사용자 이름 만 보려면 열 별로 그룹화 할 수 있습니다 .


47
Useruser@ host항목 마다 별도의 행이 있기 때문에 고유 한 사용자 값만 얻으려면 그룹화해야 할 수도 있습니다 .
Matthew Scharley

5
SQL 쿼리없이 동일한 정보를 찾는 방법 ??
Divyanshu Das

8
@barrycarter DELETE FROM mysql.user;더 나은 WHERE user='someuser' and host='somehost';경우 DELETE FROM mysql.user;모든 사용자가 사라집니다. 다음 mysql 후에 로그인하면 FLUSH PRIVILEGES;메모리에서 사용자가 제거 되거나 제거됩니다. 다음은 DELETE FROM mysql.user책임감있게 수행 하는 게시물 중 하나의 예입니다 . dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA

3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants

5
그룹화 대신 DISTINCT키워드를 사용할 수 있습니다 .SELECT DISTINCT user FROM mysql.user;
user2683246

445

이 형식은 MySQL에서 사용자 레코드를 구별하는 데 중요한 호스트 필드를 포함하므로 가장 유용한 형식입니다.

select User,Host from mysql.user;

1
그냥 궁금해서 hostmysql 데이터베이스로 작업 할 때 이것이 언제 작동합니까? [Mysql Noob]
Prabhakar Undurthi

7
@Packer는 host다른 서버에서 연결할 때 작동합니다. 서로 다른 액세스 권한을 부여 할 수 'packer'@'example.com''packer'@'google.com'
레이 박스터

118

사용자 계정은 사용자 이름과 호스트 수준 액세스로 구성됩니다.

따라서 이것은 모든 사용자 계정을 제공하는 쿼리입니다.

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

7
이것은 기본적으로 spkane의 답변 과 동일 합니다. 사용자 및 호스트 열을 연결하면 어떤 이점이 있습니까?
이안 사무엘 맥클린 장로

8
예를 들면 다음과 같습니다. user@host형식은 비밀번호 설정에 사용됩니다. SET PASSWORD명령 에서 호스트를 생략하면 오류가 발생합니다. SET PASSWORD FOR wordpressuser = PASSWORD('...');오류가 발생 ERROR 1133 (42000): Can't find any matching row in the user table합니다. 호스트를 포함하면 작동합니다. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');생산합니다 Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder

3
해설자들이 불평 할 수있는 최선의 답변. 내가 바꾼 것만 ORDER BY user이 그것에 추가 되었습니다.
sjas

48

사용자가 다른 출처에서 연결할 때 반복되는 것을 피하려면 :

select distinct User from mysql.user;

31

MySQL은 사용자 정보를 자체 데이터베이스에 저장합니다. 데이터베이스 이름은입니다 MySQL. 해당 데이터베이스 내에서 사용자 정보는 데이터 셋이라는 이름의 테이블에 user있습니다. MySQL 사용자 테이블에서 어떤 사용자가 설정되어 있는지 보려면 다음 명령을 실행하십시오.

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+

30

실제 MySQL 사용자를 언급하는 경우 다음을 시도하십시오.

select User from mysql.user;

23
SELECT * FROM mysql.user;

큰 테이블이므로 선택한 필드를 더 선택적으로 사용할 수 있습니다.


2
다른 호스트를 가진 3 명의 루트 사용자가 있습니다. localhost, 127.0.0.1::1. 어느 것을 유지하고 무엇을 삭제해야합니까? 감사!
emotality

4
사람들이 네트워크를 통해 연결하지 못하게하려면 이전 표준은이 모든 것을 삭제하는 것이 었습니다. 그러나 요즘에는 로컬 호스트를 네트워크를 통해 액세스 할 수 없으므로 로컬 호스트를 유지하는 것이 좋습니다. 즉, 대신 모든 것을 보관 해야 합니다.
trysis

18

루트로 mysql에 로그인하고 다음 쿼리를 입력하십시오.

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+

루트로 로그인한다고 언급하면 ​​+1이라고합니다. 나는 그렇게하지 않고 시도했지만 작동하지 않았다;)
leenephi

사용자 목록을 표시하려면 user1에 권한을 부여해야합니다. 루트 사용자가 없으면 오류가 발생합니다. 먼저 특권을 제공하십시오. root 사용자로 GRANT SELECT ON mysql.user TO 'user1'@'localhost'; 로그인 한 후 type command를 입력 select User from mysql.user; 하십시오. user1로 로그인하고 command를 입력 하십시오. 사용자 목록이 표시됩니다. :) +1 Enjoy
sandip divekar

15

mysql.db 테이블은 사용자 권한을 결정하는 데 더 중요 할 수 있습니다. GRANT 명령에서 테이블을 언급하면 ​​그 항목이 생성된다고 생각합니다. 필자의 경우 mysql.users 테이블에는 분명히 연결하고 선택할 수있는 사용자에게 권한이 표시되지 않았습니다.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...

1
필자의 관점에서 중요한 것은 사용자가 데이터베이스에서 수행 할 수있는 작업입니다. "SHOW GRANTS"는 누가 무엇을 할 수 있는지 보여주기 때문에 매우 유용합니다.
개발자 Marius Žilėnas

12

이것을 사용하여 사용자를 정렬하므로 허용 된 호스트를보다 쉽게 ​​찾을 수 있습니다.

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;

11

Peter와 Jesse는 정확하지만 먼저 mysql DB를 선택해야합니다.

use mysql;

select User from mysql.user;

그 트릭을해야합니다


22
use mysql;테이블을 mysql 데이터베이스로 범위를 지정하는 경우 필요 하지 않습니다 . 당신은 단지select User from mysql.user;
vitaLee

5
추가 use mysql;는 단지 일회성 쿼리이기 때문에 select User from user;대신 사용할 수 있도록 하는 select User from mysql.user;것입니다. mysql db를 사용할 필요가 없습니다
Dan

1
후에 use mysql당신이 사용했던 경우 select user from user;보다 뭔가 수 있었다, 대신에 당신이 사용하고 mysql.user사용하게하는 use mysql시작 불필요한에서.
Sнаđошƒаӽ


5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

Linux 프롬프트에서이 명령을 실행하면 먼저 mysql 루트 사용자의 비밀번호를 요청하고 올바른 비밀번호를 제공하면 모든 데이터베이스 사용자를 텍스트 파일로 인쇄합니다.


3

DML 및 DDL 권한에 대한 추가 정보를 제공하기 때문에 그의 유용한 정보를 더 많이 발견했습니다.

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;

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