Làm cách nào để có được danh sách tài khoản người dùng bằng dòng lệnh trong MySQL?


1348

Tôi đang sử dụng tiện ích dòng lệnh MySQL và có thể điều hướng qua cơ sở dữ liệu. Bây giờ tôi cần xem danh sách tài khoản người dùng. Tôi có thể làm cái này như thế nào?

Tôi đang sử dụng phiên bản MySQL 5.4.1.


@Mustapha Tại sao tiêu đề thay đổi? Câu trả lời ở đây là SQL bạn có thể chạy từ bất cứ đâu, không chỉ là một dòng lệnh. Và thẻ đó thêm gì vào câu hỏi?
Rupi

Mục đích chỉnh sửa của tôi là duy trì sự thống nhất giữa tiêu đề và mô tả, nhưng tôi nghĩ bạn có một điểm tốt. Hãy chỉnh sửa ông @Rup
Mustapha Hadid

Câu trả lời:


1848

Sử dụng truy vấn này:

SELECT User FROM mysql.user;

Sẽ xuất ra một bảng như thế này:

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

Như Matthew Scharley chỉ ra trong các nhận xét về câu trả lời này , bạn có thể nhóm theo Usercột nếu bạn chỉ muốn xem tên người dùng duy nhất.


47
Tôi nghĩ rằng cũng có thể cần phải nhóm User, để chỉ nhận các giá trị người dùng duy nhất, vì có một hàng riêng biệt cho mỗi mục nhập user@ host.
Matthew Scharley

5
Làm thế nào để tìm thông tin tương tự mà không cần truy vấn sql ??
Divyanshu Das

8
@barrycarter DELETE FROM mysql.user;tốt hơn có WHERE user='someuser' and host='somehost';Nếu bạn làm DELETE FROM mysql.user;, tất cả người dùng đã biến mất. Đăng nhập sau khi mysql tiếp theo khởi động lại hoặc FLUSH PRIVILEGES;loại bỏ người dùng khỏi bộ nhớ. Dưới đây là một ví dụ về một trong những bài đăng của tôi về việc thực hiện có DELETE FROM mysql.usertrách nhiệm: dba.stackexchange.com/questions/4614/ mẹo
RolandoMyQueryDBA

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

5
thay vì nhóm, bạn chỉ có thể sử dụng DISTINCTtừ khóa:SELECT DISTINCT user FROM mysql.user;
user2683246

445

Tôi thấy định dạng này hữu ích nhất vì nó bao gồm trường máy chủ quan trọng trong MySQL để phân biệt giữa các bản ghi người dùng.

select User,Host from mysql.user;

1
Chỉ tò mò thôi. Khi nào thì nó sẽ hoạt hostđộng khi làm việc với cơ sở dữ liệu mysql? [Mysql Noob]
Mitchhakar Undurthi

7
@Packer hoạt động hostkhi bạn kết nối từ một máy chủ khác. Có thể cấp quyền truy cập khác nhau cho 'packer'@'example.com''packer'@'google.com'
Ray Baxter

118

Tài khoản người dùng bao gồm tên người dùng và quyền truy cập cấp máy chủ.

Do đó, đây là truy vấn cung cấp cho tất cả các tài khoản người dùng

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

7
Điều này về cơ bản giống như câu trả lời của spkane . Lợi ích của việc nối các cột người dùng và máy chủ là gì?
Iain Samuel McLean Elder

8
Một ví dụ: user@hostđịnh dạng được sử dụng để thiết lập mật khẩu. Bỏ qua máy chủ từ SET PASSWORDlệnh tạo ra một lỗi. SET PASSWORD FOR wordpressuser = PASSWORD('...');tạo ra lỗi ERROR 1133 (42000): Can't find any matching row in the user table. Bao gồm các máy chủ và nó hoạt động. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');sản xuất Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder

3
Câu trả lời tốt nhất, bất cứ điều gì những người không tán thành có thể phàn nàn về. Điều duy nhất tôi muốn thay đổi là nối thêm ORDER BY usernó.
sjas

48

để tránh sự lặp lại của người dùng khi họ kết nối từ nguồn gốc khác nhau:

select distinct User from mysql.user;

31

MySQL lưu trữ thông tin người dùng trong cơ sở dữ liệu riêng của mình. Tên của cơ sở dữ liệu là MySQL. Bên trong cơ sở dữ liệu đó, thông tin người dùng nằm trong một bảng, một bộ dữ liệu, được đặt tên user. Nếu bạn muốn xem những gì người dùng được thiết lập trong bảng người dùng MySQL, hãy chạy lệnh sau:

SELECT User, Host FROM mysql.user;

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

30

Nếu bạn đang đề cập đến người dùng MySQL thực tế, hãy thử:

select User from mysql.user;

23
SELECT * FROM mysql.user;

Đó là một bảng lớn để bạn có thể muốn chọn lọc hơn trên các lĩnh vực bạn chọn.


2
Tôi có 3 người dùng root với các máy chủ khác nhau. localhost, 127.0.0.1::1. Tôi phải giữ cái nào và tôi phải xóa cái gì? Cảm ơn!
biểu tượng

4
Nếu bạn không muốn mọi người kết nối qua mạng, tiêu chuẩn cũ là xóa tất cả những thứ này. Tuy nhiên, ngày nay, có vẻ như khuyến nghị là giữ các localhost, vì dù sao chúng không thể truy cập được qua mạng; điều này có nghĩa là bạn nên giữ tất cả chúng.
chiến thắng

18

Đăng nhập vào mysql bằng root và gõ truy vấn sau

select User from mysql.user;

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

Tôi muốn nói +1 để đề cập đến việc đăng nhập bằng root. Tôi đã thử mà không làm như vậy và nó không hoạt động;)
leenephi

Bạn cần cung cấp đặc quyền cho user1 để hiển thị danh sách người dùng. Nếu không có người dùng root, bạn sẽ gặp lỗi. Vì vậy, đầu tiên cung cấp các đặc quyền. Đăng nhập với tư cách người dùng root sau đó gõ lệnh GRANT SELECT ON mysql.user TO 'user1'@'localhost'; ngay bây giờ đăng nhập với tên user1 và gõ lệnh select User from mysql.user; Bạn sẽ thấy danh sách người dùng được hiển thị. :) +1 Thưởng thức
sandip divekar

15

Bảng mysql.db có thể quan trọng hơn trong việc xác định quyền của người dùng. Tôi nghĩ rằng một mục trong đó được tạo nếu bạn đề cập đến một bảng trong lệnh GRANT. Trong trường hợp của tôi, bảng mysql.users không hiển thị quyền cho người dùng khi rõ ràng nó có thể kết nối và chọn, v.v.

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

1
Theo quan điểm của tôi, điều quan trọng là những gì người dùng được phép làm trên cơ sở dữ liệu. Vì vậy, "SHOW GRANTS" khá hữu ích vì nó cho thấy ai được phép làm gì.
Nhà phát triển Marius ilėnas

12

Tôi sử dụng điều này để sắp xếp người dùng, vì vậy các máy chủ được phép dễ dàng phát hiện hơn:

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

11

Peter và Jesse là chính xác nhưng chỉ cần đảm bảo rằng trước tiên bạn chọn DB mysql.

use mysql;

select User from mysql.user;

đó nên làm trò lừa của bạn


22
Không cần thiết use mysql;trong trường hợp bạn phạm vi bảng vào cơ sở dữ liệu mysql như bạn đã làm. Bạn chỉ có thểselect User from mysql.user;
vitaLee 26/03/13

5
Việc thêm use mysql;chỉ là để bạn có thể sử dụng select User from user;thay select User from mysql.user;vì nó thường là truy vấn một lần, không cần sử dụng db mys db
Dan

1
sau use mysqlnếu bạn đã sử dụng select user from user;hơn đó có thể là một cái gì đó, nhưng thay vào đó bạn đang sử dụng mysql.user, điều đó làm cho việc sử dụng use mysqllúc đầu không cần thiết.
Sнаđошƒаӽ

10

Điều này hiển thị danh sách người dùng duy nhất:

SELECT DISTINCT User FROM mysql.user;

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

Thực hiện lệnh này trên dấu nhắc linux trước tiên sẽ yêu cầu mật khẩu của người dùng root mysql, khi cung cấp mật khẩu chính xác, nó sẽ in tất cả người dùng cơ sở dữ liệu vào tệp văn bản.


3

Tôi thấy một thông tin hữu ích hơn vì nó cung cấp thêm thông tin về các đặc quyền DML và DDL

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

0
SELECT User FROM mysql.user;

sử dụng truy vấn trên để có được người dùng Mysql

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.