база данных прикреплена только для чтения - PullRequest
32 голосов
/ 19 мая 2011

Я использовал следующий скрипт для присоединения базы данных.Но созданная база данных доступна только для чтения.
Какие изменения я должен внести в скрипт, чтобы он стал доступен для чтения и записи.Пожалуйста, помогите мне.

USE [master]
GO
CREATE DATABASE [GemDatabase] ON 
( FILENAME = N'E:\Program Files (x86)\ICE Products\ICEConnect200\New Database\GemDatabase.mdf' ),
( FILENAME = N'E:\Program Files (x86)\ICE Products\ICEConnect200\New Database\GemDatabase_log.ldf' )
 FOR ATTACH
GO
if not exists (select name from master.sys.databases sd where name = N'GemDatabase' and SUSER_SNAME(sd.owner_sid) = SUSER_SNAME() ) EXEC [GemDatabase].dbo.sp_changedbowner @loginame=N'sa', @map=false
GO

Ответы [ 11 ]

83 голосов
/ 07 марта 2014

Сначала убедитесь, что папка, в которой находится ваш файл .mdf, не только для чтения.Если это так, снимите этот флажок и убедитесь, что он соответствует папкам и файлам в этой папке.

После этого откройте Management Studio, в проводнике объектов щелкните правой кнопкой мыши на базе данных, доступной только для чтения.и выберите Свойства.В меню «Параметры» убедитесь, что свойство «Только для чтения» имеет значение false.

enter image description here

16 голосов
/ 19 мая 2011

Убедитесь, что файлы доступны для записи (не только для чтения), и что у вашего пользователя есть права на запись в них.

Кроме того, в большинстве современных систем каталог Program Files доступен только для чтения. Попробуйте поместить файлы в другой каталог.

13 голосов
/ 04 апреля 2013

Открыть свойства базы данных -> параметры и установить База данных только для чтения на Ложь .

  • Убедитесь, что вы вошли в SQL Management Studio с использованием аутентификации Windows.
  • Убедитесь, что у вашего пользователя есть права на запись в каталог файлов mdf и log.

Сделал трюк для меня ...

11 голосов
/ 19 сентября 2014
ALTER DATABASE [DatabaseName] SET READ_WRITE
9 голосов
/ 24 июня 2015

Предоставление учетной записи службы sql 'NT SERVICE \ MSSQLSERVER' "Полный доступ" к файлам базы данных

Если у вас есть доступ к файлам / папкам сервера, вы можете попробовать это решение, которое сработало для меня:

SQL Server 2012 в Windows Server 2008 R2

  1. Щелкните правой кнопкой мыши файл или папку базы данных (mdf / ldf) и выберите «Свойства».
  2. Выберите вкладку «Безопасность» и нажмите кнопку «Изменить».
  3. Нажмите кнопку «Добавить».
  4. Введите имя объекта, которое нужно выбрать как «NT SERVICE \ MSSQLSERVER», и нажмите кнопку «Проверить имена».
  5. Выберите MSSQLSERVER (RDN) и дважды нажмите кнопку «ОК».
  6. Дайте этой учетной записи службы "Полный доступ" к файлу или папке.
  7. Вернувшись в SSMS, щелкните правой кнопкой мыши базу данных и выберите «Свойства».
  8. В разделе «Параметры» перейдите к разделу «Состояние» и измените «База данных только для чтения» с «Истина» на «Ложь».
8 голосов
/ 14 августа 2014

Вам необходимо изменить разрешение для вашей папки базы данных: свойства -> вкладка безопасности -> изменить ... -> добавить ... -> имя пользователя "NT Service \ MSSQL $ SQLEXPRESS" или "NT Service \ MSSQLSERVER". Закройте окна, откройте Advanced ..., дважды щелкните по пользователю и установите следующее: Тип: Разрешить Относится к: этой папке, подпапке и файлам Основные разрешения: все Убедитесь, что владелец также установлен.

4 голосов
/ 17 ноября 2017

Другой способ, который работал для меня:

После отсоединения перед прикреплением

  • -> перейти в файл .mdf -> щелкните правой кнопкой мыши и выберите свойства файла -> вкладка «Безопасность» -> Проверить группу или имена пользователей:

    для вашего имени \ аккаунта (необязательно) и для "NT SERVICE \ MSSQLSERVER" (NB)

Элемент списка

-> если не там, то нажмите на кнопку редактирования -> нажмите на кнопку добавления

  and enter\search NT SERVICE\MSSQLSERVER
  • -> нажмите ОК -> дать полные права -> применить тогда ок

    тогда снова хорошо сделать это также для файла .ldf.

затем прикрепите

3 голосов
/ 15 декабря 2014

Если служба SQL Server работает как локальная система, убедитесь, что папка, содержащая базы данных, имеет ПОЛНОЕ РАЗРЕШЕНИЕ НА УПРАВЛЕНИЕ для учетной записи локальной системы.

Это сработало для меня.

1 голос
/ 24 мая 2015

Есть 3 (по крайней мере) части этого.

Часть 1: Как и все остальные предлагали ... Убедитесь, что папка и содержащие файлы не только для чтения.Вы прочитаете о фантомной ошибке в окнах, где вы удаляете только чтение из папок и содержащих элементы, только чтобы снова открыть свойства и увидеть, что они все еще нажатыЭто не ошибка.Честно говоря, это особенность.Вы видите еще в первые дни.Атрибуты System и Read Only имеют определенные значения.Теперь, когда Windows эволюционировала и использует другую файловую систему, эти атрибуты больше не имеют смысла для папок.Таким образом, они были «перенаправлены» в качестве маркера для ОС, чтобы идентифицировать папки, которые имеют особое значение или настройки (и как таковые содержат файл desktop.ini).Папки, например, содержащие шрифты или специальные значки, настройки и т. Д. Таким образом, даже если этот атрибут все еще включен, он не влияет на файлы в них.Поэтому его можно проигнорировать, как только вы отключите его в первый раз.

Часть 2: Опять же, как и предлагали другие, щелкните правой кнопкой мыши базу данных, выберите свойства, найдите параметры и убедитесь, что установлено свойство только для чтения.ложно.Как правило, вы не сможете изменить это вручную, если вам не повезет.Но прежде чем приступить к поиску магических команд (sql или powershell), взгляните на часть 3.

Часть 3. Проверка разрешений для папки.Убедитесь, что ваш пользователь SQL Server имеет полный доступ к нему.В большинстве случаев этот пользователь для установки по умолчанию имеет либо MSSQLSERVER, либо MSSQLEXPRESS с префиксом «NT Service».Вы найдете их в разделе безопасности \ логины базы данных.Откройте свойства папки, перейдите на вкладку «Безопасность» и добавьте этого пользователя в список.

Во всех трех случаях вам может потребоваться (или нет) отключение и повторное подключение, чтобы увидеть состояние «Только чтение»..

Если я нахожу ситуацию, когда эти 3 решения не работают для меня, и я нахожу другую альтернативу, я добавлю ее здесь вовремя.Надеюсь, это поможет.

1 голос
/ 29 апреля 2013

Вам нужно перейти на вкладку «Свойства новой папки»> «Безопасность» и дать разрешения пользователю SQL, имеющему права на папку «ДАННЫЕ» из папки установки сервера SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...