KB3069154 — FIX: невозможно установить базу данных SQL Server 2012 или 2014 в однопользовательский режим, если база данных доступна только для чтения
Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2012 в один файл для загрузки. Поскольку исправления являются кумулятивными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012.
Проблемы
Предположим, что вы установили базу данных Microsoft SQL Server 2012 или SQL Server 2014 в режим «только для чтения». При попытке установить однопользовательский режим может появиться следующее сообщение об ошибке:
MSG 3906, уровень 16, состояние 1, строка 51 не удалось обновить базу данных «SDP», так как база данных доступна только для чтения. MSG 5069, уровень 16, состояние 1, строка 51 Инструкция ALTER DATABASE завершилась сбоем.
Совокупные сведения об обновлениях
Эта проблема впервые устранена в следующем накопительном обновлении SQL Server.
2 обходных пути для обновления базы данных только для чтения в SQL Server
Если база данных доступна только для чтения, вы можете легко определить статус из sys.databases или из SSMS. Общеизвестным фактом является то, что вы не можете обновлять данные в базе данных только для чтения. В этой статье мы узнаем, как устранить неполадки и исправить это.
Два варианта

Мы можем использовать SQL Server Management Studio, т. е. сценарий SSMS или T-SQL для преобразования базы данных только для чтения в базу данных для чтения и записи. Чтобы лучше понять эти варианты, давайте
- Создать базу данных
- Создайте в нем таблицы
- Добавить записи в таблицу
- Сделать базу данных доступной только для чтения
- Попробуйте добавить записи в ту же таблицу
- Просмотрите сообщение об ошибке
- Превратите базу данных обратно в режим чтения-записи.
Подготовить базу данных
От твоего SQL Server студия управления, подключитесь к своему SQL server, щелкните правой кнопкой мыши узел «База данных» и выберите параметр «Новая база данных». Нажмите Ok после ввода имени базы данных. Вы также можете использовать сценарий T-SQL, как показано в примере ниже:
Создайте таблицу из SSMS, выбрав базу данных, щелкните правой кнопкой мыши узел «Таблицы», а затем укажите «Создать» и выберите параметр «Таблица…». Введите имя столбца и типы данных, а затем сохраните с именем таблицы. Вы можете использовать приведенный ниже запрос для создания таблицы:
Добавьте записи в таблицу, используя следующий запрос:
. SQL Server Management Studio, щелкните правой кнопкой мыши базу данных и выберите параметр «Свойства». На странице свойств базы данных в разделе «Параметры» установите параметр «База данных только для чтения» с «Истина» на «Ложь». Вы также можете переключить базу данных в режим только для чтения с помощью сценария TSQL, как показано ниже:
Вы могли видеть, что SSMS теперь будет отображать статус «Только для чтения» рядом с именем базы данных.
![]()
Теперь попробуем вставить новую запись в таблицу.
В окне результатов появится следующее сообщение об ошибке.
Верните статус базы данных на чтение-запись с помощью страницы «Свойства базы данных» и установите параметр «База данных только для чтения» с «False» на «True» или выполните следующий скрипт:
Теперь при попытке добавить запись появляется сообщение об ошибке «Не удалось обновить базу данных».DataNumen«потому что база данных доступна только для чтения» исчезнет. Мы все знаем, что резервные копии баз данных помогают нам фиксировать SQL Server базы данных. Однако резервная копия базы данных только для чтения восстановит базу данных в режиме только для чтения, а не в режиме чтения-записи.
присоединенная база данных доступна только для чтения
Я использовал следующий сценарий для подключения базы данных. Но созданная база данных доступна только для чтения.
Какие изменения я должен внести в скрипт, чтобы он был доступен для чтения и записи. Пожалуйста, помоги мне.
задан 19 мая ’11, 04:05
12 ответы
Сначала убедитесь, что папка, в которой находится ваш файл .mdf, не предназначена только для чтения. Если это так, снимите этот флажок и убедитесь, что он соответствует папкам и файлам в этой папке.
Как только это будет сделано, откройте Management Studio, в обозревателе объектов щелкните правой кнопкой мыши базу данных, доступную только для чтения, и выберите «Свойства». В меню «Параметры» убедитесь, что свойство «Только для чтения» имеет значение false.

ответ дан 07 мар ’14, в 06:03
В дополнение к вышеперечисленным шагам мне также пришлось дать Сетевое обслуживание учетная запись полный контроль над файлами MDF и LDF. — ДугКоуто
Убедитесь, что файлы доступны для записи (а не только для чтения) и что у вашего пользователя есть права на запись в них.
Кроме того, в самых последних системах каталог Program Files доступен только для чтения. Попробуйте поместить файлы в другой каталог.
ответ дан 19 мая ’11, 08:05

+1 за подсказку о Program Files — Файлы данных SQL Server действительно не принадлежат Program Files каталог !! — marc_s
Когда я скопировал файлы .mdf и .ldf в папку установки сервера sql, он создает базу данных для чтения и записи. в чем будет проблема? — Маану
Проблема в том, что каталог Program Files доступен только для чтения. — Ксавье Пойнас
Я поместил их во вновь созданную папку. Но созданная база данных по-прежнему доступна только для чтения. — Маану
Эта новая папка является подкаталогом Program Files? — Ксавье Пойнас
Откройте свойства базы данных -> параметры и установите База данных только для чтения в Ложь.
- Убедитесь, что вы вошли в SQL Management Studio, используя проверку подлинности Windows.
- Убедитесь, что у вашего пользователя есть доступ на запись к каталогу файлов mdf и журналов.
ответ дан 03 апр.
Предоставление учетной записи службы sql ‘NT SERVICE \ MSSQLSERVER’ «Полный доступ» к файлам базы данных
Если у вас есть доступ к файлам / папкам сервера, вы можете попробовать это решение, которое сработало для меня:
SQL Server 2012 в Windows Server 2008 R2
- Щелкните правой кнопкой мыши файл или папку базы данных (mdf / ldf) и выберите «Свойства».
- Выберите вкладку «Безопасность» и нажмите кнопку «Изменить».
- Нажмите кнопку «Добавить».
- Введите имя объекта, которое нужно выбрать, как «NT SERVICE \ MSSQLSERVER», и нажмите кнопку «Проверить имена».
- Выберите MSSQLSERVER (RDN) и дважды нажмите кнопку «ОК».
- Предоставьте этой служебной учетной записи «Полный доступ» к файлу или папке.
- Вернувшись в SSMS, щелкните базу данных правой кнопкой мыши и выберите «Свойства».
- В разделе «Параметры» прокрутите вниз до раздела «Состояние» и измените «База данных только для чтения» с «Истина» на «Ложь».
Сработало для меня как шарм. — Закром
Вам необходимо изменить права доступа для папки вашей базы данных: свойства -> вкладка безопасности -> редактировать . -> добавить . -> имя пользователя «NT Service \ MSSQL $ SQLEXPRESS» или «NT Service \ MSSQLSERVER». Закройте окна, откройте «Дополнительно» . дважды щелкните пользователя и установите следующие параметры: Тип: Разрешить. Применяется к: этой папке, подпапке и файлам. Основные разрешения: все. Убедитесь, что также установлен владелец.
ответ дан 14 авг.
Другой способ, который сработал для меня:
После отсоединения перед прикреплением
-> перейдите к файлу .mdf -> щелкните правой кнопкой мыши и выберите свойства в файле -> вкладка безопасности -> Проверить группу или имена пользователей:
для вашего имени \ учетной записи (необязательно) и для «NT SERVICE \ MSSQLSERVER» (NB)
-> если нет, нажмите кнопку редактирования -> нажмите кнопку добавления
-> нажмите ОК -> предоставьте полные права -> примените, затем ОК
затем снова сделайте это и для файла .ldf.

Если служба SQL Server работает как локальная система, убедитесь, что папка, содержащая базы данных, должна иметь ПОЛНОЕ КОНТРОЛЬНОЕ РАЗРЕШЕНИЕ для учетной записи локальной системы.
Это работает для меня.
ответ дан 15 дек ’14, 09:12

Вам нужно перейти в свойства новой папки> вкладку безопасности и дать разрешения пользователю SQL, имеющему права на папку DATA из папки установки SQL-сервера.
ответ дан 29 апр.
В этом есть 3 (как минимум) части.
Часть 1: Как все предлагали . Убедитесь, что папка и содержащие файлы не доступны только для чтения. Вы прочитаете о фантомной ошибке в окнах, где вы удаляете только чтение из папок и содержащих элементы, только чтобы снова открыть свойства и увидеть, что они все еще нажимаются. Это не ошибка. Честно говоря, это особенность. Вы видите прошлое. Атрибуты «Система» и «Только для чтения» имеют определенное значение. Теперь, когда Windows эволюционировала и использует другую файловую систему, эти атрибуты больше не имеют смысла для папок. Поэтому они были «перепрофилированы» в качестве маркера для ОС, позволяющего идентифицировать папки, которые имеют особое значение или настройки (и как таковые содержат файл desktop.ini). Папки, например, содержащие шрифты или специальные значки, настройки и т. Д. Таким образом, даже если этот атрибут все еще включен, он не влияет на файлы в них. Таким образом, его можно игнорировать, если вы выключили его в первый раз.
Часть 2: Опять же, как предлагали другие, щелкните правой кнопкой мыши базу данных и свойства, найдите параметры, убедитесь, что для свойства только для чтения установлено значение false. Обычно вы все равно не сможете изменить это вручную, если вам не повезет. Но прежде чем искать волшебные команды (sql или powershell), взгляните на часть 3.
Часть 3: Проверьте права доступа к папке. Убедитесь, что ваш пользователь SQL Server имеет к нему полный доступ. В большинстве случаев этим пользователем для установки по умолчанию является MSSQLSERVER или MSSQLEXPRESS с префиксом «NT Service». Вы найдете их в разделе базы данных security \ logins. Откройте свойства папки, перейдите на вкладку безопасности и добавьте этого пользователя в список.
Во всех трех случаях вам может потребоваться (а может и не потребоваться) отсоединение и повторное подключение, чтобы увидеть, что статус только для чтения удален.
Если я найду ситуацию, когда эти 3 решения не работают для меня, и найду другую альтернативу, я добавлю ее сюда вовремя. Надеюсь это поможет.
MS SQL — перенесенные базы подключаются только в read-only (только для чтения)
Итак, вводная: у нас есть сервер Microsoft SQL Server, установленный на Windows Server 2008 или выше. Причем не важно — имеем ли мы SQL Standard, SQL Enterprise или SQL Express — ситуация будет одинаковой.
Пока базы данных лежат по своему пути по-умолчанию, т.е. в Program files, все с ними хорошо. Но как только мы перенесем их в другой каталог (а тем более — на другой диск) — сразу появляются проблемы.
Проблемы заключаются в том, что либо MS SQL Server не желает подключать (аттачить) вовсе перенесенные базы данных, либо подключает, но только в режиме «только для чтения» (т.е. read-only).
Решение.
Проблема заключается в правах на папку, куда Вы перенесли базы данных. Дело в том, что изначально MS SQL Server прав на запись туда не имеет, соответственно, и работает не так.
Чтобы узнать — какие права нужны для этой папки — нужно пройти по адресу, где эти базы лежат по-умолчанию на данном сервере (например,
), нажать правой кнопкой мыши на папке с базами данных (как правило — «DATA»), в контекстном меню выбрать «Свойства», далее перейти на вкладку «Безопасность» и посмотреть текущие права.
Вы увидите там надпись вида «SQLServerMSSQLUser$HOSTNAME$SQLExpress» или типа того (вместо HOSTNAME — имя Вашего сервера, вместо SQLExpress — имя инстанции или ничего).
Теперь топаем туда, куда Вы базы скопировали, и добавляем эту группу с полными правами в безопасность (кстати да, это группа, а не пользователь).
А вот отсюда читаем внимательно! Просто так, введя частично имя группы и нажав на кнопку «Проверить имена» Вы ее не добавите! Windows будет себя вести так, как будто такого группы нет в ни в системе, ни в домене — нигде вообще. Почему это сделано — загадка (ибо безопасности оно не добавляет — отчаившись, админы добавляют группу «Все» и дают максимальные права на папку).
Вводить имя группы нужно ПОЛНОСТЬЮ. Каждый блин символ! Один в один, вот прямо как написано во вкладке «Безопасность» папки «DATA», где на ЭТОМ сервере лежат базы по-умолчанию. Если не введете хотя-бы один символ — группа не распознается. И неважно — какие объекты для поиска Вы выбираете — все равно пока не введете символ в символ — ОС будет говорить, что такого объекта не существует.
Итак, добавили группу с максимальными правами к папке, где сейчас лежат нужные базы данных — и снова пробуем присоединить их в MS SQL Server. Теперь должно получиться.