小编Cra*_*ein的帖子

无法在作为文件夹安装的卷上创建数据库(错误消息 5123 和 1802)

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 …

sql-server permissions windows-server

3
推荐指数
1
解决办法
1342
查看次数

跟进证书共享问题

跟进帖子在数据库和实例之间共享由密码加密的证书

我创建了一个带密码的证书

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)

第二个问题:您将如何将证书恢复到另一台服务器和数据库?

例子 …

sql-server-2005 sql-server

2
推荐指数
1
解决办法
313
查看次数

为所有现有用户数据库生成 CREATE DATABASE FOR ATTACH

有没有人有一个 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 attach

2
推荐指数
1
解决办法
3725
查看次数

什么是跟踪标志 1605?

SQL Server 2008 R2 中的跟踪标志 1605 是什么?到目前为止我还没有找到任何关于它的文档。

sql-server sql-server-2008-r2

2
推荐指数
1
解决办法
101
查看次数