ข้อผิดพลาดของระบบปฏิบัติการเซิร์ฟเวอร์ SQL ที่ 5:“ 5 (ปฏิเสธการเข้าถึง)”


153

ฉันเริ่มเรียนรู้ SQL และฉันมีหนังสือที่ให้ฐานข้อมูลทำงานได้ ไฟล์ด้านล่างนี้อยู่ในไดเรกทอรี แต่ปัญหาคือเมื่อฉันเรียกใช้แบบสอบถามมันทำให้ฉันมีข้อผิดพลาดนี้:

เกี่ยวกับข่าวสาร 5120 ระดับ 16 สถานะ 101 บรรทัด 1 ไม่สามารถเปิดแฟ้มทางกายภาพ "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf" ข้อผิดพลาดของระบบปฏิบัติการ 5: "5 (การเข้าถึงถูกปฏิเสธ)"

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

ในหนังสือผู้แต่งบอกว่ามันควรจะใช้ได้ แต่มันไม่ทำงานในกรณีของฉัน ฉันค้นหา แต่ฉันไม่ทราบว่าปัญหาคืออะไรฉันจึงโพสต์คำถามนี้


ถ้าแฟ้มสำรองข้อมูลที่มีอยู่แล้วโปรดให้แน่ใจว่ามันไม่ได้มีแอตทริบิวต์ "อ่านเท่านั้น" นอกเหนือไปจากการทำให้แน่ใจว่าบริการดังกล่าวมีสิทธิ์ในการเขียน
jumxozizi

คำตอบ:


133

บัญชีบริการโปรแกรมฐานข้อมูล SQL Server ต้องมีสิทธิ์ในการอ่าน / เขียนในโฟลเดอร์ใหม่

ตรวจสอบนี้

ในการแก้ไขฉันได้ทำสิ่งต่อไปนี้:

เพิ่ม Administrators Group ไปยังสิทธิ์ความปลอดภัยของไฟล์ที่มีการควบคุมเต็มรูปแบบสำหรับไฟล์ข้อมูล (S :) และ Log File (T :)

แนบฐานข้อมูลและใช้งานได้ดี

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


4
บางครั้งเซิร์ฟเวอร์ SQL จะทำงานภายใต้กลุ่มผู้ใช้อื่นนอกเหนือจากAdministrators Group
JDandChips

57
นอกจากนี้อาจช่วยในการเริ่มต้น SQL Server Management Studio ในฐานะผู้ดูแลระบบไม่ใช่เฉพาะบริการเซิร์ฟเวอร์
david.barkhuizen

1
สำหรับฉันทางออกในลิงก์ต่อไปนี้ใช้ได้: stackoverflow.com/a/19061137/365188
Ozair Kafray

3
สำหรับฉันเปลี่ยนบัญชีตัวแทนบริการเซิร์ฟเวอร์ SQL เป็นระบบภายในทำงาน
singhm0077

22
หากอินสแตนซ์ SQL Server ของคุณทำงานภายใต้บัญชีบริการ (เช่นของฉันMSSQL$SQLEXPRESS) มันอาจไม่ชัดเจนว่าคุณต้องเพิ่มบัญชีลงในรายการการอนุญาตของโฟลเดอร์เป็น:NT Service\MSSQL$SQLEXPRESS
Brian Lacy

109

โพสต์เก่า แต่นี่คือขั้นตอนที่ใช้กับ SQL Server 2014 ที่ทำงานใน windows 7:

  • แผงควบคุม ->
  • ระบบและความปลอดภัย ->
  • เครื่องมือบริหาร ->
  • บริการ ->
  • ดับเบิลคลิกเซิร์ฟเวอร์ SQL (SQLEXPRESS) -> คลิกขวาคุณสมบัติ
  • เลือกแท็บเข้าสู่ระบบ
  • เลือก "Local System Account" (ค่าเริ่มต้นคือบางบัญชี Windows ของระบบป้าน)
  • -> ตกลง
  • คลิกขวาหยุด
  • คลิกขวาที่เริ่ม

วิลา!

ฉันคิดว่าการตั้งค่าบัญชีเข้าสู่ระบบอาจเป็นตัวเลือกในการติดตั้ง แต่ถ้าเป็นเช่นนั้นมันไม่ใช่ค่าเริ่มต้นและพลาดง่ายถ้าคุณยังไม่ทราบปัญหานี้


5
ฉันลองตัวเลือกมากมายในการแข่งขัน แต่คำตอบของคุณทำงานได้ดี ขอบคุณ mickeyf
vicky

2
ใช้งานได้กับ SQL Server 2014 ภายใต้ Win 10 เช่นกัน ขอบคุณ
Johan Foley

7
-1 การทำเช่นนี้ขัดกับแนวคิดทั้งหมดของการตั้งค่าผู้ใช้รายนี้ตั้งแต่แรก มันเป็นคุณสมบัติด้านความปลอดภัยและทำให้สิ่งนี้หลีกเลี่ยงได้
NullUserException

2
ว้าว .. ไม่สามารถเชื่อได้ว่าผู้คนเพียงแค่กระโดดเข้ามาใน "คำตอบ" นี้อาจสร้างปัญหาด้านความปลอดภัยที่ยิ่งใหญ่ .. มิฉะนั้นจะไม่มีเหตุผลที่จะตั้งค่าผู้ใช้ในตอนแรกใช่ไหม? อย่างไรก็ตามมันเป็น "วิธีแก้ปัญหา" สำหรับผู้ที่ไม่พิจารณาว่าเป็นปัญหาด้านความปลอดภัยในกรณีของพวกเขา
อยากรู้อยากเห็นบอย

2
ใครก็ตามที่คิดว่าการรักษาความปลอดภัยมีความสำคัญมากกว่าการทำงานบางอย่างสามารถเพียงแค่ปิดเซิร์ฟเวอร์ SQL!
อีวาน

44

เพื่อหลีกเลี่ยงปัญหาการปฏิเสธการเข้าถึงฉันเริ่มต้น SSMS ในฐานะผู้ดูแลระบบและอนุญาตให้ฉันแนบฐานข้อมูลจากไดรฟ์ในเครื่องของฉัน ฐานข้อมูลถูกสร้างในอินสแตนซ์ SQL และ windows อื่น


3
นี่เป็นสำหรับฉัน ... ฉันแค่ดูการตั้งค่าในเครื่องโดยสมบูรณ์และได้รับปัญหานี้ใน Windows 10 Home และก่อนหน้านี้ฉันได้สร้าง "เจ้าของ" mdf & ldf ด้วยตัวเองด้วยเหตุผลอื่น - อาจเกี่ยวข้อง
Mike M

3
มันก็ใช้ได้กับฉันเช่นกัน ฉันใช้ Windows 10 และ Microsoft SQL Server 2012 ฉันได้เรียกใช้ SQL Management Studio เป็นผู้ดูแลระบบแล้วสามารถแนบฐานข้อมูล Adventure Work Sample ได้
arsho

1
สิ่งนี้ยังช่วยแก้ไขปัญหากับ Windows 10 Pro เมื่อทำงานในสภาพแวดล้อมโดเมนงาน
PerPlexSystem

เหมือนกัน - Domain Env, SSMS 2017.x, Win10 Pro แยกจากเครื่องอื่นและเชื่อมต่อกับเครื่องใหม่
TravisWhidden

44

นี่คือปัญหาที่เกี่ยวข้องกับ Windows ที่ SQL Server ไม่ได้รับสิทธิ์ที่เหมาะสมไปยังโฟลเดอร์ที่มีไฟล์. bak และด้วยเหตุนี้ข้อผิดพลาดนี้

วิธีที่ง่ายที่สุดคือการคัดลอกไฟล์. bak ไปยังตำแหน่งสำรอง SQL เริ่มต้นซึ่งมีสิทธิ์ที่จำเป็นทั้งหมด คุณไม่จำเป็นต้องเล่นซอกับสิ่งอื่นใด ในSQL Server 2012ตำแหน่งนี้คือ

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)

@ AdamLevitt คุณติดตั้ง SQL หลายรุ่นหรือติดตั้งก่อนหน้านี้หรือไม่ คุณแน่ใจหรือว่าคุณวางไว้ในตำแหน่งที่ถูกต้อง?
Hammad Khan

1
@hmd ขอบคุณฉันทำ การแก้ไขคือการส่งออกไปยังการสำรองข้อมูลปี 2012
Adam Levitt

1
โซลูชันนี้ทำงานใน SQL Server 2014 เช่นกัน เส้นทางคือ C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King

นี่ควรเป็นคำตอบ !!
Axel

ฉันมีปัญหาที่คล้ายกันกับ MS SQL Express 2016 วิธีแก้ไขคือนำไฟล์. mdf ของฉันไปไว้ในโฟลเดอร์: Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup C: \ Program Files \ Microsoft C: \ Program Files \ Microsoft
jirikadlec2

14

ฉันมีปัญหานี้ เพียงเรียกใช้ SQL Server ในฐานะผู้ดูแล


1
'เรียกใช้ในฐานะผู้ดูแลระบบ' ใน UAC ที่เหมาะกับฉัน ฉันไม่จำเป็นต้องเข้าสู่ระบบในฐานะผู้ดูแลบัญชี (ฉันอยู่ในกลุ่มผู้ดูแลระบบ)
Mike Cheel

1
ใช่ทำสิ่งเดียวกันเรียกใช้ในฐานะผู้ดูแลระบบและทุกอย่างก็โอเค
ไคลด์

12

ใช่ถูกต้องก่อนอื่นคุณควรค้นหาบัญชีบริการของ sqlserver คุณสามารถดูได้ในตัวจัดการงานเมื่อคุณกด ctrl + alt + delete ในเวลาเดียวกันจากนั้นคุณต้องให้สิทธิ์การอ่าน / เขียนของ "C : \ Murach \ SQL Server 2008 \ Databases "ไปยังบัญชีบริการ


10

ปัญหาเกิดจากการไม่มีสิทธิ์สำหรับ SQL Server ในการเข้าถึงไฟล์ mdf & ldf ขั้นตอนเหล่านี้ทั้งหมดจะทำงาน:

  1. คุณสามารถเปลี่ยนบัญชีผู้ใช้เริ่มต้นบริการ MSSQLSERVER โดยตรงด้วยบัญชีผู้ใช้ที่มีสิทธิ์ที่ดีกว่าในไฟล์ จากนั้นลองแนบฐานข้อมูล
  2. หรือคุณสามารถกำหนดผู้ใช้ให้กับไฟล์ในแท็บความปลอดภัยของคุณสมบัติไฟล์ mdf & ldf โดยตรวจสอบสิทธิ์การอ่านและเขียน
  3. เริ่มต้นด้วยบัญชีผู้ดูแลระบบ windows และเปิด SQL Server ด้วยตัวเลือก run as administrator และพยายามเข้าสู่ระบบด้วยการพิสูจน์ตัวตน windows และตอนนี้พยายามแนบฐานข้อมูล

9

ฉันแก้ปัญหานี้โดยการเพิ่มการFull controlอนุญาตสำหรับทั้งไฟล์.mdfและ.ldfสำหรับUsersกลุ่ม


5

สำหรับฉันมันได้รับการแก้ไขด้วยวิธีต่อไปนี้กับสตูดิโอการจัดการเซิร์ฟเวอร์ SQL - เข้าสู่ระบบในฐานะผู้ดูแลระบบ (ฉันเข้าสู่ระบบในการตรวจสอบ windows) - แนบไฟล์ mdf (คลิกขวาที่ฐานข้อมูล | แนบ | เพิ่ม) ออกจากระบบเป็นผู้ดูแลระบบ ผู้ใช้ปกติ


4

สิทธิ์เซิร์ฟเวอร์จริงจะไม่สำคัญในตอนนี้ ทุกอย่างดูโอเค SQL Server ต้องการสิทธิ์ของโฟลเดอร์เอง
คุณสามารถเพิ่มสิทธิ์อนุญาต SERVERNAME $ MSSQLSERVER เพื่อสัมผัสโฟลเดอร์ของคุณทั้งนี้ขึ้นอยู่กับรุ่นของคุณ นอกจากนั้นจะต้องอยู่ในไดเรกทอรี BACKUP เริ่มต้น (ไม่ว่าคุณจะติดตั้งไว้ที่ใดหรือเริ่มต้นที่ c: \ programfiles (x) \ MSSQL \ BACKUP


2

แม้ว่าคุณจะทำตามขั้นตอนต่อไปนี้คุณจะได้รับข้อความแสดงข้อผิดพลาดเดียวกัน

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

ฉันยังคงมีข้อผิดพลาดในการอนุญาต แต่จากนั้นฉันสังเกตเห็นว่าในหน้าจอแนบส่วนด้านล่างยังคงแสดงไฟล์ LOG และข้อความแสดงข้อผิดพลาดยังคงเหมือนเดิม

หวังว่านี่จะช่วยคนที่ทำสิ่งเดียวกัน


0

ทางออกที่ง่ายมาก

  1. เข้าสู่ระบบด้วยผู้ดูแลระบบ
  2. คัดลอกไฟล์ mdf และ ldf ของคุณใน "C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" โดยที่ไฟล์ข้อมูลอื่นทั้งหมดอยู่
  3. ตอนนี้แนบจากที่นั่นมันจะทำงาน

1
คุณไม่ควรจัดเก็บข้อมูลในไดเรกทอรีไฟล์โปรแกรม ตำแหน่งเริ่มต้นควรเปลี่ยนเมื่อคุณติดตั้ง
SQl

0

ฉันใช้ Entity framework ในแอปพลิเคชันของฉันและมีปัญหานี้ฉันตั้งค่าสิทธิ์ใด ๆ ในโฟลเดอร์และบริการ windows และไม่ทำงานหลังจากนั้นฉันเริ่มแอปพลิเคชันของฉันในฐานะผู้ดูแลระบบ (คลิกขวาในไฟล์ exe และเลือก "run as admin") ละเอียด.


0

หากคุณได้รับข้อผิดพลาดนี้ใน.MDFไฟล์ในAPP_DATAโฟลเดอร์ (หรือที่คุณใส่ไว้) สำหรับโครงการ Visual Studio วิธีที่ฉันทำก็คือเพียงคัดลอกการอนุญาตจากDATAโฟลเดอร์ที่มีอยู่ที่นี่ (ฉันใช้ SQL Express 2014 เพื่อสนับสนุน แอปที่เก่ากว่า):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(หมายเหตุ: เส้นทางการติดตั้งจริงของคุณจะแตกต่างกันไป - โดยเฉพาะถ้าชื่ออินสแตนซ์ของคุณแตกต่างกัน)

ดับเบิลคลิกที่DATAโฟลเดอร์ในฐานะผู้ดูแลระบบก่อนเพื่อให้แน่ใจว่าคุณมีสิทธิ์เข้าถึงจากนั้นเปิดคุณสมบัติในโฟลเดอร์และเลียนแบบAPP_DATAโฟลเดอร์เดียวกัน ในกรณีของฉันผู้ใช้ที่หายไปคือMSSQL$SQLEXPRESS2014(เพราะฉันตั้งชื่ออินสแตนซ์SQLEXPRESS2014- คุณอาจแตกต่างกัน) ที่เกิดขึ้นเป็นชื่อผู้ใช้บริการ SQL Server


0

ด้วยเหตุผลบางอย่างการตั้งค่าการอนุญาตที่ถูกต้องทั้งหมดไม่ได้ช่วยในกรณีของฉัน ฉันมีไฟล์db.bakที่ไม่สามารถกู้คืนได้เนื่องจาก5(Access is denied.)ข้อผิดพลาด ไฟล์ถูกวางไว้ในโฟลเดอร์เดียวกันกับไฟล์สำรองอื่น ๆ หลายไฟล์และการอนุญาตทั้งหมดเหมือนกันไฟล์อื่น ๆ ฉันสามารถกู้คืนไฟล์อื่นทั้งหมดยกเว้นdb.bakไฟล์นี้ ฉันพยายามเปลี่ยนล็อกบริการ SQL Server ที่ผู้ใช้ยังคงเป็นผลลัพธ์เดียวกัน ฉันพยายามคัดลอกไฟล์โดยไม่มีผลกระทบ

จากนั้นฉันพยายามสร้างไฟล์ที่เหมือนกันโดยการดำเนินการ

type db.bak > db2.bak

แทนการคัดลอกไฟล์ และ voila มันใช้งานได้!db2.bakกู้คืนสำเร็จแล้ว

ฉันสงสัยว่าปัญหาอื่น ๆ เกี่ยวกับการอ่านไฟล์สำรองอาจถูกรายงาน5(Access is denied.)โดย MS SQL


0

ใน linux ฉันไปที่/var/opt/mssql/data/โฟลเดอร์และเปิดเทอร์มินัลsudoแล้วเปลี่ยนสิทธิ์ใช้งานไฟล์ * .mdf และ * .ldf ของฉันตามด้านล่างซึ่งคุณแทนที่yourDBด้วยชื่อไฟล์ฐานข้อมูลของคุณและmyUserเป็นชื่อผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

หลังจากนั้นมันถูกเชื่อมต่ออีกครั้งโดยไม่มีปัญหาใด ๆ


0

หมายความว่าผู้ใช้ที่เข้าสู่ระบบ SSMS ไม่มีสิทธิ์ในไฟล์. mdf นี่คือวิธีการทำงานสำหรับฉัน:

ฉันได้เปิด SSMS (เรียกใช้ในฐานะผู้ดูแลระบบ) และเข้าสู่ระบบในฐานะผู้ใช้ผู้ดูแลระบบฐานข้อมูลคลิกขวาที่แนบคลิกคลิกเพิ่มเลือกไฟล์. mdf คลิกตกลง เสร็จสิ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.