powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DENY & stored procedure
10 сообщений из 10, страница 1 из 1
DENY & stored procedure
    #32057958
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут обнаружил сообщение в 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
DENY & stored procedure
    #32057960
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я наверное не прав буду, если скажу что процедура отработала в соответствии с правами своего создателя dbo
...
Рейтинг: 0 / 0
DENY & stored procedure
    #32057964
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это понятно, речь о том, что <some user>'у явно запрещен SELECT из таблицы...
...
Рейтинг: 0 / 0
DENY & stored procedure
    #32057970
Фотография Гнездин Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает совершенно правильно. У пользователя есть права на процедуру direct. Текст запроса не может быть им призвольно изменен. Соотв. подразумевается, что разработчик отвечает за то, что пользователь не увидит ничего "лишнего". Это в точности соответствует концепции назначения прав доступа через View (когда запрещен select из таблицы, но у польз. есть доступ к View, который "отсекает" некоторые строки или столбцы). Совсем другое дело, когда в процедуре есть динамически строящийся запрос (выполняемый через EXEC). В этом случае злонамеренный юзер может изменить текст запроса через параметры процедуры (потенциально... для каждого конкретного случая SQL не будет пытаться проверять), поэтому права проверяются на этапе выполнения процедуры. Как следствие, для динамических запросов всегда приходится давать права на SELECT из таблицы...
...
Рейтинг: 0 / 0
DENY & stored procedure
    #32057974
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
<some user>'у явно запрещен SELECT из таблицы...

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

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

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

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


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