2012-04-20 37 views
15

Câu hỏi này xuất phát từ sự tò mò. Tôi tìm kiếm google cho điều này nhưng không nhận được một đầu mối.kết nối mở sql ở chế độ chỉ đọc

Giả sử người dùng có quyền truy cập đọc/ghi đầy đủ vào cơ sở dữ liệu MySQL. Tôi tự hỏi, là có cách nào (một số tham số trong chuỗi kết nối) để kết nối với cơ sở dữ liệu bởi cùng một tên người dùng và mật khẩu trong chế độ chỉ đọc?

Tôi muốn điều này mà không cần thay đổi quyền của người dùng này vì cùng một người dùng có thể yêu cầu quyền ghi vào một thời điểm khác. Điều này sẽ hữu ích (nếu có thể) để ngăn chặn việc sửa đổi tình cờ tới cơ sở dữ liệu.

+0

Kiểm tra các câu hỏi liên quan. http://stackoverflow.com/questions/654656/odbc-5-1-connection-string-for-mysql-with-read-only-access http://stackoverflow.com/questions/10122745/mvc3-read-only-mysql-kết nối-chuỗi – hgulyan

+1

Theo họ, không có cách nào để chỉ định quyền truy cập chỉ đọc thông qua chuỗi kết nối. Trên thực tế, bạn nên tạo người dùng sql với quyền chỉ đọc hoặc tạo lớp quyền trong logic nghiệp vụ của phần mềm của bạn. – hgulyan

Trả lời

4

Giải pháp tốt nhất ở đây là tạo một tài khoản khác trên máy chủ mysql với quyền chỉ đọc và kết nối bằng cách sử dụng.

+0

Tôi biết. Nhưng tôi đã tự hỏi nếu có bất kỳ tùy chọn mà không có điều này? Cảm ơn. – gtiwari333

+0

Đáng buồn thay, không. Tôi đã xem xét thực hiện điều gì đó thông minh như ngay lập tức khóa tất cả các bảng trong cơ sở dữ liệu của bạn để đọc, nhưng (a) có thể gây ra cơn ác mộng cho đồng thời và (b) dễ dàng phá hỏng nếu bạn mở khóa BẢNG, và (c) nó ngăn cản bạn từ việc sử dụng khóa trong truy vấn của bạn (mặc dù phiên chỉ đọc có thể không quá có khả năng sử dụng điều đó.Bạn biết nhiều hơn về hệ thống đích hơn chúng ta làm, vì vậy nếu LOCK BẢNG tablename READ sẽ làm việc cho bạn, hooray, ngược lại, điều tốt nhất và ~ đúng là có hai người dùng với một người đang đọc. –

11

Câu trả lời cho câu hỏi của bạn là

Không, không có cách nào để chỉ định quyền truy cập chỉ đọc trong chuỗi kết nối.

Alternatives là

1. Tạo người dùng sql với sự cho phép đọc

MVC3 Read-Only MySql Connection String

2. tạo điểm hay thủ tục được lưu trữ với các điều khoản kiểm tra logic trong họ

MS SQL Grant permission to only a view

MySQL Grant a user permission to only view a mysql view

3. Thực hiện lớp điều khoản trong logic kinh doanh của bạn

Good Luck!

+0

Trên mục 3, Liên kết bạn đã cung cấp là dành cho MS SQL Server. Tôi không chắc chắn làm thế nào để đảm bảo truy cập tương tự trong MySQL là chỉ đọc. –

+1

@GeorgeBailey Bạn muốn nói về mục 2 về việc cấp quyền trên cấp chế độ xem? Cảm ơn cho bắt. Tôi đã thêm một liên kết cho MySQL, có vẻ như cú pháp đó trông tương tự. Cảm ơn một lần nữa! – hgulyan

0

Tùy thuộc vào trường hợp sử dụng của bạn và điều khiển bạn có, bạn có thể có lệnh gọi "chỉ đọc giao dịch được đặt" ngay sau khi kết nối hoặc sử dụng tham số --init-lệnh trên kết nối. Điều này làm việc cho trường hợp sử dụng thử nghiệm, chúng tôi có,

Đây là tài liệu giao dịch được đặt: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html, tương tự bạn cũng có thể đặt làm biến phiên nếu điều này tạo sự khác biệt https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_read_only.

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