Страница 1 из 1

Вопрос по правам доступа

Добавлено: 21 сен 2006, 18:55
Quasar
Собственно вопроса 2. Оба по книге Х. Борри
1. На стр 746 в примечании научного редактора сказано:
...если выдан GRANT на UPDATE к столбцам явно, то успешно может быть выполнен только UPDATE всей таблицы, без указания ограничения WHERE. Таким образом, выдача GRANT на UPDATE к конкретным столбцам является совершенно бесполезной.
И тем не менее, у меня это работает, я делаю UPDATE с указанием в WHERE значения первичного ключа, и значение стобца данной записи меняется. Может я что-то не так понял? Использую FIBDataSet.

2. На стр. 747 сказано:
Когда для триггера, хранимой процедуры или просмотра нужен доступ к таблице или просмотру, достаточно, чтобы владелец объекта, к которому требуется доступ, сам объект или пользователь, использующий триггер, процедуру или просмотр, имел необходимые полномочия.
Следует ли из этого, что если таблица и процедура, которая к ней обращается, имеют одного владельца, то любой пользователь имеющий право EXECUTE на данную процедуру имеет возможность ее выполнить, даже если ни пользователь ни процедура не обладают правами на таблицу?

Добавлено: 21 сен 2006, 20:32
kdv
таблица и процедура, которая к ней обращается, имеют одного пользователя,
???

пользователю дают право на execute процедуры, процедуре дают право на доступ к другим объектам. Если у пользователя нет прав на execute, то... у него нет на это прав.
возможно, имеет смысл почитать www.ibase.ru/devinfo/sqlroles.htm , если есть сложности с пониманием языка Хелен (австралийский английский...).

Re: Вопрос по правам доступа

Добавлено: 21 сен 2006, 20:53
Merlin
Quasar писал(а): 1. На стр 746 в примечании научного редактора сказано:
...если выдан GRANT на UPDATE к столбцам явно, то успешно может быть выполнен только UPDATE всей таблицы, без указания ограничения WHERE. Таким образом, выдача GRANT на UPDATE к конкретным столбцам является совершенно бесполезной.
И тем не менее, у меня это работает, я делаю UPDATE с указанием в WHERE значения первичного ключа, и значение стобца данной записи меняется. Может я что-то не так понял? Использую FIBDataSet.
Ты давал гранты именно на апдейт отдельных полей в таблице, а не просто на апдейт таблицы? И грант на селект не давал? Тогда не верю что работает. Хотя... в FB2 не смотрел, может что и поправили.
Quasar писал(а): 2. На стр. 747 сказано:
Когда для триггера, хранимой процедуры или просмотра нужен доступ к таблице или просмотру, достаточно, чтобы владелец объекта, к которому требуется доступ, сам объект или пользователь, использующий триггер, процедуру или просмотр, имел необходимые полномочия.
Следует ли из этого, что если таблица и процедура, которая к ней обращается, имеют одного пользователя, то любой пользователь имеющий право EXECUTE на данную процедуру имеет возможность ее выполнить, даже если ни пользователь ни процедура не обладают правами на таблицу?
Сказано, конечно, мудрёно, однако вывод сделан совсем сногсшибательный :) А может изложен в стиле, перед которым меркнет даже оригинал :) Попыталсо представить позу, в которой таблица и процедура имеют несчастного пользователя :-D

Тут речь вот о чём. Когда выполянется, скажем, простой селект по таблице из приложения, то права должен иметь пользователь или роль, которая ему грантована и с которой он подключился к базе. Если этот же селект выполняется через какой-то объект в базе (например, он выполняется в вызываемой пользователем процедуре или в триггере, сработавшем при модификации пользователем какой-то другой таблицы) то право должен иметь либо опять же пользователь/роль, либо этот объект (процедура, триггер), а пользователю достаточно иметь право только на этот объект. Либо и пользователь и объект должны иметь это право, ну это естественно, OR он и в Африке OR. Создатель (владелец) любого объекта (процедуры, таблицы, триггера, вья...) имеет на него все права автоматически, сам себе он грантовать ничего не должен. Хотя эти права хранятся в системных таблицах так же, как будто ему их кто-то грантовал, они просто пишутся туда автоматицки при создании объекта.

Прояснил или ещё больше запутал? :)

Добавлено: 22 сен 2006, 05:51
Quasar
kdv писал(а): ???
Сорри, оговорился в том месте должно было стоять "имеют одного владельца". :) Поправил.

Re: Вопрос по правам доступа

Добавлено: 22 сен 2006, 05:55
Quasar
Merlin писал(а):
Ты давал гранты именно на апдейт отдельных полей в таблице, а не просто на апдейт таблицы? И грант на селект не давал? Тогда не верю что работает. Хотя... в FB2 не смотрел, может что и поправили.
Грант на селект давал. У того пользователя, который выполнял это действие был грант на селект таблицы и грант на апдейт одного столбца. FB1.5.2.

Re: Вопрос по правам доступа

Добавлено: 22 сен 2006, 06:04
Quasar
Merlin писал(а): Сказано, конечно, мудрёно, однако вывод сделан совсем сногсшибательный :) А может изложен в стиле, перед которым меркнет даже оригинал :) Попыталсо представить позу, в которой таблица и процедура имеют несчастного пользователя :-D
:D Да, неплохо я сказанул...
Merlin писал(а): Тут речь вот о чём. Когда выполянется, скажем, простой селект по таблице из приложения, то права должен иметь пользователь или роль, которая ему грантована и с которой он подключился к базе. Если этот же селект выполняется через какой-то объект в базе (например, он выполняется в вызываемой пользователем процедуре или в триггере, сработавшем при модификации пользователем какой-то другой таблицы) то право должен иметь либо опять же пользователь/роль, либо этот объект (процедура, триггер), а пользователю достаточно иметь право только на этот объект. Либо и пользователь и объект должны иметь это право, ну это естественно, OR он и в Африке OR. Создатель (владелец) любого объекта (процедуры, таблицы, триггера, вья...) имеет на него все права автоматически, сам себе он грантовать ничего не должен. Хотя эти права хранятся в системных таблицах так же, как будто ему их кто-то грантовал, они просто пишутся туда автоматицки при создании объекта.

Прояснил или ещё больше запутал? :)
Понятно, но всё же... Задам вопрос конкретнее, есть таблица и процедура, которая эту таблицу пользует. Они име... У них один владелец. Никаких грантов на таблицу процедуре не дано. Может ли пользователь (не владелец), имеющий EXECUTE на процедуру, выполнить ее? Из слов Х.Борри следует что может. Но в реале у меня не получается... (по логике тоже не должно получаться)
Думаю дело в запутанности перевода книги. Сейчас 2-й вопрос для меня вроде бы полностью прояснился. Объяснили кратко и ясно, спасибо... Остался первый вопрос.

Re: Вопрос по правам доступа

Добавлено: 22 сен 2006, 13:29
Merlin
Quasar писал(а): Понятно, но всё же... Задам вопрос конкретнее, есть таблица и процедура, которая эту таблицу пользует. Они име... У них один владелец. Никаких грантов на таблицу процедуре не дано. Может ли пользователь (не владелец), имеющий EXECUTE на процедуру, выполнить ее? Из слов Х.Борри следует что может. Но в реале у меня не получается... (по логике тоже не должно получаться)
Практика - критерий истины. Особенно когда она соответствует логике. Вот когда не соответствует, надо разбираться - логика хромает или практика делает не то, что следует по логике. Процедура является владельцем таблицы? Нет. Владелец - это всегда пользователь. Так что владелец в контексте этой фразы вообще ни в борозду ни в Красную Армию, разве что если перефразировать так - на объект либо должен иметь право обращающийся объект, на который, в свою очередь, имеет право пользователь, либо непосредственно пользователь должен иметь право на оба объекта, либо пользователь должен являться владельцем этих объектов. Пожалуй, гляну дома в оригинал, что там на самом деле написано у самой Елены, даже интересно стало.
Quasar писал(а): Думаю дело в запутанности перевода книги.
Скорее всего переводчик "поплыл" в сложносплетениях логики и австралоаглицкой грамматики, а технический редактор автоматически истолковал при чтении правильно, ибо хорошо знакомо.
Quasar писал(а): Сейчас 2-й вопрос для меня вроде бы полностью прояснился. Объяснили кратко и ясно, спасибо... Остался первый вопрос.
С первым вопросом всё просто. Для того, чтобы в апдейте отработало where, у обращающегося должно быть право не только на апдейт, но и на селект - а как иначе он может выбрать записи, отвечающие этому where, кроме как читаючи? Без where - пожалуйста. И столбцы, не столбцы, тут никакой разницы нет.