Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DENY & stored procedure / 10 сообщений из 10, страница 1 из 1
14.10.2002, 14:03:21
    #32057958
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Тут обнаружил сообщение в microsoft.public.sqlserver.security:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
I have three objects with the same owner
 1  table and  2  SPs
both the SPs do a select * from the table -
one directly and another dynamically

I give exec permission to both SPs to an user and deny 
select on the table 

Now when the user executes the dynamic SP, the ownership 
chain seems to be broken . why is this so?
eg:

CREATE TABLE
OnlyNumbers
(
a int
)
go

insert into OnlyNumbers values ( 1 )
insert into OnlyNumbers values ( 2 )
insert into OnlyNumbers values ( 3 )
go

go
SELECT * from OnlyNumbers

go

CREATE PROC
direct
as
SELECT * from OnlyNumbers
go

CREATE PROC
dynamicProc
as
EXEC('SELECT * from OnlyNumbers')

go
GRANT EXECUTE 
ON direct
TO <some user>

go
GRANT EXECUTE 
ON dynamicProc
TO <some user>

go

DENY SELECT
ON OnlyNumbers
to <some user>

Thanks
Sarathy


Пользователь <some user> может успешно вызывать
direct...
Я всегда считал, что DENY имеет приоритет над GRANT.
А тут выходит, что нет... Или это баг?
...
Рейтинг: 0 / 0
14.10.2002, 14:06:41
    #32057960
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
я наверное не прав буду, если скажу что процедура отработала в соответствии с правами своего создателя dbo
...
Рейтинг: 0 / 0
14.10.2002, 14:08:12
    #32057964
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Это понятно, речь о том, что <some user>'у явно запрещен SELECT из таблицы...
...
Рейтинг: 0 / 0
14.10.2002, 14:17:27
    #32057970
Гнездин Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Все работает совершенно правильно. У пользователя есть права на процедуру direct. Текст запроса не может быть им призвольно изменен. Соотв. подразумевается, что разработчик отвечает за то, что пользователь не увидит ничего "лишнего". Это в точности соответствует концепции назначения прав доступа через View (когда запрещен select из таблицы, но у польз. есть доступ к View, который "отсекает" некоторые строки или столбцы). Совсем другое дело, когда в процедуре есть динамически строящийся запрос (выполняемый через EXEC). В этом случае злонамеренный юзер может изменить текст запроса через параметры процедуры (потенциально... для каждого конкретного случая SQL не будет пытаться проверять), поэтому права проверяются на этапе выполнения процедуры. Как следствие, для динамических запросов всегда приходится давать права на SELECT из таблицы...
...
Рейтинг: 0 / 0
14.10.2002, 14:19:12
    #32057974
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Код: plaintext
<some user>'у явно запрещен SELECT из таблицы...

но не запрещен для dbo
...
Рейтинг: 0 / 0
14.10.2002, 14:32:44
    #32057990
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Спасибо, все ясно, что к чему.

Ну а вот, к примеру, необходимо запретить <some user>'у выборки из таблицы OnlyNumbers - придется для каждой процедуры типа direct делать REVOKE/DENY EXECUTE?
...
Рейтинг: 0 / 0
14.10.2002, 14:36:37
    #32057992
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
ну да :)
...
Рейтинг: 0 / 0
14.10.2002, 14:39:48
    #32057994
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Мда... Мягко говоря, неудобно.
...
Рейтинг: 0 / 0
14.10.2002, 14:43:23
    #32057995
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
У нас для того, чтобы не "возиться" с каждым пользователем для процедуры создается пользовательская роль, котораю имеет только право EXEC на "свою" процедуру. Тогда вместо REVOKE/DENY можно просто добавлять/удалять пользователя из роли.
Ну а для более удобного менеджирования всего этого написан небольшой модуль.
...
Рейтинг: 0 / 0
14.10.2002, 16:37:18
    #32058060
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DENY & stored procedure
Ну, если неудобно, то используйте dynamic. :)

Или проверку в теле процедуры типа:
Код: plaintext
1.
IF PERMISSIONS(OBJECT_ID('OnlyNumbers')) &  1  <>  1 
RAISERROR(...)
Помоему удобно.

Но вообще лучше пермишины на таблицы не раздавать, а проверять принадежность к роли.
Код: plaintext
1.
IF IS_MEMBER('user') <>  1 
RAISERROR(...)
И распределять пользователей по ролям.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DENY & stored procedure / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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