2012-04-28 28 views
22

Tôi đã tạo người dùng mới trên máy chủ sẽ truy cập một số cơ sở dữ liệu nhất định.Quyền sao lưu

Nhưng khi tôi đi để sao lưu hoặc khôi phục lại cơ sở dữ liệu tôi nhận được lỗi:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
Cannot access the specified path or file on the server. Verify that you have the necessary security privileges and that the path or file exists.....................

Các lỗi cho thấy đối với bất kỳ con đường khác trong hệ thống của tôi. Ngay cả những nơi người dùng và Tài khoản dịch vụ có toàn quyền kiểm soát.

NHƯNG, nếu tôi nhập đường dẫn đầy đủ và nhấp vào OK, nó phàn nàn rằng nó không thể hiển thị, NHƯNG nó sao lưu hoặc khôi phục cơ sở dữ liệu. Chỉ cần không hiển thị chế độ xem dạng cây cho đường dẫn.

Nếu tôi thực hiện thao tác bằng tài khoản sa, hộp thoại sẽ hiển thị tất cả các đường dẫn mà không có khiếu nại.

PS: Đã thêm người dùng vào vai trò db_backoperator.

Quyền nào là bắt buộc?

Trả lời

13

Bạn có đang kết nối bằng cách sử dụng thông tin đăng nhập xác thực SQL hoặc thông tin đăng nhập Windows không? Nếu một đăng nhập auth SQL, làm thế nào bạn cho rằng đăng nhập SQL "quyền kiểm soát đầy đủ" vào một thư mục trong Windows? Windows không có ý tưởng về bất kỳ đăng nhập xác thực SQL nào bạn đã tạo trong SQL Server. Vui lòng cho chúng tôi biết chính xác ý của bạn là "Tôi đã tạo người dùng trên máy chủ" - người dùng nào? yêu cầu gì? SQL Server hoặc Windows? Để giải quyết sự cố này, bạn cũng có thể tạo một thủ tục được lưu trữ thực thi như sa hoặc đăng nhập Windows là một phần của nhóm sysadmin và cung cấp cho người dùng ít đặc quyền hơn khả năng thực thi. Tuy nhiên tôi đã có thể sao lưu cơ sở dữ liệu bằng cách thêm một người sử dụng người làm mướn không có quyền khác ở tất cả và chỉ cần thêm chúng vào db_backupoperator vai trò:

CREATE LOGIN peon WITH PASSWORD = 'foo', CHECK_POLICY = OFF; 
GO 
CREATE DATABASE splunge; 
GO 
USE splunge; 
GO 
CREATE USER peon FROM LOGIN peon; 
GO 
EXEC sp_addrolemember 'db_backupoperator', 'peon'; 
GO 
EXECUTE AS USER = 'peon'; 
GO 
BACKUP DATABASE splunge 
    TO DISK = 'C:\tmp\splung.bak' -- change this path obviously 
    WITH INIT, COMPRESSION; 
GO 
REVERT; 
GO 

Vì vậy, tôi sẽ xác nhận rằng tài khoản dịch vụ SQL Server có đủ đặc quyền để ghi vào đường dẫn được đề cập. Tôi biết bạn nói rằng đây là trường hợp nhưng như tôi đã cho thấy điều này dường như không phải là một vấn đề với người sử dụng peon mà là khả năng của động cơ cơ bản để ghi vào hệ thống tập tin.Nếu bạn cố gắng lệnh sao lưu trên mà không cần thêm peon đến vai trò db_backupoperator, bạn nhận được lỗi này (nó không cho phép bạn có được bất cứ nơi nào gần lệnh sao lưu thực tế hoặc xác minh bất kỳ điều khoản trên đĩa):

Msg 262, Level 14, State 1, Line 1 
BACKUP DATABASE permission denied in database 'splunge'. 
Msg 3013, Level 16, State 1, Line 1 
BACKUP DATABASE is terminating abnormally. 

Nếu đây là thông tin đăng nhập Windows, sau đó vui lòng xác thực rằng người dùng thực sự có quyền ghi vào thư mục được đề cập. Thử một thư mục khác với cấu trúc phân cấp dưới C:\Program Files\... và không cố gắng viết trực tiếp vào thư mục gốc (ví dụ: C:\file.bak).

+1

Ok.Làm cho tôi giải thích tốt hơn: Tôi đã tạo thông tin đăng nhập, đó là điều khiển SQL Server Auth và cấp quyền truy cập của db_backupoperator và vân vân. Điểm này là: Nó có thể ghi sao lưu trên đĩa, nhưng không thể hiển thị cấu trúc tập tin (khung nhìn cây trên hộp thoại) cho hệ thống, thậm chí các đường dẫn mà người dùng có quyền (người dùng cửa sổ đã đăng nhập và Tài khoản dịch vụ). Tôi sẽ thử quy trình của bạn và xem những gì tôi nhận được ..... Cách ... –

+0

Kiểm tra xem người dùng của bạn có thể thực thi xp_fixeddrives, xp_dirtree và xp_fileexist - đây là những gì hộp thoại làm đằng sau hậu trường. Cá nhân tôi sẽ tạo một thủ tục lưu trữ lấy cơ sở dữ liệu để sao lưu làm đối số và kiểm soát vị trí đầu ra thay vì cho phép người dùng chọn đích từ hộp thoại (hoặc sử dụng giao diện người dùng). Hộp thoại vị trí thiếu một số chức năng khá cơ bản (chẳng hạn như tạo thư mục) và theo cách đó trong nhiều năm ... –

1

Tôi đoán rằng đây là sự cố với xác thực Windows và bảo mật tích hợp. Đôi khi SQL Server mạo danh người dùng đăng nhập. Thử thêm các quyền Windows ACL cho người dùng Windows mà bạn đang đăng nhập.

+0

Điều đó cũng xảy ra khi tôi đăng nhập với tư cách Quản trị viên Windows nhưng sử dụng Đăng nhập "Người dùng" (Không phải là Sa). Điều này phải làm với bảo mật tích hợp hoặc vai trò/quyền hạn? Đó là vấn đề hiện tại của tôi ngay bây giờ, tôi không biết vấn đề là ở đâu =/ –

12

db_backupoperator là vai trò cơ sở dữ liệu, không phải vai trò máy chủ hoặc quyền Windows. Nó chỉ cấp cho người dùng quyền truy cập cần thiết vào cơ sở dữ liệu để tạo bản sao lưu. Nó không cấp bất kỳ quyền nào cho cấu trúc tệp của máy chủ, cần thiết để thực sự tạo tệp sao lưu.

IIRC, để truy cập cấu trúc tệp để tạo bản sao lưu, người dùng phải có quyền truy cập vào cửa sổ/miền hoặc có Vai trò máy chủ sysadmin để chọn quyền truy cập Windows của Windows Server.

Ngoài ra, để thực sự Khôi phục cơ sở dữ liệu, người dùng sẽ cần Vai trò máy chủ dbcreator.

+0

Tôi đã thêm vào diskadmin, dbcreator và serveradmin nhưng không hoạt động. Với sysadmin hoạt động tốt nhưng tôi không thể để người dùng đó trở thành sysadmin. –

+0

Vâng, diskadmin và serveradmin tôi không chắc chắn. Xem nếu sysadmin hoạt động. – RBarryYoung

1

Tôi đang chạy Windows 10 (x64), SQL Server Express 2014, cố khôi phục bản sao lưu sang cơ sở dữ liệu SQL Server 2005 x86 để tôi có thể sử dụng dữ liệu và trợ giúp giải quyết lỗi trong ứng dụng của chúng tôi. Tôi chạy vào cùng một kịch bản với quyền khi sao lưu và khôi phục tệp .bak. Một điều tương tự ở đây, tôi là quản trị viên trên máy tính của mình, tôi cho rằng dịch vụ SQL Server đang chạy trong tài khoản Windows của tôi (vì tôi đăng nhập vào SQL Management với các thông tin đăng nhập Windows của mình).

Vì vậy, những gì tôi đã làm là vào Dịch vụ trong Windows, tìm thấy Máy chủ SQL, nhấp chuột phải vào Thuộc tính, dừng dịch vụ, sau đó chuyển đến tab Đăng nhập và thay đổi "Đăng nhập thành" thành "Tài khoản hệ thống cục bộ" và chọn hộp cho biết "Cho phép dịch vụ tương tác với máy tính để bàn". Bắt đầu dịch vụ và tôi đang trên đường.

Vì môi trường của tôi bị đóng - chỉ dành cho phát triển - đây là cách khắc phục nhanh chóng để tôi bắt đầu. Tôi nên cảnh báo bạn, đây không phải là phương pháp hay nhất cho người dùng cuối! Chỉ cho chúng tôi devs.

Các vấn đề liên quan