Необходимо дать права только на выполнение данной команды:
INSERT INTO table
SELECT *
FROM OPENROWSET(
'MSDASQL',
'Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};DBQ=shara',
'SELECT * FROM table2');
Т.е. что бы члены группы имели доступ только table, могли выполнять команду OPENROWSET - не больше и не меньше.
Не подскажете как дать права правильно или где почитать?
Заранее спасибо за Ваши ответы.
Ответ
Может быть вам подойдёт такой вариант. Заворачиваем команду в хранимую процедуру:
create procedure [dbo].[ImportProc]
with execute as 'UserName' -- тот у кого есть права на table и OPENROWSET
as
begin
set nocount on;
INSERT INTO [table]
SELECT *
FROM OPENROWSET(...);
end
далее создать роль, дать ей права на выполнение процедуры и добавить нужных пользователей в роль:
USE [DBName]
GO
CREATE ROLE [data_import]
GO
GRANT EXECUTE ON [dbo].[ImportProc] TO [data_import]
GO
ALTER ROLE [data_import] ADD MEMBER [DataImporterUserName]
GO
Если нет, то для использования OPENROWSET нужно давать разрешение уровня сервера ADMINISTER BULK OPERATIONS соответствующему логину:
USE [master]
GO
GRANT ADMINISTER BULK OPERATIONS TO [LoginName]
GO
Плюс в базе нужно отдельно разрешить вставку в таблицу:
USE [DBName]
GO
GRANT INSERT ON [dbo].[table] TO [RoleName]
GO
Комментариев нет:
Отправить комментарий