Страницы

Поиск по вопросам

суббота, 1 июня 2019 г.

MSSQL. Создание группы с определенными правами

Необходимо дать права только на выполнение данной команды:
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

Комментариев нет:

Отправить комментарий