JMa*_*sch 142 sql-server security administration
我正在使用SQL Server 2008开发人员版.我试图附加AdventureWorks2008数据库.
当我试图附加时,我收到"访问被拒绝"错误.根据事件日志,它来自O/S:
打开失败:无法打开文件D:\ ProjectData\AdventureWorks\AdventureWorksLT2008_Data.mdf,文件编号为0.操作系统错误:5(访问被拒绝.).
我认为"NTFS问题",但系统(和我)修改了对这两个文件的访问权限.
我发现如果我以sa身份登录,我可以成功附加数据库,但我的用户帐户将无法正常工作.
我是我机器上本地管理员组的成员,我在SQL Server实例中担任sysadmins角色.
知道为什么我必须以sa身份登录吗?
Man*_*ndo 155
以管理员身份运行SQL Server Management Studio.(右键单击 - >以管理员身份运行)处理我案例中的所有奇怪现象.
SQL SRV EXPRESS 2008 R2.Windows 7的
JMa*_*sch 101
感谢您的所有评论.你们中的一些人帮助我找到答案.这是我发现的:
这是一个NTFS权限问题,而不是SQL问题.此外,它看起来有点类似bug(并且它是可重复的).
问题:我使用的帐户具有对mdf和ldf文件的完全控制NTFS权限.但是,它具有通过组成员身份的权限(本地管理员组具有权限,我的帐户是本地管理员的成员).(我验证了权限)
如果我尝试连接,连接到SQL Server(我在管理员组中),它会因NTFS问题而失败.
但是,如果我授予本地管理员组直接访问我的域帐户的相同文件权限,那么我可以附加没有任何问题.
(哦,是的,我检查了这台机器上的本地组,并且我验证了我的域帐户确实是本地管理员组的成员).
因此,看起来好像发生了错误,因为某些代码(在SQL Server或Management Studio中)检查用户帐户所拥有的权限,但它不会检查用户帐户继承的组权限.
这对我来说听起来很奇怪,但我可以一遍又一遍地重现它,所以我得出结论,这就是答案.
gok*_*ter 18
我想在发布的答案中添加其他信息.
分离数据库时要小心,因为您登录的Windows用户成为唯一具有.mdf文件权限的用户!.mdf文件的原始权限包括用户SQLServerMSSQLUser$<computer_name>$<instance_name>和管理员帐户被您登录的任何Windows用户(不是sql server用户)覆盖.砰的一声,所有权限都是这样的.就像其他人说过的那样,右击你的.mdf文件并仔细检查权限.
我遇到了这个问题,因为我使用SSMS连接到数据库(无论哪个sql server帐户)并分离数据库.在这之后我的Windows用户是唯一一个对.mdf文件有任何权限的用户.所以稍后当我尝试使用sa帐户附加数据库时,它会抛出"拒绝访问"错误.
要保持原始权限,您应该使数据库脱机,然后分离,然后按顺序附加,如下所示:
USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO
-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO
Run Code Online (Sandbox Code Playgroud)
小智 17
添加文件所在.mdf文件夹的权限.
检查这个名字: NT Service\MSSQLSERVER
并更改Location为您的服务器名称.
Al *_*epp 13
这个问题是由UAC(用户帐户控制)引起的,不是吗?虽然您的用户帐户是Administrators组的成员,但除非您以"管理员"身份运行程序,否则Windows 7中的UAC不允许您执行管理员操作.它不是SQL Server或Management Studio中的真正错误.(虽然它可能知道问题,并要求你提升权限而不是抱怨"错误5".)
Rol*_*n C 11
以管理员身份运行SQL Server Management Studio.(右键单击 - >以管理员身份运行)适用于Windows 7 - SQL server 2008 R2
小智 10
可以在Windows 7中以这种方式附加SQL2005数据库:
start menu >
all program >
Microsoft sql server 2005 >
sql server management studio >
right click >
run as administrator >
click ok
Run Code Online (Sandbox Code Playgroud)
然后附加数据库成功完成.
当您以sa(或任何Sql Server帐户)身份登录时,您将作为SQL Server服务帐户运行,当您以自己的身份登录时,您拥有帐户的权限.由于某种原因,您没有适当的文件访问权限,但服务帐户具有相应的文件访
该sa用户使用NTFS账户SQLServerMSSQLUser$<computer_name>$<instance_name>和SQLServerSQLAgentUser$<computer_name>$<instance_name>访问的数据库文件。您可能想尝试为这些用户中的一个或两个添加权限。
我不知道是否能解决您的问题,因为您说您对sa用户没有问题,但我希望它有所帮助。