Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как избежать ownership chaining для XП? / 5 сообщений из 5, страница 1 из 1
15.04.2020, 09:29
    #39947355
WinterGraveyard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать ownership chaining для XП?
Ситуация: надо написать ХП, у которой будет grant execute public, но при этом требуется, чтобы если у вызывающего пользователя нет прав на какой-либо объект внутри ХП, вылетала ошибка. Все объекты внутри ХП находятся в схеме dbo, и права по ним назначаются по совсем другим регламентам, а процедура для вызова должна быть доступна всем. Насколько я понимаю механизм ownership chaining, для требуемого достаточно создать процедуру в схеме, отличной от dbo?
...
Рейтинг: 0 / 0
15.04.2020, 09:32
    #39947356
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать ownership chaining для XП?
WinterGraveyard
Насколько я понимаю механизм ownership chaining, для требуемого достаточно создать процедуру в схеме, отличной от dbo?
Не совсем.
В схеме, у которой владелец не dbo.
...
Рейтинг: 0 / 0
15.04.2020, 11:41
    #39947415
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать ownership chaining для XП?
create proc ... with execute as caller
...
Рейтинг: 0 / 0
16.04.2020, 07:12
    #39947850
WinterGraveyard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать ownership chaining для XП?
invm, Гавриленко Сергей Алексеевич,

спасибо, со схемой, у которой владелец не dbo получилось так, как надо. А вот с execute as caller что-то не получается:
Код: sql
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.
59.
60.
61.
62.
63.
use test
go
create view dbo.testdata as
select 1 n;
go

create procedure guest.test as
begin
  begin try
    declare
      @n int;
    select @n=n from dbo.testdata;
    print formatmessage('%s.%s: ok', object_schema_name(@@procid), object_name(@@procid));
  end try
  begin catch
    print formatmessage(
      '%s.%s: error %d %s, severity %d, state %d',
      object_schema_name(@@procid),
      error_procedure(),
      error_number(),
      error_message(),
      error_severity(),
      error_state()
    );
  end catch;
end;
go
grant execute on guest.test to [public];
go

create procedure dbo.test
with execute as caller
as
begin
  begin try
    declare
      @n int;
    select @n=n from dbo.testdata;
    print formatmessage('%s.%s: ok', object_schema_name(@@procid), object_name(@@procid));
  end try
  begin catch
    print formatmessage(
      '%s.%s: error %d %s, severity %d, state %d',
      object_schema_name(@@procid),
      error_procedure(),
      error_number(),
      error_message(),
      error_severity(),
      error_state()
    );
  end catch;
end;
go
grant execute on dbo.test to [public];
go

create user [testuser] without login;
go

execute as user='testuser';
exec dbo.test;
exec guest.test;
revert;



Код: plaintext
1.
2.
dbo.test: ok
guest.test: error 229 The SELECT permission was denied on the object 'testdata', database 'test', schema 'dbo'., severity 14, state 5

- процедура dbo.test в контексте testuser отработала нормально, а требовалось, чтобы она выкинула ошибку, как guest.test.
Проверял на
Код: sql
1.
select @@version

Код: plaintext
1.
2.
3.
Microsoft SQL Server 2014 (SP2-CU12) (KB4130489) - 12.0.5589.7 (X64) 
	Jun  9 2018 11:17:15 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
...
Рейтинг: 0 / 0
16.04.2020, 09:39
    #39947893
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать ownership chaining для XП?
WinterGraveyard
А вот с execute as caller что-то не получается
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/execute-as-clause-transact-sql?view=sql-server-ver15 Если пользователь выполняет модуль, для которого определен запуск в контексте, отличном от CALLER, проверяются разрешения пользователя на выполнение модуля, а проверки разрешений на объекты, к которым модуль производит доступ, выполняются для учетной записи пользователя, указанной в предложении EXECUTE AS. Пользователь, выполняющий модуль, таким образом олицетворяет указанного пользователя.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как избежать ownership chaining для XП? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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