Вы подключаетесь с использованием логина авторизации SQL или входа в систему Windows? Если SQL auth login, как вы даете этим «входам» права доступа для Windows в папку в Windows? Windows не знает о каких-либо входах для проверки подлинности SQL, которые вы создали в SQL Server. Пожалуйста, покажите нам, что вы подразумеваете под «Я создал пользователя на сервере» - какой пользователь? какой сервер? SQL Server или Windows?
В качестве обходного пути вы также можете создать хранимую процедуру, которая выполняется как sa
или вход в систему Windows, входящий в группу sysadmin, и предоставить этому пользователю с меньшей привилегией возможность выполнить. Тем не менее, я был в состоянии сделать резервную копию базы данных путем добавления пользователя батрака без других разрешений на все и просто добавить их в db_backupoperator
роли:
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
Итак, я хотел бы подтвердить, что учетная запись службы SQL Server имеет достаточные привилегии напишите на рассматриваемый путь. Я знаю, что вы сказали, что это так, но, как я показал, это не проблема с пользователем peon
, а скорее способность основного движка писать в файловую систему.Если вы пытаетесь вышеуказанной команда резервного копирования без добавления peon
к db_backupoperator
роли, вы получите эту ошибку (она не позволяет получить в любом месте рядом с фактической командой резервного копирования или проверок каких-либо разрешения на диске):
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.
Если это учетная запись Windows, пожалуйста, подтвердите, что у пользователя есть права на запись в соответствующую папку. Попробуйте другую папку, отличную от иерархии под C:\Program Files\...
, и не пытайтесь писать напрямую в корневой каталог (например, C:\file.bak
).
Ok. Позвольте мне объяснить лучше: я создал логин, то есть элемент управления SQL Server Auth, и предоставил разрешения db_backupoperator и т. Д. Точка: он может записать резервную копию на диске, но он не может показать файловую структуру (древовидное представление в диалоговом окне) в систему, даже пути, в которых пользователь имеет разрешения (зарегистрированный пользователь Windows и учетная запись службы). Я попробую вашу процедуру и посмотрю, что я получу ..... Спасибо way ... –
Проверьте, может ли ваш пользователь выполнить xp_fixeddrives, xp_dirtree и xp_fileexist - это то, что диалог делает за кулисами. Лично я бы создал хранимую процедуру, которая заставляла базу данных копировать в качестве аргумента и управляла местоположением вывода, а не позволяла пользователю выбирать адресата из диалогового окна (или вообще использовать интерфейс). В диалоговом окне местоположения отсутствуют некоторые довольно простые функциональные возможности (например, создать папку), и это было в течение многих лет ... –