Bạn có thể có su su - phạm lỗi trong MySQL không?


7

Nếu tôi đã root trên cơ sở dữ liệu mysql và tôi muốn bỏ đặc quyền của người dùng bình thường, mà không sử dụng mật khẩu của họ, tôi có thể làm điều đó không? nếu vậy thì thế nào? suy nghĩ # su - usernamevề unix. Về cơ bản, tôi chỉ đang tìm cách tránh cần mật khẩu của họ là họ, vì vậy tôi có thể kiểm tra các đặc quyền của họ tại người dùng của họ. Trong postgres tôi chỉ có thể cho phép xác thực danh tính trên người dùng root hệ thống, bỏ qua xác thực mật khẩu. Lý do tôi cần điều này là để có thể tái tạo vấn đề của người dùng bằng cách là họ, không phải họ sẽ không cho phép tái tạo chính xác. Tất nhiên tôi có thể yêu cầu mật khẩu của họ, nhưng phải mất nhiều thời gian hơn mà bỏ qua nó.

Câu trả lời:


4

Tôi mới nhận ra - miễn là bạn không ngại khóa người dùng trong khi đăng nhập -

  1. sao lưu bảng mysql.user (ít nhất, mật khẩu băm của người dùng, ít nhất là)
  2. đặt mật khẩu của họ thành một cái gì đó bạn biết: UPDATE mysql.user SET password=PASSWORD('new password') WHERE user='username' AND host='hostname';
  3. đăng nhập như họ
  4. đặt mật khẩu của họ trở lại như cũ: UPDATE mysql.user SET password='saved password hash' WHERE user='username' AND host='hostname';

... bạn có thể cần flush privileges;sau khi thao tác bảng mysql.user.


có thể ... nhưng không chắc nó có hoạt động trong mọi trường hợp không ... chúng tôi làm một cái gì đó như thế này với rất nhiều thứ khác.
xenoterracide

Vấn đề lớn nhất với phương pháp này là chắc chắn tạm thời phá vỡ các ứng dụng sử dụng cơ sở dữ liệu.
xenoterracide

@xenoterracide: xin lỗi, không thể nghĩ ra cách nào tốt hơn ... nó không giống như Postgres nơi bạn chỉ có thể gán quyền của một người dùng cho người khác.
Joe

3

Có thể mô phỏng người dùng như MySQL 5.5.7, với việc giới thiệu Người dùng Proxy . Tôi chưa bao giờ làm điều này trước đây, vì vậy tôi đã thử nó bằng cách sử dụng plugin xác thực thử nghiệm , vì có vẻ như người dùng proxy chỉ hoạt động với các plugin xác thực được bật. Dưới đây là các bước tôi đã thực hiện.

Bước đầu tiên là root:

  • mysql> INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';
  • mysql> SHOW PLUGINS; nhập mô tả hình ảnh ở đây
  • Tạo người dùng để mô phỏng (trong trường hợp của bạn đã tồn tại):

    mysql> GRANT ALL PRIVILEGES ONdtest @localhostIDENTIFIED BY 'mypass';

  • Tạo người dùng 'proxy':

    mysql> CREATE USER proxy@localhost IDENTIFIED WITH test_plugin_server AS 'dtest';

  • mysql> GRANT PROXY ON dtest@localhost TO proxy@localhost;

  • mysql> FLUSH PRIVILEGES;

Bây giờ, hãy thử đăng nhập bằng user proxy:, password: dtest(biến 'AS' của người dùng proxy):

  • $ mysql -uproxy -pdtest
  • mysql> SELECT USER(), CURRENT_USER();

    nhập mô tả hình ảnh ở đây

  • mysql> SHOW GRANTS; nhập mô tả hình ảnh ở đây


2

Ngày nay, MySQL không có mật khẩu gốc và thay vào đó sử dụng auth_socketplugin để xác minh người dùng đã kết nối với ổ cắm là người dùng root của hệ thống. Bạn có thể sử dụng kỹ thuật tương tự này để giải quyết vấn đề của mình nếu bạn ổn với việc có tài khoản unix cho tất cả người dùng, điều này mở ra tất cả các khả năng, ví dụ như lưu trữ tệp nhị phân dễ dàng!

Trước tiên, bạn sẽ thêm một tài khoản unix cho người dùng:

root: adduser testuser

Sau đó thêm người dùng MySQL phù hợp (có thể được thực hiện tự động trong adduser.local tập lệnh):

CREATE USER 'testuser'@'localhost' IDENTIFIED WITH auth_socket;

Bây giờ chuyển sang người dùng (không cần mật khẩu khi thực hiện bằng root):

root: su testuser

Kết nối với MySQL với tư cách là người dùng (không yêu cầu mật khẩu vì bạn đã đăng nhập với tư cách người dùng đó):

testuser: mysql -u $USER (hoặc -bạn kiểm tra thay vì sử dụng biến môi trường)

Tốt nhất là cung cấp thông số -ungười dùng vì thói quen tiện lợi cho người dùng tự động của máy khách mysql không tốt trong việc tự mình tìm ra nó, ví dụ nếu bạn sử dụng tài khoản người dùng cho người dùng đầu tiên vì một số lý do.


1

Tôi không biết một cách cụ thể để sao chép tương đương su, tuy nhiên, bạn không cần mật khẩu của họ - vì cách mà mysql xử lý xác thực, bạn có thể đặt một mật khẩu khác nhau (hoặc không có gì cả) từ mỗi máy đó là đăng nhập từ.


Tất nhiên, điều này giả định rằng bạn thực sự đã nghe mysql trên một cổng và không chỉ có thể truy cập được từ một ổ cắm unix.
Joe

Trong trường hợp này, đó chỉ là một máy và tôi không muốn thay đổi mật khẩu người dùng, vì sau đó nó sẽ phá vỡ các ứng dụng đã triển khai hiện có của họ.
xenoterracide

@xenoterracide: bạn có thể bật ổ cắm mạng và cho phép lưu lượng truy cập từ một máy khác không? Rõ ràng, giữ một tường lửa dựa trên máy chủ để bạn chỉ có thể kết nối từ máy mà bạn chỉ định. Nếu bạn đã kết nối từ một máy từ xa, chỉ cần thiết lập các quy tắc khác nhau để kết nối từ localhost.
Joe

Về mặt kỹ thuật tôi có thể làm bất cứ điều gì tôi muốn, nhưng những gì tôi cần làm, là sao chép những gì khách hàng ngốc đang làm. Tôi chỉ cố gắng để làm điều đó mà không yêu cầu khách hàng ngốc cho mật khẩu. Nó đã có sẵn các ổ cắm mạng và tôi có thể mở tường lửa nếu tôi muốn, v.v. về mặt kỹ thuật vào ngày mai điều này sẽ không thành vấn đề. Tại thời điểm này, nó là "để tham khảo trong tương lai". Trong postgres, tất cả những gì tôi phải làm là tạm thời tắt mật khẩu auth, ugh ... nó tốt hơn nhiều.
xenoterracide

Tôi không có cài đặt Tôi sẵn sàng hy sinh nếu nó không hoạt động ... nhưng nếu bạn bỏ khóa chính trên mysql.user (hiện là người dùng + máy chủ) và thêm bản ghi thứ hai bằng mật khẩu thay thế, bạn có thể tìm ra cách họ xử lý auth - nếu họ băm mật khẩu mới và chọn một nơi (người dùng, máy chủ, mật khẩu_hash), nó có thể hoạt động ... nếu họ thực hiện chọn password_hash trong đó (người dùng, máy chủ lưu trữ) và sau đó so sánh các giá trị băm, nó sẽ không.
Joe
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.