powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как избежать ownership chaining для XП?
5 сообщений из 5, страница 1 из 1
Как избежать ownership chaining для XП?
    #39947355
WinterGraveyard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация: надо написать ХП, у которой будет grant execute public, но при этом требуется, чтобы если у вызывающего пользователя нет прав на какой-либо объект внутри ХП, вылетала ошибка. Все объекты внутри ХП находятся в схеме dbo, и права по ним назначаются по совсем другим регламентам, а процедура для вызова должна быть доступна всем. Насколько я понимаю механизм ownership chaining, для требуемого достаточно создать процедуру в схеме, отличной от dbo?
...
Рейтинг: 0 / 0
Как избежать ownership chaining для XП?
    #39947356
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinterGraveyard
Насколько я понимаю механизм ownership chaining, для требуемого достаточно создать процедуру в схеме, отличной от dbo?
Не совсем.
В схеме, у которой владелец не dbo.
...
Рейтинг: 0 / 0
Как избежать ownership chaining для XП?
    #39947415
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create proc ... with execute as caller
...
Рейтинг: 0 / 0
Как избежать ownership chaining для XП?
    #39947850
WinterGraveyard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как избежать ownership chaining для XП?
    #39947893
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как избежать ownership chaining для XП?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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