我正在从SSMS运行以下T语句
CREATE DATABASE SomeDB
GO
有结果
命令已成功完成。
但实际上没有创建任何数据库。我一直在研究,并偶然发现这的帖子,它有同样的行为。该帖子的解决方案是在具有修改sys.databases权限的帐户下运行脚本。
但是,我正在运行脚本并连接到DB的用户是角色sysadmin
,这足以创建一个数据库。
对这里发生了什么有什么想法吗?
编辑1
如果我将脚本(这是整个脚本,实际上名为SomeDB
的DB进行测试)更改为以下内容
CREATE DATABASE SomeDB
GO
USE SomeDB
我在SSMS的消息面板中得到以下信息。
Msg 911,第16级,状态1,第56线 数据库'SomeDB‘不存在。确保输入的名称正确。
如果我把这个改成
CREATE DATABASE SomeDB
GO
SELECT * from sys.databases
我在“消息”面板中看到以下内容
命令已成功完成。
但是没有结果面板。这意味着对sys.databases
的访问受到限制,但奇怪的是没有错误消息。
编辑2
更进一步,并试图缩小问题,我已经运行了以下通过一个非高架命令行;
sqlcmd -S .\SQLExpress2014 -Q "CREATE DATABASE SomeDB"
这一次数据库确实存在。这将问题缩小到SSMS本身,而不是Server或语法怪癖。
发布于 2017-10-24 16:31:54
解决方案:作为管理运行SSMS。
尽管CREATE DATABASE
通过一个未提升的命令行很好地工作,但是SSMS需要管理员特权才能这样做。沉默的失败是.一个可能的窃听器?
我将对此做进一步的研究,但我的工作假设是,在通过命令行执行时,它使用实例的凭据(旧版本使用Network Service
,对于后期版本使用NT Service\MSSQL$SQLEXPRESS
--这里有很强的权限问题)来写入%programfiles%
文件夹。如果通过Windows帐户连接,SSMS将使用当前登录用户(未提升)。如果没有提升,就无法对%programfiles%
进行写访问。
尽管如此,即使是这种情况(需要验证),在这个上下文中执行CREATE DATABASE
时仍然会出现访问错误。
发布于 2017-10-24 15:23:02
右键单击对象资源管理器中的“数据库”文件夹并刷新。然后检查是否存在DB。
发布于 2017-10-24 17:24:06
1.-作为Admin运行SSMS并创建数据库2。-在命令显示它成功地创建了数据库之后,尝试断开与对象资源管理器的连接,并再次连接以查看它是否出现。
https://stackoverflow.com/questions/46914275
复制相似问题