附加的数据库是只读的

时间:2011-05-19 07:05:31

标签: sql-server sql-server-2005

我使用以下脚本来附加数据库。但是创建的数据库是只读的 我应该在脚本中进行哪些修改才能使其成为读写。请帮帮我。

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

12 个答案:

答案 0 :(得分:81)

首先确保.mdf文件所在的文件夹不是只读的。 如果是,请取消选中该选项并确保它反映到该文件夹​​中的文件夹和文件。

完成后,打开Management Studio,在对象资源管理器中右键单击只读的数据库,然后选择“属性”。在“选项”菜单中,检查“只读”属性是否为false。

enter image description here

答案 1 :(得分:16)

确保文件可写(非只读),并确保用户具有写入权限。

此外,在最新的系统上,Program Files目录是只读的。尝试将文件放在另一个目录中。

答案 2 :(得分:13)

打开数据库属性 - >选项并将数据库只读设置为 False

  • 确保使用Windows身份验证登录SQL Management Studio。
  • 确保您的用户具有对mdf和日志文件目录的写访问权。

我的诀窍......

答案 3 :(得分:11)

ALTER DATABASE [DatabaseName] SET READ_WRITE

答案 4 :(得分:9)

给sql服务帐户'NT SERVICE \ MSSQLSERVER'“完全控制”数据库文件

如果您有权访问服务器文件/文件夹,可以尝试这个对我有用的解决方案:

Windows Server 2008 R2上的SQL Server 2012

  1. 右键单击数据库(mdf / ldf)文件或文件夹,然后选择“属性”。
  2. 选择“安全”标签,然后点击“修改”按钮。
  3. 点击“添加”按钮。
  4. 输入要选择为“NT SERVICE \ MSSQLSERVER”的对象名称,然后单击“检查名称”按钮。
  5. 选择MSSQLSERVER(RDN)并单击“确定”按钮两次。
  6. 将此服务帐户“完全控制”提供给文件或文件夹。
  7. 返回SSMS,右键单击数据库并选择“属性”。
  8. 在“选项”下,向下滚动到“状态”部分,将“数据库只读”从“True”更改为“False”。

答案 5 :(得分:8)

您需要更改数据库文件夹的权限:properties - >安全标签 - >编辑... - >添加... - >用户名" NT服务\ MSSQL $ SQLEXPRESS"或者" NT服务\ MSSQLSERVER"。关闭窗口,打开Advanced ...,双击用户并设置如下: 类型:允许 适用于:此文件夹,子文件夹和文件 基本权限:全部 确保所有者也已设置。

答案 6 :(得分:4)

另一种对我有用的方法是:

在您附加之前取消附件

  • - >转到.mdf文件 - >右键单击&选择文件的属性 - >安全选项卡 - >检查组或用户名:

    表示您的姓名\帐户(可选)  并为“NT SERVICE \ MSSQLSERVER”(NB)

列出项目

- >如果没有,请点击编辑按钮     - >点击添加按钮

  and enter\search NT SERVICE\MSSQLSERVER
  • - >单击确定 - >给予充分的权利 - >然后申请确定

    然后再次确定 也可以为.ldf文件执行此操作。

然后附上

答案 7 :(得分:3)

如果SQL Server服务作为本地系统运行,请确保包含数据库的文件夹应具有本地系统帐户的完全控制权限。

这对我有用。

答案 8 :(得分:1)

您需要转到新文件夹属性>安全选项卡,并从SQL服务器安装文件夹中为具有DATA文件夹权限的SQL用户授予权限。

答案 9 :(得分:1)

此处有3个(至少)部分。

第1部分:正如其他人所建议的那样......确保文件夹和包含文件不是只读的。您将在Windows中阅读有关幻像错误的信息,您只能从文件夹中删除只读文件并包含项目,只能再次打开属性并看到它仍然被点击。这不是一个错误。老实说,它的一个特点。你可以在早期看到。 “系统”和“只读”属性具有特定含义。现在Windows已经发展并使用不同的文件系统,这些属性在文件夹上不再有意义。所以他们已经重新利用了#34;作为操作系统识别具有特殊含义或自定义的文件夹的标记(因此包含desktop.ini文件)。文件夹,例如包含字体或特殊图标和自定义等的文件夹。因此即使此属性仍然打开,它也不会影响其中的文件。因此,一旦你第一次关闭它就可以忽略它。

第2部分:同样,正如其他人所建议的那样,右键单击数据库和属性,查找选项,确保将只读属性设置为false。除非你很幸运,否则你通常无法手动改变它。但在您搜索魔术命令(sql或powershell)之前,请先看看第3部分。

第3部分:检查文件夹的权限。确保您的SQL Server用户具有完全访问权限。在大多数情况下,默认安装的用户是MSSQLSERVER或带有" NT服务的MSSQLEXPRESS"前缀。您将在数据库的security \ logins部分中找到它们。打开文件夹的属性,转到安全选项卡,然后将该用户添加到列表中。

在所有3个案例中,您可能(或可能不)必须分离并重新连接以查看已删除的只读状态。

如果我发现这3种解决方案对我不起作用的情况,我找到了另一种替代方案,我会及时将其添加到此处。希望这会有所帮助。

答案 10 :(得分:1)

如果您尝试了所有这些操作,但仍然没有运气,请再次尝试分离/附加。

答案 11 :(得分:-1)

来自Varun Rathore的回答没问题,但您必须考虑从Windows Server 2008 R2及更高版本开始,SQLServer服务将在本地虚拟帐户下运行,而不再是旧的众所周知的“网络服务”。 因此,要将新连接的数据库切换为“非只读模式”,必须为本地计算机用户行“NT SERVICE \ MSSQLSERVER”设置ldf和mdf文件的权限,其中MSSQLSERVER将是一个非常标准的服务名称安装。

结帐https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions#VA_Desc了解配置服务权限的详细信息