Czy użytkownik uruchamiający sqlite3 (lub cokolwiek, czego używasz do wykonania zapytania) ma uprawnienia do zapisu w bazie danych? Czy dwukrotnie sprawdziłeś własność plików?
Widziałem to w aplikacji internetowej, gdzie zapomniałem ustawić GID w pliku bazy danych, a konto „www-data” (na którym działa Apache) otrzymało odmowę dostępu do zapisu do pliku.
Przyczyn tego komunikatu o błędzie może być kilka:
Baza danych jest otwarta w kilku procesach w tym samym czasie ( patrz FAQ ).
Istnieje wtyczka do kompresji i szyfrowania bazy danych. Nie pozwala na modyfikację bazy danych.
Na koniec inny często zadawane pytania mówi: „Upewnij się, że katalog zawierający plik bazy danych jest również zapisywalny dla użytkownika wykonującego skrypt CGI”. Myślę, że dzieje się tak, ponieważ silnik musi utworzyć więcej plików w katalogu.
Cały system plików może być tylko do odczytu, na przykład po awarii.
W systemach uniksowych inny proces może zastąpić cały plik.
Mogę dodać do tej listy: plik bazy danych został wymieniony podczas użytkowania. Wolę nie musieć wyjaśniać głupoty, która doprowadziła do takiego wniosku.
To powinno być oznaczone jako odpowiedź. W moim przypadku (aplikacja komputerowa) było to związane z kompresowaniem bazy danych przez system Windows z powodu zbyt małej ilości miejsca na głównym dysku twardym. Myślę, że Windows zapyta użytkownika, czy chce skompresować pliki w celu uzyskania miejsca, jeśli użytkownik powie tak, może pojawić się problem z bazą danych tylko do odczytu.
(ten komunikat o błędzie jest zwykle mylący i jest zwykle ogólnym błędem dotyczącym uprawnień)
W systemie Windows
Jeśli wydajesz SQL bezpośrednio w bazie danych, upewnij się, że aplikacja, której używasz do uruchamiania SQL, działa jako administrator
Jeśli aplikacja podejmuje próbę aktualizacji, konto, którego używa do uzyskiwania dostępu do bazy danych, może wymagać uprawnień do folderu zawierającego plik bazy danych. Na przykład, jeśli IIS uzyskuje dostęp do bazy danych, zarówno IUSR, jak i IIS_IUSRS mogą wymagać odpowiednich uprawnień (możesz spróbować, tymczasowo dając tym kontom pełną kontrolę nad folderem, sprawdzając, czy to działa, a następnie wiążąc odpowiednie uprawnienia)
Dałem „pełną kontrolę” dla „Wszystkich” w systemie Windows 10 i nadal nie działało. Jednak, jak stwierdził @EbenRoux, może być konieczne uruchomienie „przeglądarki DB” jako administrator, dzięki czemu u mnie działa.
Było to spowodowane przez ActiveSync w Windows Mobile - folder, w którym pracowałem, został zsynchronizowany, więc proces AS od czasu do czasu przechwytywał plik DB, powodując ten błąd.
W systemie Linux nadaj uprawnienia do odczytu / zapisu do całego folderu zawierającego plik bazy danych.
Ponadto SELinux może blokować zapis. Musisz ustawić odpowiednie uprawnienia.
W moim SELinuksie Management GUI (w Fedorze 19), zaznaczyłem pole w linii oznaczonej httpd_unified (Ujednolicona obsługa HTTPD wszystkich plików zawartości) i było dobrze.
Nasz system cierpiał na ten problem i na pewno nie był to problem z uprawnieniami, ponieważ sam program byłby w stanie otworzyć bazę danych jako zapisywalną z wielu wątków przez większość czasu, ale czasami (tylko w systemie Windows, a nie na OSX), wątek otrzymywałby te błędy, mimo że wszystkie inne wątki w programie nie miały żadnych problemów.
W końcu odkryliśmy, że wątki, które kończyły się niepowodzeniem, to tylko te, które próbowały otworzyć bazę danych natychmiast po jej zamknięciu przez inny wątek (w ciągu 3 ms). Spekulowaliśmy, że problem wynikał z faktu, że system Windows (lub implementacja sqlite pod Windows) nie zawsze od razu czyści zasoby plików po zamknięciu pliku. Rozwiązaliśmy ten problem, uruchamiając zapytanie testowe do bazy danych podczas otwierania (np. Tworząc, a następnie usuwając tabelę o głupiej nazwie). Jeśli tworzenie / upuszczanie nie powiodło się, czekaliśmy 50 ms i próbowaliśmy ponownie, powtarzając, aż się powiedzie lub upłynęło 5 sekund.
Zadziałało; najwyraźniej wystarczyło wystarczająco dużo czasu, aby zasoby zostały przepuszczone na dysk.
Aby podzielić się osobistym doświadczeniem, napotkałem ten błąd, który ostatecznie naprawił oba. Może niekoniecznie być związany z twoim problemem, ale wygląda na to, że ten błąd jest tak ogólny, że można go przypisać miliardom rzeczy.
Instancja bazy danych otwarta w innej aplikacji. Moja baza danych wydawała się być w stanie „zablokowanym”, więc przechodzi w tryb tylko do odczytu. Udało mi się to wyśledzić, zatrzymując drugą instancję aplikacji udostępniającej bazę danych.
Uprawnienia do drzewa katalogów - upewnij się, że konto użytkownika ma uprawnienia nie tylko na poziomie pliku, ale na całym wyższym poziomie katalogu, aż do poziomu /.
Edytuj bazę danych: miałem problemy z edycją bazy danych. Skończyło się na tym, że musiałem
sudo chown `` nazwa użytkownika innego niż root '' ts3server.sqlitedb,
o ile nie był to root, mogłem edytować plik. Nazwa użytkownika to nazwa użytkownika mojego konta innego niż root.
Auto start TeamSpeak: jako konto użytkownika innego niż root
crontab -e
@reboot / path to ts3server / aka /home/ts3server/ts3server_startscript.sh start
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.