Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Microsoft SQL Server / 12 сообщений из 12, страница 1 из 1
26.11.2001, 09:15
    #32017783
Slyer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Microsoft SQL Server
Уважаемые! Есть проблема.
Согласно документации Microsoft, если на VIEW дать разрешения на INSERT, UPDATE и DELETE, то на саму таблицу на которой построен VIEW разрешения можно не давать. Данное утверждение правильно, если делать это через Query Analyzer или через ODBC каким-нибудь клиентом. Но это не срабатывает, если это делать из MS Access (.ADP) или, хотя бы, из SQL Server Enterprise Mansger. При этом возникает ошибка, где говорится, что не даны права на саму таблицу.
...
Рейтинг: 0 / 0
26.11.2001, 15:18
    #32017829
Василий+Ч.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Microsoft SQL Server
Вообще-то в документации говорят, что юзер должен иметь права и на базовые таблицы представления. А вот при использовании sp_ вовсе и не обязательно.
...
Рейтинг: 0 / 0
27.11.2001, 06:37
    #32017850
Microsoft SQL Server
Все просто. Дополнительно права на таблицу потребуются, если владельцы у таблицы и представления (процедуры) разные. Если владелец один и тот же, то на таблицу права давать не нужно, и действует вышеуказанное правило из документации.
...
Рейтинг: 0 / 0
27.11.2001, 07:37
    #32017856
Slyer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Microsoft SQL Server
Все это верно, но при использовании динамического SQL и дальнейшего его вызова, типа exec('sql выражение') все равно требется права на таблицу. Допустим я как dbo создал таблицу Т1, затем создал VW1 на основе Т1. Даю все права на VW1 и никаких прав на Т1. Затем я делаю комманду типа exec('update VW1 set поле1=1') и получаю сообщение, что нет прав на SELECT на Т1. Это происходит только при подключении через OLE DB. При подключении через ODBC такие вещи проходят и работают.
...
Рейтинг: 0 / 0
27.11.2001, 07:42
    #32017857
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Microsoft SQL Server
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
27.11.2001, 07:50
    #32017859
Slyer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Microsoft SQL Server
>>exec ВСЕГДА выполняется с правами пользователя, его запустившего, а не владельца процедуры.

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

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

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

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

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


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