powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Microsoft SQL Server
12 сообщений из 12, страница 1 из 1
Microsoft SQL Server
    #32017783
Slyer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые! Есть проблема.
Согласно документации Microsoft, если на VIEW дать разрешения на INSERT, UPDATE и DELETE, то на саму таблицу на которой построен VIEW разрешения можно не давать. Данное утверждение правильно, если делать это через Query Analyzer или через ODBC каким-нибудь клиентом. Но это не срабатывает, если это делать из MS Access (.ADP) или, хотя бы, из SQL Server Enterprise Mansger. При этом возникает ошибка, где говорится, что не даны права на саму таблицу.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017829
Василий+Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то в документации говорят, что юзер должен иметь права и на базовые таблицы представления. А вот при использовании sp_ вовсе и не обязательно.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017850
Все просто. Дополнительно права на таблицу потребуются, если владельцы у таблицы и представления (процедуры) разные. Если владелец один и тот же, то на таблицу права давать не нужно, и действует вышеуказанное правило из документации.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017856
Slyer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все это верно, но при использовании динамического SQL и дальнейшего его вызова, типа exec('sql выражение') все равно требется права на таблицу. Допустим я как dbo создал таблицу Т1, затем создал VW1 на основе Т1. Даю все права на VW1 и никаких прав на Т1. Затем я делаю комманду типа exec('update VW1 set поле1=1') и получаю сообщение, что нет прав на SELECT на Т1. Это происходит только при подключении через OLE DB. При подключении через ODBC такие вещи проходят и работают.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017857
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exec ВСЕГДА выполняется с правами пользователя, его запустившего, а не владельца процедуры.

"When a stored procedure is run that executes a string, permissions are checked in the context of the user who executes the procedure, not in the context of the user who created the procedure . However, if a user owns two stored procedures in which the first procedure calls the second, then EXECUTE permission checking is not performed for the second stored procedure."
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017859
Slyer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>exec ВСЕГДА выполняется с правами пользователя, его запустившего, а не владельца процедуры.

Нет!!!! Есть исключение - это динамический SQL, ну еще есть команды и системные процедуры, которые могут исполнять только разные администраторы, например SQL-команда SETUSER. Если не верите, то сами попробуйте. Создайте таблицу, заполните ее некоторыми данными, затем создайте процедуру где будет команда exec('select * from таблица') и получите результат!!!!
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017863
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2000 SP1, MDAC 2.6 SP1, ODBC

Если пользователь НЕ ИМЕЕТ прав на таблицу dbo.table1 и пытается выполнить разрешенную процедуру, созданную dbo, в которой есть exec('select * from table1'), то У МЕНЯ выдается сообщение

SELECT permission denied on object 'table1'
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017864
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати, для того чтобы выполнять команду SETUSER нужно быть членом sysadmin или db_owner. А это сродни богу, т.е. IMHO такой пользователь может обращаться к объектам базы как хочет(напрямую или через динамический запрос) - все равно он имеет на них права.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017865
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему мнению, проблема заключается в следующем:
Визуальные классы, используемые в EM и Access для отображения данных обращаются к указанному VIEW или процедуре.
При попытке изменить данные выполняется запрос на изменение, но в основной таблице(!), на которой построен VIEW.
Это можно хорошо увидеть Profiler-ом. И в случае просмотра, и в случае изменения, действуют те права, которые установлены на эти объекты, но объекты-то разные. Если же в QA явно написать UPDATE ViewX SET F1='1', то наличия прав на изменение в таблице не требуется, так-как SELECT и UPDATE применяется к одному объекту - VIEW, и только права на VIEW имеют значение.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017891
Slyer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что, нет ни у кого дельного совета? Можно долго рассуждать про права, пользователей, но, как говориться, воз и ныне там. Проблема-то возникла по следующей причине. Есть некая таблица на которой построен вид, который ограничивает набор записей. Есть форма у которой источником данных служит этот вид. Пользователь должен изменять данные в форме, вносить новые и т.д., но только в рамках данного вида. Вообще-то тривиальная задача, но при этом получается, что нужно давать разрешение на базовую таблицу, что является пробелом и очень серьезным пробелом в защите данных. Я пока данную проблему решаю по своему, но этот способ тоже имеет недостатки. Заключается он в том, чтобы сделать группу в которую входят пользователи и назначить группе права на SELECT на вид. Затем сделать Application Role, которая входит в стандартную роль тем самым AR дается права на select на вид. Дополнительно AR дается все права на базовую таблицу. Затем можно залогонится под AR используя sp_setapprole. Все!!! Самой таблицы в Access не видно, а виден только вид и с ним проходят операции delete,insert и update.

Но данный метод имеет недостатки. ЕСТЬ ЛИ У КОГО АЛЬТЕРНАТИВА???? Только, пожалуйста, не нужно предлагать перейти на другой язык и т.п. Есть много програмных наработок на Access и переходить на другую платформу равносильно пожару.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017900
Попробуй создать этот VIEW с опцией 'WITH VIEW_METADATA'. В этом случае шибко умные ADO-клиенты не будут апдейтить исходные таблицы, а будут пытаться адресовать запросы на обновление непосредственно вьюхе (если смогут, т.е. если вьюха - "живая"). Не забудь, правда, что для достижения транзитивных прав необходимо, чтобы у вьюхи и таблиц были одинаковые владельцы. Иначе все равно придется давать права на таблицы.
...
Рейтинг: 0 / 0
Microsoft SQL Server
    #32017936
Slyer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Попробуй создать этот VIEW с опцией 'WITH VIEW_METADATA'.

У меня MS SQL Server 7.0, там вроде-бы нет этой опции.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Microsoft SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]