Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Permissions / select / stored procedure  [new]
DoctorM
Member

Откуда: Almaty
Сообщений: 11
Помогите пожалуйста
Есть такая задача....
Необходимо дать доступ к таблице так что бы пользователь через свой аккаунт не смог соединится из таких программ как SSMS и делать произвольный запрос SELECT, а имел только доступ по получению по критерии и обновлению через хранимую процедуру.
12 июн 13, 11:27    [14424092]     Ответить | Цитировать Сообщить модератору
 Re: Permissions  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
DoctorM
Помогите пожалуйста
Есть такая задача....
Необходимо дать доступ к таблице так что бы пользователь через свой аккаунт не смог соединится из таких программ как SSMS и делать произвольный запрос SELECT, а имел только доступ по получению по критерии и обновлению через хранимую процедуру.
Всё просто, дайте проава на хранимую процедуру и не давайте на таблицы. Естественно, создатель хранимой процедуры должен иметь права на объекты.
12 июн 13, 11:50    [14424164]     Ответить | Цитировать Сообщить модератору
 Re: Permissions / select / stored procedure  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
alexeyvg
создатель хранимой процедуры должен иметь права на объекты.
Создатель? Владелец.
Точнее схема. Но если схемы сходятся то проверок никаких не делается. И зависит от параметров запуска.

Придирчивый КО.
12 июн 13, 13:52    [14424523]     Ответить | Цитировать Сообщить модератору
 Re: Permissions / select / stored procedure  [new]
еще придирчивее
Guest
[quot Mnior]
alexeyvg
Но если схемы сходятся то проверок никаких не делается.

категорично.
внутри процы может быть динамика.
при всех совпадающих владельцах проверят
12 июн 13, 14:36    [14424639]     Ответить | Цитировать Сообщить модератору
 Re: Permissions / select / stored procedure  [new]
пардон
Guest
пардон, alexeyvg, это было адресовано to Mnior
12 июн 13, 14:38    [14424645]     Ответить | Цитировать Сообщить модератору
 Re: Permissions / select / stored procedure  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
еще придирчивее
внутри процы может быть динамика
Динамика не работает внутрях процедуры, она в другом скоупе.
Вы б ещё предложили считывать данные родных таблиц через линкед сервер.

И я же ещё писал:
Mnior
И зависит от параметров запуска
EXECUTE AS
12 июн 13, 15:17    [14424741]     Ответить | Цитировать Сообщить модератору
 Re: Permissions  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Mnior
Но если схемы сходятся то проверок никаких не делается
Не схемы, а владельцы.
Mnior
И зависит от параметров запуска
Цепочки владения проверяются вне зависимости от того, в контексте какой учетной записи выполняется модуль.
12 июн 13, 16:42    [14424921]     Ответить | Цитировать Сообщить модератору
 Re: Permissions / select / stored procedure  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm
Mnior
Но если схемы сходятся то проверок никаких не делается
Не схемы, а владельцы.
Т.е. если у схем совпадает AUTHORIZATION, то сервер тоже не включает проверку прав?
Т.е. если я дал право на MySchema1.MyView в которой есть табла MySchema2.MyTable, то не проверится право на таблу? (у обоих AUTHORIZATION dbo к примеру)
Блин, хорошо конечно, но мне казалось что права даются на объекты схемы, а не объекты владения.

invm
Цепочки владения проверяются вне зависимости от того, в контексте какой учетной записи выполняется модуль.
Э, что?
Т.е. EXECUTE AS OWNER и EXECUTE AS CALLER - одно и тоже?
Мене казалось что как раз AS OWNER означает что проверка закончилась на проверке доступа к процедуре (не будем рассматривать случаи обращение в ней к другой схеме).
А вот EXECUTE AS CALLER - означает что какие вы права не выставили на процедуру - фиолетово, нужны ещё права и на объекты, вызываемые в ней.

Или вы о другом? Просто как я знаю "Цепочки владения" проверяются только на границах перехода. А там где схемы сходятся - там никаких проверок не делается, даже если у вас есть права только на часть объектов.
Есть есть доступ только на вьюшки - то через них у вас есть доступ и на таблицы и на функции этой схемы.

Не?
12 июн 13, 18:06    [14425063]     Ответить | Цитировать Сообщить модератору
 Re: Permissions  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Mnior
Т.е. если у схем совпадает AUTHORIZATION, то сервер тоже не включает проверку прав?
Именно. Цепочки владения работают на основе владельцев. Если у объекта явно владелец не задан, значит им будет владелец схемы.

Mnior
Т.е. EXECUTE AS OWNER и EXECUTE AS CALLER - одно и тоже?
Конечно нет. Просто контекст безопасности - одно, а цепочки владения - другое. Наверное, проще на примере показать:
+ Пример
use tempdb;
go

create schema s1 authorization dbo;
go

create schema s2 authorization dbo;
go

create table s1.Table1 (i int);
go

create user userA without login;
create user userB without login;
grant impersonate on user::dbo to userA;
grant control on schema::s2 to userA;
go

grant create procedure on database::tempdb to userA;
go

/*Убиваем цепочку владения, начинает работать контекст безопасности*/
alter authorization on object::s1.Table1 to userA;
go

execute as user = 'userA';
go
create procedure s2.Proc1
as
begin
 set nocount on;
 select 'caller', current_user, count(*) from s1.Table1;
end;
go
revert;
go

grant execute on s2.Proc1 to userB;
go

/*caller*/
execute as user = 'userB';
go
exec s2.Proc1;
go
revert;
go

/*owner*/
execute as user = 'userA';
go
alter procedure s2.Proc1
with execute as owner
as
begin
 set nocount on;
 select 'owner', current_user, count(*) from s1.Table1;
end;
go
revert;
go

execute as user = 'userB';
go
exec s2.Proc1;
go
revert;
go

/*self*/
execute as user = 'userA';
go
alter procedure s2.Proc1
with execute as self
as
begin
 set nocount on;
 select 'self', current_user, count(*) from s1.Table1;
end;
go
revert;
go

execute as user = 'userB';
go
exec s2.Proc1;
go
revert;
go

drop procedure s2.Proc1;
drop table s1.Table1;

drop user userB;
drop user userA;

drop schema s1;
drop schema s2;
go
12 июн 13, 18:31    [14425102]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить