SQL Server Express CREATE DATABASE 权限在数据库“主”中被拒绝

Posted

技术标签:

【中文标题】SQL Server Express CREATE DATABASE 权限在数据库“主”中被拒绝【英文标题】:SQL Server Express CREATE DATABASE permission denied in database 'master' 【发布时间】:2009-10-23 23:57:22 【问题描述】:

将选项更改为 UserInstance="False" 后,错误开始发生。

因为我要使用全文搜索,所以需要更改选项。但是,它停止工作。有没有办法让它再次工作?

我将应用程序池作为具有完全控制权的网络服务运行。

【问题讨论】:

【参考方案1】:
    从此Microsoft Site下载脚本 以管理员身份运行 按照说明和您的设置进行操作。

2014 年 9 月 3 日更新

上面的微软网址已经失效了,有人花时间把它保存到GitHubGist,链接如下https://gist.github.com/wadewegner/1677788

2021 年 11 月 1 日更新

以下是整个脚本,不记得在 2014 年能够做到这一点,我猜这是 2021 年的福利之一。

    @echo off
    rem
    rem ****************************************************************************
    rem
    rem    Copyright (c) Microsoft Corporation. All rights reserved.
    rem    This code is licensed under the Microsoft Public License.
    rem    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
    rem    ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
    rem    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
    rem    PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
    rem
    rem ****************************************************************************
    rem
    rem CMD script to add a user to the SQL Server sysadmin role
    rem
    rem Input:  %1 specifies the instance name to be modified. Defaults to SQLEXPRESS.
    rem         %2 specifies the principal identity to be added (in the form "<domain>\<user>").
    rem            If omitted, the script will request elevation and add the current user (pre-elevation) to the sysadmin role.
    rem            If provided explicitly, the script is assumed to be running elevated already.
    rem
    rem Method: 1) restart the SQL service with the '-m' option, which allows a single connection from a box admin
    rem            (the box admin is temporarily added to the sysadmin role with this start option)
    rem         2) connect to the SQL instance and add the user to the sysadmin role
    rem         3) restart the SQL service for normal connections
    rem
    rem Output: Messages indicating success/failure.
    rem         Note that if elevation is done by this script, a new command process window is created: the output of this
    rem         window is not directly accessible to the caller.
    rem
    rem
    setlocal
    set sqlresult=N/A
    if .%1 == . (set sqlinstance=SQLEXPRESS) else (set sqlinstance=%1)
    if /I %sqlinstance% == MSSQLSERVER (set sqlservice=MSSQLSERVER) else (set sqlservice=MSSQL$%sqlinstance%)
    if .%2 == . (set sqllogin="%USERDOMAIN%\%USERNAME%") else (set sqllogin=%2)
    rem remove enclosing quotes
    for %%i in (%sqllogin%) do set sqllogin=%%~i
    @echo Adding '%sqllogin%' to the 'sysadmin' role on SQL Server instance '%sqlinstance%'.
    @echo Verify the '%sqlservice%' service exists ...
    set srvstate=0
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
    if .%srvstate% == .0 goto existerror
    rem
    rem elevate if <domain/user> was defaulted
    rem
    if NOT .%2 == . goto continue
    echo new ActiveXObject("Shell.Application").ShellExecute("cmd.exe", "/D /Q /C pushd \""+WScript.Arguments(0)+"\" & \""+WScript.Arguments(1)+"\" %sqlinstance% \""+WScript.Arguments(2)+"\"", "", "runas"); >"%TEMP%\addsysadmin7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8.js"
    call "%TEMP%\addsysadmin7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8.js" "%cd%" %0 "%sqllogin%"
    del "%TEMP%\addsysadmin7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8.js"
    goto :EOF
    :continue
    rem
    rem determine if the SQL service is running
    rem
    set srvstarted=0
    set srvstate=0
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
    if .%srvstate% == .0 goto queryerror
    rem
    rem if required, stop the SQL service
    rem
    if .%srvstate% == .1 goto startm
    set srvstarted=1
    @echo Stop the '%sqlservice%' service ...
    net stop %sqlservice%
    if errorlevel 1 goto stoperror
    :startm
    rem
    rem start the SQL service with the '-m' option (single admin connection) and wait until its STATE is '4' (STARTED)
    rem also use trace flags as follows:
    rem     3659 - log all errors to errorlog
    rem     4010 - enable shared memory only (lpc:)
    rem     4022 - do not start autoprocs
    rem
    @echo Start the '%sqlservice%' service in maintenance mode ...
    sc start %sqlservice% -m -T3659 -T4010 -T4022 >nul
    if errorlevel 1 goto startmerror
    :checkstate1
    set srvstate=0
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
    if .%srvstate% == .0 goto queryerror
    if .%srvstate% == .1 goto startmerror
    if NOT .%srvstate% == .4 goto checkstate1
    rem
    rem add the specified user to the sysadmin role
    rem access tempdb to avoid a misleading shutdown error
    rem
    @echo Add '%sqllogin%' to the 'sysadmin' role ...
    for /F "usebackq tokens=1,3" %%i in (`sqlcmd -S np:\\.\pipe\SQLLocal\%sqlinstance% -E -Q "create table #foo (bar int); declare @rc int; execute @rc = sp_addsrvrolemember '$(sqllogin)', 'sysadmin'; print 'RETURN_CODE : '+CAST(@rc as char)"`) do if .%%i == .RETURN_CODE set sqlresult=%%j
    rem
    rem stop the SQL service
    rem
    @echo Stop the '%sqlservice%' service ...
    net stop %sqlservice%
    if errorlevel 1 goto stoperror
    if .%srvstarted% == .0 goto exit
    rem
    rem start the SQL service for normal connections
    rem
    net start %sqlservice%
    if errorlevel 1 goto starterror
    goto exit
    rem
    rem handle unexpected errors
    rem
    :existerror
    sc query %sqlservice%
    @echo '%sqlservice%' service is invalid
    goto exit
    :queryerror
    @echo 'sc query %sqlservice%' failed
    goto exit
    :stoperror
    @echo 'net stop %sqlservice%' failed
    goto exit
    :startmerror
    @echo 'sc start %sqlservice% -m' failed
    goto exit
    :starterror
    @echo 'net start %sqlservice%' failed
    goto exit
    :exit
    if .%sqlresult% == .0 (@echo '%sqllogin%' was successfully added to the 'sysadmin' role.) else (@echo '%sqllogin%' was NOT added to the 'sysadmin' role: SQL return code is %sqlresult%.)
    endlocal

【讨论】:

很遗憾,该链接不再有效,MS 存档已停用。 幸好有人花时间将其存储/提取为 Gist gist.github.com/wadewegner/1677788 谢谢乔瓦尼!救了我的培根。您能否将要点链接添加到您的答案中?我一度以为您的评论来自一位随机的乐于助人的用户。 像魅力一样工作。谢谢! 成功了..谢谢【参考方案2】:

here 提供的解决方案并非完全针对您的问题,而是针对给定的错误。

    开始 --> 所有程序 --> Microsoft SQL Server 2005 --> 配置工具 --> SQL Server 外围应用配置

    添加新管理员

    选择“SQLEXPRESS 上的 SQL Server SysAdmin 角色成员”并将其添加到右侧框中。

    点击确定。

【讨论】:

对我来说,在 windows server 2012 上使用 SQL 2012,我只需要搜索 sql management studio,然后右键单击并“以管理员身份运行”。然后,当我创建数据库时,这个错误就消失了。这与下面@Patel Ravi 的答案相同,但是这个答案和 Patel 的答案之间有很多噪音,这可能会让你找不到它.... Geovani 的回答帮助我使用了 SQL 2008。2008 似乎没有 SQL Server Surface 工具。我的电脑上没有看到sql management studio。 像@jaminto 一样,以管理员身份运行 SQL Server Management Studio(右键单击,以管理员身份运行)允许我创建数据库。 WOOT【参考方案3】:

Microsoft SQL Server 的解决方案,错误:262

单击开始 -> 在 Microsoft SQL Server 2005 中单击 现在右键单击 SQL Server Management Studio 点击以管理员身份运行

【讨论】:

【参考方案4】:

如果您在 Sql server 2008 management studio 中遇到与以下链接相同的错误,经过我找到此链接的努力后,以下链接将解决此错误: http://social.msdn.microsoft.com/Forums/en-US/sqlexpress/thread/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/

【讨论】:

【参考方案5】:

我有同样的问题,我试试这个:

    在您的 PC 上以管理员身份登录 以“Windows 身份验证”身份登录 SQL Server Management Studio 点击Security > Login > 选择您的登录名 您要在其中创建数据库 > 右键单击​​然后Properties > 点击服务器角色 > 然后点击清单“dbcreator”。 关闭并使用您的登录帐户重新登录。

这对我有用,希望对你有所帮助。

*抱歉我的英语不好

【讨论】:

你可能只需要 dbcreator,不需要 sysadmin【参考方案6】:

您使用什么登录名连接到 SQL Server?您需要使用具有足够权限来创建数据库的登录名进行连接。网络服务可能不够好,除非您进入 SQL Server 并将它们添加为具有足够权限的登录。

【讨论】:

【参考方案7】:

我知道,这是一个老问题,但没有适合我的解决方案。这是我所做的:

USE master 
GO 
GRANT CREATE TABLE TO PUBLIC

使用您需要的每个权限重复此操作,例如GRANT CREATE DATABASE TO PUBLIC,... 您必须拥有“公共”服务器角色(是的,我显然是队长)。

注意 1:GRANT ALL TO PUBLIC 已弃用,在 2017 年不再有效。

注意 2:我尝试使用 wix 工具集构建 msi 安装程序。这个工具集调用了一个 powershell 文件,它创建了数据库,......只是给你一些背景信息:)

【讨论】:

完美,也为我工作。只是补充一点,这似乎是一个专门的 SQL Express 问题和解决方案。相同的数据库,相同的脚本,在另一个版本中没有问题。【参考方案8】:

添加到@Kho dir 答案。

如果您无法使用 windows 用户创建数据库,这也适用。您只需要使用 SQL Server 身份验证登录,然后重复@Kho dir 提到的过程。

【讨论】:

【参考方案9】:

对于 SQL Server 2012,

    首先,以管理员身份登录SQL Server,进入Security标签

    然后进入Server Roles并双击sysadmin角色

    现在通过单击添加按钮添加您想要授予创建数据库权限的用户

    单击确定按钮,现在运行查询

希望这对某人有所帮助

【讨论】:

【参考方案10】:

在 SSMS 中执行以下指令后,一切正常:

create login [IIS APPPOOL\MyWebAPP] from windows;

exec sp_addsrvrolemember N'IIS APPPOOL\MyWebAPP', sysadmin

【讨论】:

【参考方案11】:

    使用管理员帐户登录您的服务器/PC

    以“Windows 身份验证”身份登录 SQL Server Management Studio

    单击安全 -> 登录 -> 选择您的 -> 右键单击​​然后选择属性或双击 -> 单击服务器角色 -> 然后检查清单 'dbcreator' 和 'sysadmin' 然后单击确定按钮。

    刷新您的数据库。

现在,您可以创建新数据库了。

【讨论】:

【参考方案12】:

那是因为您在表格下拉列表中选择了您的主表格 Table Selected

选择您要使用的表并继续执行您的查询

【讨论】:

以上是关于SQL Server Express CREATE DATABASE 权限在数据库“主”中被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具

Microsoft SQL Server 2017 Express and Management Studio Express

如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)

安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具

您如何使用 SQL Server CE 和 SQL Server 2008 Express?

从 SQL Server Express 导入 SQL Server CE