2009-03-21 72 views
14

Tôi đang cố gắng nắm bắt đầu ra của truy vấn SQL trong MySQL, tới tệp văn bản bằng truy vấn sau.Đầu ra truy vấn vào tệp cho phép lỗi truy cập bị từ chối

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt'; 

Tôi nhận được lỗi sau.

ERROR 1045 (28000): Truy cập bị từ chối cho người dùng 'username' @ '%' (sử dụng mật khẩu: YES)

Bất kỳ ý tưởng, nơi tôi đi sai? Có một số vấn đề liên quan đến quyền không?

+0

Chính xác bạn đang làm gì? Bạn đang gõ lệnh trong bảng điều khiển khách hàng mysql hoặc trong thiết bị đầu cuối hệ thống? – Vasil

+0

không liên quan đến chương trình – cletus

+0

Tôi đang nhập lệnh thông qua bảng điều khiển MySQL – Arnkrishn

Trả lời

30

Tệp mở rộng là sự cho phép của chính nó trong mysql.

Nếu bạn có TẤT CẢ nó được bao gồm.

Nhưng nếu bạn chỉ có một bộ sưu tập an toàn như SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, nhưng không OUTFILE, "vào outfile" sẽ không hoạt động trong truy vấn.

Lý do cho việc này là truy cập tệp từ bên trong MySQL, ngay cả đối với mục đích ghi, có rủi ro bảo mật nhất định, bởi vì nếu bạn truy cập tệp từ mysql, bạn có thể truy cập bất kỳ tệp nào mà người dùng mysql có quyền truy cập. quyền truy cập tệp dựa trên.

Để giải quyết vấn đề này, bạn có thể chạy truy vấn của mình trực tiếp vào đầu ra của bất kỳ shell/ngôn ngữ nào bạn đang sử dụng để chạy sql với.

Dưới đây là một ví dụ * nix

>$ echo "select count(predicate),subject from TableA group by subject" | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt 

Nhưng làm điều đó trên cùng một dòng mà không có sự "\" hoặc sử dụng "\" để thoát khỏi ngắt dòng.

Điều đang xảy ra ở đây là bạn đang chạy truy vấn vào ứng dụng khách mysql và nó sẽ loại bỏ kết quả, sau đó bạn đang hướng đầu ra tới tệp. Vì vậy, các tập tin không bao giờ được gọi là từ bên trong mysql, nó được gọi là sau khi mysql chạy.

Vì vậy, hãy sử dụng mysql để nhận thông tin và THEN kết xuất dữ liệu vào tệp từ vỏ người dùng của riêng bạn và bạn sẽ ổn.

Hoặc tìm cách để tự mình nhận được sự cho phép mysql outfile, dù bằng cách nào.

+0

điều này thật tuyệt! cám ơn rất nhiều – ajay

4

Nếu đó là hệ thống của bạn (bạn là quản trị viên) và bạn biết cách bảo mật, thì đây là cách bạn bật các quyền đó.

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
Các vấn đề liên quan