Thông tin từ một DB SQLite được trình bày cho người dùng thông qua một máy chủ web (được hiển thị trong trình duyệt HTML). DB được nạp một lần cho tất cả bởi một ứng dụng nhỏ độc lập với máy chủ web. Không thể thay đổi dữ liệu DB từ trình duyệt của người dùng (đây là dịch vụ chỉ đọc).Các tệp DB SQLite có thể được thực hiện chỉ đọc không?
Vì máy chủ web có id người dùng riêng, nó truy cập tệp DB SQLite với quyền "khác". Vì lý do bảo mật, tôi muốn đặt quyền tệp DB là rw-rw-r--
.
Thật không may, với bộ quyền này, tôi nhận được cảnh báo attempt to write a readonly database at line xxx
trỏ đến một dòng về giao dịch SELECT
(về nguyên tắc là chỉ đọc). Tất nhiên, tôi không nhận được kết quả.
Nếu quyền được thay đổi thành rw-rw-rw
, mọi thứ hoạt động tốt, nhưng điều đó có nghĩa là mọi người đều có thể giả mạo DB.
Có lý do nào khiến DB SQLite không thể truy cập chỉ đọc không?
Có các quy trình "đằng sau hậu trường" cần truy cập ghi, ngay cả đối với các giao dịch SELECT không?
Tra cứu trên StackOverflow cho thấy mọi người thường phàn nàn về tình huống ngược lại: gặp phải quyền truy cập chỉ đọc ngăn việc ghi vào DB. Mục tiêu của tôi là bảo vệ DB của tôi trước bất kỳ thay đổi nào.
Đối với những câu chuyện hoàn chỉnh, ứng dụng web của tôi được viết bằng Perl
và sử dụng DBD::SQLite
Dường như với tôi như [một số phiên bản] (http://search.cpan.org/~ishigaki/DBD-SQLite-1.48/lib/DBD/SQLite.pm) của DBD :: SQLite cho phép bạn chỉ định [ các tham số URI SQLite chuẩn] (http://www.sqlite.org/uri.html). Một trong số đó là 'mode = ro'. –
Bạn đang sử dụng chế độ WAL? –
@CL DB được mở bằng các chế độ mặc định; Chế độ WAL chỉ được bật nếu nó là mặc định – ajlittoz