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

Откуда:
Сообщений: 63
Ситуация есть база (MSSQL 2008) В ней есть группа Billusers с правами на запуск хранимок. и у одного пользователя хранимка валится потому что отсутствуют права доступа на таблицу в запросе. Причем он такой один входит в общую со всеми группу.
Никаких отдельных запретов на таблице нет.
Я считал если есть права на execute хранимки то к селекту в ее запросах доступ идет автоматом.
Куда копать в данной ситуации?
11 мар 16, 09:06    [18918316]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
В ней есть группа Billusers

Вы имете ввиду роль ?

maldalik
Я считал если есть права на execute хранимки то к селекту в ее запросах доступ идет автоматом.

Вы неправильно считали. Права на запуск - это права на выполнение exec, а не права на выполнение любой команды внутри процедуры. Просто существуют механизмы, которые осуществляют прозрачную проверку прав.
Например, цепочки владения объектов


maldalik
Куда копать в данной ситуации?

В текст процедуры и кумулятивные права пользователя
11 мар 16, 09:10    [18918326]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
maldalik
В ней есть группа Billusers

Вы имете ввиду роль ?

Да,роль.

maldalik
Я считал если есть права на execute хранимки то к селекту в ее запросах доступ идет автоматом.

Вы неправильно считали. Права на запуск - это права на выполнение exec, а не права на выполнение любой команды внутри процедуры. Просто существуют механизмы, которые осуществляют прозрачную проверку прав.
Например, цепочки владения объектов

Странно но у остальных то пользователей этой роли все работает?
А можно поинтересоваться как проверить права? SqlStudio никакого криминал не показывает.

maldalik
Куда копать в данной ситуации?

В текст процедуры и кумулятивные права пользователя
11 мар 16, 09:28    [18918386]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ищите, чем этот пользователь отличается от других.
А не чем он похож на других.
11 мар 16, 09:42    [18918437]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
maldalik
Member

Откуда:
Сообщений: 63
если процедуры поддерживают все бизнес функции, которые нужны для выполнения пользователю, пользователь никогда не нуждается в прямом доступе к таблицам. Все можно делать через процедуры, которые могут выступать дополнительным гарантом целостности данных и безопасности базы данных;
предоставляет механизм защиты. Пользователи могут получать право выполнять процедуры, даже если у них нет права на использование вьюшки или таблицы, на которую ссылается процедура;
Использование хранимых процедур позволяет ограничить или вообще исключить непосредственный доступ пользователей к таблицам базы данных, оставив пользователям только разрешения на выполнение хранимых процедур, обеспечивающих косвенный и строго регламентированный доступ к данным. Кроме того, некоторые СУБД поддерживают шифрование текста (wrapping) хранимой процедуры.

Это встречается на каждом шагу в описании(последняя цитата из вики). Что подразумевает что отдельно давать доступ к таблицам не требуется,
11 мар 16, 09:44    [18918448]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
Ищите, чем этот пользователь отличается от других.
А не чем он похож на других.

А как искать то? Я его даже пересоздал стандартным скриптом.
Не изменилось ничего
11 мар 16, 09:45    [18918456]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
maldalik
Member

Откуда:
Сообщений: 63
Вот текст хранимки, причем что инетерсно динамический SQL на права не ругается, там все на ура исполняется.
Опять на же прав ему ен хватает не на все таблицы а только на последние 2:mda_SubscribercontactInfo ,
mda_contactinfoTypes которые создавались недавно.

[SRC sql]USE [bill]
GO
/****** Object:  StoredProcedure [dbo].[hag_inform_by_contrnumber_PR3]    Script Date: 03/11/2016 11:23:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER             procedure [dbo].[hag_inform_by_contrnumber_PR3]
   @StartDate datetime
   ,@EndDate datetime
   ,@Group_str varchar(3000) = null

as
begin
declare @SQLstr varchar(3500)

set nocount on

	if @Group_str is null
	  begin
		select 
			s.id as cl_id,
			s.name as Name, 
			s.contrnumber as numdog,
			li.legaladdress as ur_Adress,
			li.fizaddress as fiz_Address,
			s.islegal,
			cg.GroupName as GroupName,
			s.ContrDate as ContrDate,
			li.Phone as telefon,
			s.router,
			s.router_set,
			s.sms_send,
			li.ServiceAddress
			,li.JurAddress
			,mp.contactinfo
		from Subscriber s
			left join legalinfo li on li.subscriberid=s.id
			left join clientgroup cg on cg.id=s.ClientGroupID
			left join mda_SubscribercontactInfo mp on s.ID=mp.Subscriberid and mp.ActualFlag=1
		    left join mda_contactinfoTypes mpt on mp.contactInfotype=mpt.ID	
		where s.ContrDate between @StartDate and @EndDate
		order by s.ContrDate
	  end
	else
	  begin
		set @SQLstr=('select 
							s.id as cl_id,
							s.name as Name, 
							s.contrnumber as numdog,
							li.legaladdress as ur_Adress,
							li.fizaddress as fiz_Address,
							s.islegal,
							cg.GroupName as GroupName,
							s.ContrDate as ContrDate,
							li.Phone as telefon,
							s.router,
							s.router_set,
							s.sms_send,
							li.ServiceAddress
							,li.JurAddress
							,mp.contactinfo
						from Subscriber s
							left join legalinfo li on li.subscriberid=s.id
							left join clientgroup cg on cg.id=s.ClientGroupID
							left join mda_SubscribercontactInfo mp on s.ID=mp.Subscriberid and mp.ActualFlag=1
							left join mda_contactinfoTypes mpt on mp.contactInfotype=mpt.ID	
						where s.ContrDate between '''+cast(@StartDate as char)+''' and '''+cast(@EndDate as char)+''' 
						and cg.id in ('+@Group_str+') 
						order by s.ContrDate')

		if @SQLstr is not null or @SQLstr<>''
		  begin
			EXEC (@SQLstr)
			if @@error!=0
			 begin
			   select -9 as result
			 end
		  end
		else
			select -10 as result
	  end
	--select * from subscriber
end
[/SRC]
11 мар 16, 09:48    [18918469]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
Это встречается на каждом шагу в описании(последняя цитата из вики). Что подразумевает что отдельно давать доступ к таблицам не требуется,

Читайте лучше оригинальный хелп производителя продукта.
"не нужен прямой доступ к таблицам" не равно "права доступа не проверяются"
Права проверяются всегда.
11 мар 16, 09:49    [18918472]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
maldalik
Member

Откуда:
Сообщений: 63
Пардон наоборот на динамический SQL ругается.
11 мар 16, 09:50    [18918479]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
Вот текст хранимки, причем что инетерсно динамический SQL на права не ругается, там все на ура исполняется.

Динамический запрос всегда требует явных прав на объекты, используемые в этом запросе.

maldalik
Опять на же прав ему ен хватает не на все таблицы а только на последние 2:mda_SubscribercontactInfo ,
mda_contactinfoTypes которые создавались недавно.

Наверное потому, что на пердыдущие таблицы прав уже были выданы до вас
11 мар 16, 09:52    [18918485]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
maldalik
Это встречается на каждом шагу в описании(последняя цитата из вики). Что подразумевает что отдельно давать доступ к таблицам не требуется,

Читайте лучше оригинальный хелп производителя продукта.
"не нужен прямой доступ к таблицам" не равно "права доступа не проверяются"
Права проверяются всегда.


Я и не говорил чт оне проверяются я говорил, что хранимка по идее исполняется из под системы. И прав на ее запуск должно быть достаточно. К сожалению в MSDN не могу найти на эту тему. как то они молчат.
https://msdn.microsoft.com/ru-ru/library/ms189915(v=sql.120).aspx
11 мар 16, 10:01    [18918543]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
Я и не говорил чт оне проверяются я говорил, что хранимка по идее исполняется из под системы

Хосподи, откуда вы это взяли ?
Из под какой системы. Процедура выполняется под текущим логином/пользователем(если вы специально не задали другой логин/пользователя). И все права проверяются для текущего логина пользователя.
11 мар 16, 10:08    [18918574]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
maldalik
Что подразумевает что отдельно давать доступ к таблицам не требуется,

Не совсем верно.
Есть явно прописанный доступ, а есть через, упомянутую Glory, цепочку наследования.
Вы почитайте, разберитесь как она работает. Не очень все сложно.
Думаю, что большая часть вопросов отпадет сама собой.
11 мар 16, 10:36    [18918710]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
o-o
Guest
SQL2008
maldalik
Что подразумевает что отдельно давать доступ к таблицам не требуется,

Не совсем верно.
Есть явно прописанный доступ, а есть через, упомянутую Glory, цепочку наследования.

любая динамика это отсутствие наследования напрочь.
потому что никакого овнера у нее(динамики) нет.
так что вариантов 3:
1) выдача явных прав на все объекты, участвующие в динамике
2) execute as clause
3) сертификат
11 мар 16, 12:24    [18919231]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
зачем там вообще нужен такой динамический SQL и явно там ерунда дальше на проверку @@error
пусть лучше ТС продумает правильную логику сего действа и перепишет нормально
11 мар 16, 13:00    [18919436]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
o-o
Guest
Konst_One
зачем там вообще нужен такой динамический SQL

вы не понимаете толк в извращениях.
у нас один <censored> написал целую кучу особо универсальных процедур.
абсолютно полностью динамических.
там вообще нет ни одного места, где динамика нужна.
но вместо того, чтобы написать 1 процедуру и сложить ее в пару баз,
он сделал супер-пупер универсальность.
процедура принимает один параметр -- имя базы,
а дальше присобачивает его перед именем каждой таблицы.

К сообщению приложен файл. Размер - 109Kb
11 мар 16, 13:18    [18919535]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
o-o,
да, весело у вас.
11 мар 16, 13:51    [18919780]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с правами  [new]
o-o
Guest
да достали.
потом я зверею и начинаю на форуме обзываться.
а етот гад жив и продолжает плодить уродские процедуры.
в результате получают совсем не те, кто в явном виде заслужил
11 мар 16, 14:00    [18919835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить