附加SQL Server数据库时为只读的解决办法(转载)

上一篇 / 下一篇  2010-03-31 11:52:35 / 个人分类:SQLSERVER

现象:
   运行.Net的程序时,提示数据库是只读的。
  • 运行 SQL Server Management Studio(开始,运行:Sqlwb):
http://static16.photo.sina.com.cn/orignal/3f2ef118083c2b8db812f
   从配置文件,看不出有什么问题,已经具有最高权限了,应该不影响读写。但是从数据库列表中我们却发现附件的数据库是“只读”状态。这应该是导致不能修改数据的原因。

原因:

  • 附加数据库时,数据库文件的属性是只读。
  • 运行SQL Server实例的帐户对附加的数据库文件不具备相应的修改权限。

解决办法:

  • 取消文件的只读属性。
http://static9.photo.sina.com.cn/orignal/3f2ef118c8ae17c8ac1c8
   在取消文件的“只读”属性后,查看数据库属性可能仍然是“只读”的,可能还需要进行下面的操作。
  • 查看运行SQL Server实例的帐户。
   在服务(Services.msc)管理控制台中或者SQL Server配置管理器(Configuration Manager)中查看:
http://static16.photo.sina.com.cn/orignal/3f2ef1183d9f1f3fc3f7f
  • 如上图所示,如果启动SQL Server实例的帐户是Network Service,那么将其修改为Local Service,然后重新启动SQL Server实例。如果是指定的帐号用于启动SQL Server实例,那么进行下面操作。
http://static7.photo.sina.com.cn/orignal/3f2ef1187e2433cf3fce6
  • 修改文件安全属性。
http://static10.photo.sina.com.cn/orignal/3f2ef118cfbbedd18d009
   如图所示,将本例中运行SQL Server实例的帐户SqlBoot添加到对物理文件Contacts.mdf的访问权限列表中。如果存在日志文件,相应地,日志文件属性也应添加。其实,这里我们发现,在上面也可以不修改启动SQL Server实例的帐户,直接将启动SQL Server实例的帐户Network Service或者Local Service添加到对数据库物理文件的访问权限列表中即可。
   
附:

  •  附件数据库的T-SQL语句:
   CREATE DATABASE Contacts
   ON (filename='C:\Program Files\Microsoft ASP.NET\ASP.NET AJAX Sample Applications\v1.0.61025\Contacts\App_Data\Contacts.mdf')
   FOR ATTACH
  • 关于之前使用“sp_attach_db”附加数据库,微软建议不要继续使用。”重要事项:后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并应着手修改当前还在使用该功能的应用程序。我们建议您改用 CREATE DATABASE database_name FOR ATTACH。“

TAG:

 

评分:0

我来说两句

Open Toolbar