2013-05-16 16 views
5

đó là câu hỏi đầu tiên của tôi ở đây và tôi thành thật làm cho nó sau khi điều tra lâu dài mà không có câu trả lời.Mysql TẠO DEFINER

Tôi đã tạo một ứng dụng web mạng nội bộ chạy trên máy chủ web CentOS, ứng dụng sử dụng máy chủ cục bộ khác (luôn là CentOS) cho cơ sở dữ liệu mysql.

Bên trong cơ sở dữ liệu tôi đã tạo thói quen Mà bắt đầu evey như thế này:

CREATE DEFINER='localuser02'@'192.168.0.5' PROCEDURE 'Createuser' 

Các 192.168.0.5 IP là IP của máy chủ nơi ứng dụng được cài đặt.

Cho đến khi mọi thứ đều ổn, ứng dụng đang hoạt động. Bây giờ một vài ngày trước khi máy chủ chạy ứng dụng là một cái cũ, để thêm một máy chủ khác (tôi có nghĩa là máy chủ hàng hóa), những gì tôi đã nghĩ là làm một sự cân bằng lưu lượng giữa chúng.

Bây giờ tôi đã thiết lập chính xác cả hai máy chủ để chạy ứng dụng, vấn đề là với SQL DEFINER chỉ có một IP.

Máy chủ của tôi hiện có 192.168.0.5 và 192.168.0.6.

Về mặt lý thuyết DEFINER mới của tôi nên như thế này:

CREATE DEFINER='localuser02'@'192.168.0.5, 192.168.0.6' PROCEDURE 'Createuser' 

Nhưng tôi không biết làm thế nào để tiến hành.


cảm ơn câu trả lời.

Đối với ký tự đại diện, tôi hiểu như sử dụng phần trăm như bạn đã nói 192.168% hoặc như đề xuất bởi eggyal 192.168.0. Kể từ khi mạng của tôi được phân phối như thế này:

192.168.0.1 - router 
192.168.0.2 - voip phone 
192.168.0.3 - voip phone 
192.168.0.4 - firewall 
192.168.0.5 - Server 01 
192.168.0.6 - Server 02 
192.168.0.7 - SQL Server 
192.168.0.8 - LAN Printer 
192.168.0.9 - First pc 
192.168.0.10 - Second pc 

Câu hỏi của tôi là có IP từ 192.168.0.1 đến xxx.10 dành riêng, nếu tôi thêm wildcard trên SQL có thể là một vụ va chạm với địa chỉ Tôi có nghĩa là DEFINER có thể thử để xác thực ví dụ trên điện thoại voip hoặc máy in hoặc tường lửa thay vì hai máy chủ độc quyền?

câu hỏi Cũng thứ hai, có khả năng liệt kê nhiều hơn một IP để được gọn gàng như hơn:

CREATE DEFINER='localuser02'@'192.168.0.5, 192.168.0.6' PROCEDURE 'Createuser'

Cảm ơn trước

+0

'DEFINER' chỉ đơn giản là người dùng" sở hữu "quy trình; nếu thủ tục được định nghĩa với 'SQL SECURITY DEFINER', thì nó sẽ được chạy với các đặc quyền của tài khoản đó bất kể người dùng gọi nó là gì. Thông tin 'DEFINER' phải khớp với tài khoản người dùng hợp lệ, các phần lưu trữ trong đó chỉ ra (các) máy mà người dùng có thể kết nối. Do đó không cần phải thay đổi 'DEFINER' trong trường hợp này; tuy nhiên, nếu bạn muốn kích hoạt tài khoản 'localuser02' để kết nối từ một trong hai máy, bạn có thể thay đổi thông tin đăng nhập của họ để sử dụng ký tự đại diện:' @ '192.168.0.%' '. – eggyal

+0

Xin chào Eggyal, cảm ơn câu trả lời của bạn. Từ những gì tôi đã hiểu đúng tôi nếu tôi là sai thủ tục sẽ làm việc hoặc là một người dùng đang sử dụng các ứng dụng từ Server 01 hoặc Server 02 phải không? Ý tôi là trên cả hai máy chủ ứng dụng thực hiện các truy vấn và các cuộc gọi trên cơ sở dữ liệu, vì vậy trong trường hợp này nếu tôi chỉ sử dụng một IP thì một trong những máy chủ đầu tiên 192.168.0.5 người dùng đang sử dụng ứng dụng trên Server 02 (192.168.0.6) sẽ làm việc ? Tôi có nghĩa là người dùng của Server 02 sẽ được xác thực trên Server 01 nếu trong thủ tục tôi thêm IP của máy chủ đầu tiên? Cảm ơn –

+0

Đối với ký tự đại diện, tôi gặp sự cố vì trên mạng của mình, tôi có 192.168.0.7 đến 192.168.0.10 được giữ bởi máy tính khác, hơn 192.168.0.2 đến 192.168.0.3 được sử dụng bởi điện thoại voip và máy in, trong SQL sẽ tìm kiếm của IP được sử dụng bởi máy tính khác trên mạng của tôi và sẽ gây ra lỗi? Tôi có thể thêm vào CREATE DEFINER hai dấu phẩy IP được phân cách không? Cảm ơn –

Trả lời

3

Mệnh đề DEFINER kiểm soát tài khoản sử dụng tại thời gian thực hiện , trừ khi bạn cũng chỉ định INVURER SECURITY INVOKER. Vì mã của bạn hiện đang được viết, bất kể người dùng nào thực hiện mã khi chạy, nó sẽ được thực thi theo ngữ cảnh bảo mật được chỉ định trong DEFINER. Nếu bạn cần chỉ định một dải địa chỉ rộng hơn cho trình gỡ rối, hãy sử dụng% của chính nó trong phần lưu trữ hoặc sử dụng một cái gì đó như 192.168.%

+0

Tôi thêm ký tự đại diện, vấn đề bây giờ là khi người dùng được kết nối với Server01 đều hoạt động tốt, nhưng khi anh ta chuyển sang Server02, ứng dụng sẽ gửi người dùng đến trang đăng nhập, như thể anh ta không đăng nhập. Tôi đang sử dụng RoundRobin để cân bằng cả hai máy chủ, nhưng có vẻ như người dùng có thể được xác thực trên một máy chủ một lần. Làm thế nào tôi có thể đạt được rằng người dùng có thể làm việc trên cả hai máy chủ indipendently sau khi đăng nhập? Bây giờ trong cơ sở dữ liệu tôi có 192.168.0%. Cảm ơn –

+0

Điều này nghe giống như một vấn đề về mã ứng dụng hơn là vấn đề MySQL DEFINER, phải không? URL ứng dụng có thay đổi từ IP này sang IP tiếp theo không? – udog

+0

Marcos, Bạn đã giải quyết vấn đề này bằng cách nào? – udog

Các vấn đề liên quan