SQL Server 2016 SP1 + CU8 安装在 Windows Server 2016 标准版上。
一段时间内一切正常,我能够创建数据库,直到出于某种我不知道的原因,在我安装的卷上弹出了权限问题。
Msg 5123, Level 16, State 1, Line 1
CREATE FILE encountered operating system error 5(Access is denied.)
while attempting to open or create the physical file
'D:\MSSQL13.MSSQLSERVER\MSSQL\Data\UserDB\test.mdf'.
Msg 1802, Level 16, State 4, Line 1
CREATE DATABASE failed. Some file names listed could not be created.
Check related errors.
Run Code Online (Sandbox Code Playgroud)
文件夹 D:\MSSQL13.MSSQLSERVER\MSSQL\Data\UserDB 实际上是作为文件夹安装在 D:\MSSQL13.MSSQLSERVER\MSSQL\Data 目录中的卷。
我在谷歌上搜索了几个小时,每个链接都在喋喋不休地谈论所有权和 icacls 以及控制权,但这不是这里的问题。我想清楚的是,在此实例上运行 SQL Server 的服务帐户对这个已安装的卷以及它上面的内容具有完全控制权。
我验证了服务帐户的有效访问权限,它已明确授予完全控制权。
我的怀疑是,它与授予对作为卷而不是磁盘安装的文件夹的权限有关。这是因为在我的测试中,我可以创建一个数据库,其文件位于 D:\ 的根目录中,没有任何问题。D:\ 也是使用相同类型存储的卷。
此外,我自己的用户拥有完全控制权,但是当我尝试创建文件时,我收到此警告。
奇怪的是,我可以毫无困难地将文件夹添加到 UserDB …
我创建了一个带密码的证书
CREATE CERTIFICATE testcert
ENCRYPTION BY PASSWORD = 'test123'
WITH SUBJECT = 'Certificate for stored procedures using dynamic SQL',
START_DATE = '2010-01-01',
EXPIRY_DATE = '2100-01-01'
Run Code Online (Sandbox Code Playgroud)
然后我删除了私钥
ALTER CERTIFICATE testcert REMOVE PRIVATE KEY
Run Code Online (Sandbox Code Playgroud)
最后,我尝试备份证书
BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer'
WITH PRIVATE KEY ( DECRYPTION BY PASSWORD = 'S3creT!' ,
FILE = 'd:\mssql\testcert.pvk' ,
ENCRYPTION BY PASSWORD = 'test123' );
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:
消息 15246,级别 16,状态 1,第 1 行无法转储证书“testcert”的私钥,因为找不到私钥。
自从我删除私钥以来,这似乎很正常。
第一个问题:使用上一篇文章中解释的方法,这是否意味着要备份证书我会使用这个语句?
BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer'
Run Code Online (Sandbox Code Playgroud)
第二个问题:您将如何将证书恢复到另一台服务器和数据库?
例子 …
有没有人有一个 TSQL 脚本可以使用CREATE DATABASE FOR ATTACH语法自动生成附加所有现有用户数据库所需的代码?
例子:
CREATE DATABASE [mydatabase] ON
(FILENAME=N'E:\MSSQL\Data\mydatabase.mdf'),
(FILENAME=N'D:\MSSQL.1\MSSQL\Data\mydatabase_log.ldf'),
(FILENAME=N'E:\MSSQL\Data\mydatabase_ndf.ndf')
FOR ATTACH
Run Code Online (Sandbox Code Playgroud)
我发现了许多使用 sp_attach_db 的示例,但没有一个使用 CREATE DATABASE FOR ATTACH 语法。
谢谢,
克雷格
SQL Server 2008 R2 中的跟踪标志 1605 是什么?到目前为止我还没有找到任何关于它的文档。