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

Откуда: Оттуда
Сообщений: 433
Есть таблица t1:
Колонки А | Б | C

Есть простая Функция Func1 (@Param1 int) получающая данные из этой таблицы в ней один простой запрос вида:

SELECT A,Б FROM t1 WHERE C=@Param1

Как правильно настроить права чтобы пользователь не мог читать таблицу напрямую а только посредством данной функции

И есть аналогичная процедура
т.е. надо сделать настроить права, чтобы пользователь мог менять данные в таблице только посредством процедуры
5 окт 17, 10:45    [20844480]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
просто не давать никаких прав, кроме как на функцию и процедуру
5 окт 17, 10:51    [20844492]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o,

Так и сделал. Забрал все права с таблицы используемой в функции. и получил следующее:

The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.
5 окт 17, 11:27    [20844657]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
Lamazoid
o-o,

Так и сделал. Забрал все права с таблицы используемой в функции. и получил следующее:

The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.


Хотелось бы , чтобы SELECt t1.A from Tbl1 доступно было,
А GetOrgFromBase которое по сути и есть SELECt t1.A from Tbl1 (просто с некоторыми проверками и ограничениями) срабатывало
5 окт 17, 11:31    [20844681]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
у функции схема тоже dbo?
и ни в какую другую базу не лезет?
5 окт 17, 11:32    [20844685]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
Ошибся в пред сообщении конечно же SELEC t1.a FROM TBL1 t1 - не Должно быть доступно
5 окт 17, 11:33    [20844693]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
у функции схема тоже dbo?
и ни в какую другую базу не лезет?

Да. База простенькая . 2 таблицы 2 функции и 2 процедуры. Никаких сторонних баз, схем и.т.п
5 окт 17, 11:34    [20844700]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
еще раз, все объекты, используемые в функции,
в той же схеме находятся, что и функция?
есть ли объекты другой базы?
5 окт 17, 11:34    [20844701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
тогда овнера кто-то поменял ручками.
ищем, что пишут об овнере функции и об овнере этого вот GetOrgFromBase.
т.е. покажите результат запроса для функции и для GetOrgFromBase
select name, principal_id, schema_id
from sys.objects
where name = 'GetOrgFromBase'
5 окт 17, 11:38    [20844730]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
тогда овнера кто-то поменял ручками.
ищем, что пишут об овнере функции и об овнере этого вот GetOrgFromBase.
т.е. покажите результат запроса для функции и для GetOrgFromBase
select name, principal_id, schema_id
from sys.objects
where name = 'GetOrgFromBase'


Возвращает 0 записей
5 окт 17, 11:45    [20844769]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
ну значит все же не в той базе смотрите (надо в базе Posrednik).
это же ваше имя из вашей же ошибки:
автор
The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.
5 окт 17, 11:54    [20844830]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
ну значит все же не в той базе смотрите (надо в базе Posrednik).
это же ваше имя из вашей же ошибки:
автор
The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.

Смотрю именно в той базе.
5 окт 17, 11:58    [20844854]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
почему бы вообще не называть все свои функции и таблицы их собственными именами?
себя и окружающих запутываете.
"у меня таблица1, а ошибку получаю о GetOrgFromBase".
и что мне надо думать, что таблица1 и есть GetOrgFromBase?
или что таблица1 это вью или функция, и там внутри еще какое-то GetOrgFromBase?
5 окт 17, 11:59    [20844857]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
Lamazoid
o-o
ну значит все же не в той базе смотрите (надо в базе Posrednik).
это же ваше имя из вашей же ошибки:
пропущено...

Смотрю именно в той базе.

Простите.. Смотрел из под ограниченного пользователя.
Из под админа: вот

GetOrgFromBase NULL 1
5 окт 17, 12:00    [20844864]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
Lamazoid
o-o
ну значит все же не в той базе смотрите (надо в базе Posrednik).
это же ваше имя из вашей же ошибки:
пропущено...

Смотрю именно в той базе.

т.е. объекта такого нет, но ошибка о нем есть?
а вы вообще кто, ob_owner в базe или бесправный юзер?
а то нормально не видеть то, на что у тебя прав нет
5 окт 17, 12:07    [20844898]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
Lamazoid
пропущено...

Смотрю именно в той базе.

т.е. объекта такого нет, но ошибка о нем есть?
а вы вообще кто, ob_owner в базe или бесправный юзер?
а то нормально не видеть то, на что у тебя прав нет

В последним сообщении отписался. Под бесправным юзером -
как раз ничего не видно
а под админом

GetOrgFromBase NULL 1
5 окт 17, 12:10    [20844917]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
Lamazoid
Из под админа: вот
GetOrgFromBase NULL 1

ну а где для функции-то?
имя функции вы не написали, подставьте уже его сами в код,
я ж понятия не имею, как функция называется
5 окт 17, 12:14    [20844934]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
Lamazoid
В последним сообщении отписался. Под бесправным юзером -

я типа на работе.
читаю этот топик, набираю ответ, меня дергают,
возвращаюсь, дописываю ответ, отправляю сообщение.
ну и так получается, что вы уже ответили, а я еще об этом не знаю
5 окт 17, 12:16    [20844939]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
Lamazoid
Из под админа: вот
GetOrgFromBase NULL 1

ну а где для функции-то?
имя функции вы не написали, подставьте уже его сами в код,
я ж понятия не имею, как функция называется

Вот код запускаемый из -под пользователя:

set @UID ='c5490a38-5f25-409a-8ad2-3175c63eef76'

select t1.* from dbo.GetOrgFromBase (@UID,'852456', 3) t1

Вот Функция:
ALTER FUNCTION [dbo].[GetOrgFromBase]
(
@UserId [uniqueidentifier], @UserPassword varchar(10), @OrgCode int =0
)
RETURNS TABLE
AS
RETURN
(

select OrgCode, OrgName,LSMask FROM dbo.Organisations t1
Where t1.OrgCode=Case when @OrgCode<>0 then @OrgCode Else t1.OrgCode End And (dbo.CheckUserAccess (@UserId,@UserPassword)=1)
)


Функция используемая в предыдущем селекте:
ALTER FUNCTION [dbo].[CheckUserAccess]
(
@UserID [uniqueidentifier], @UserPassword varchar(10)
)
RETURNS Bit
AS
BEGIN
declare @Pwd as varbinary (128)
select @Pwd=t1.UserPassword FROm dbo.ProgrammUsers t1 WHERE UserID=@UserID
RETURN pwdcompare (@UserPassword ,@Pwd)
END

Не отрабатывает ни одна функция.
5 окт 17, 12:21    [20844959]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
o-o
Lamazoid
Из под админа: вот
GetOrgFromBase NULL 1

ну а где для функции-то?
имя функции вы не написали, подставьте уже его сами в код,
я ж понятия не имею, как функция называется

щас выяснится, что и для функции то же самое.
и тогда я снова спрошу:
какие объекты у вас в функции?
таблица1 ето и есть GetOrgFromBase,
или нет?
потому что раз цепочка владения нарушается, то надо искать, где.
и если это GetOrgFromBase внутри какого-то вью,
то и для вью надо проверить схему и овнера.

короче, мне нужны все объекты, участвующие в вашей функции,
со всеми промежуточными вью/функциями,
со своими овнерами и схемами.
т.е. плиз, в одном месте соберите всех и напишите в виде
name, principal_id, schema_id.

ищем, у кого не dbo
5 окт 17, 12:22    [20844960]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
вот для этих вот всех мне и надо овнеров:

[dbo].[GetOrgFromBase]
[dbo].[CheckUserAccess]
dbo.Organisations
dbo.ProgrammUsers

select name, principal_id, schema_id
from sys.objects
where object_id in (select object_id('dbo.GetOrgFromBase') 
          union all select object_id('[dbo].[CheckUserAccess]')
          union all select object_id('dbo.Organisations')
          union all select object_id('dbo.ProgrammUsers')
		  )
5 окт 17, 12:29    [20844994]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
o-o
пропущено...

ну а где для функции-то?
имя функции вы не написали, подставьте уже его сами в код,
я ж понятия не имею, как функция называется

щас выяснится, что и для функции то же самое.
и тогда я снова спрошу:
какие объекты у вас в функции?
таблица1 ето и есть GetOrgFromBase,
или нет?
потому что раз цепочка владения нарушается, то надо искать, где.
и если это GetOrgFromBase внутри какого-то вью,
то и для вью надо проверить схему и овнера.

короче, мне нужны все объекты, участвующие в вашей функции,
со всеми промежуточными вью/функциями,
со своими овнерами и схемами.
т.е. плиз, в одном месте соберите всех и напишите в виде
name, principal_id, schema_id.

ищем, у кого не dbo

Результат выполнения запроса:
select name, principal_id, schema_id
from sys.objects
where name In ( 'Organisations','ProgrammUsers','GetOrgFromBase','CheckUserAccess')


name principal_id schema_id
Organisations NULL 1
GetOrgFromBase NULL 1
CheckUserAccess NULL 1
ProgrammUsers NULL 1

Где ProgrammUsers :


USE [Posrednik]
GO
/****** Object:  Table [dbo].[ProgrammUsers]    Script Date: 10/05/2017 14:31:28 ******/

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ProgrammUsers](
	[UserID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_ProgramUsers_UserID]  DEFAULT (newid()),
	[UserPhone] [varchar](12) NOT NULL,
	[UserPassword] [varbinary](128) NOT NULL,
	[UserMessage] [varchar](300) NULL,
	[IsActiv] [bit] NOT NULL CONSTRAINT [DF_ProgramUsers_IsActiv]  DEFAULT ((0)),
 CONSTRAINT [PK_ProgramUsers] PRIMARY KEY CLUSTERED 
(
	[UserID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF


Organisation:
USE [Posrednik]
GO
/****** Object:  Table [dbo].[Organisations]    Script Date: 10/05/2017 14:32:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Organisations](
	[OrgCode] [int] IDENTITY(1,1) NOT NULL,
	[OrgName] [varchar](250) NOT NULL,
	[LSMask] [varchar](20) NULL,
 CONSTRAINT [PK_Organisations] PRIMARY KEY CLUSTERED 
(
	[OrgCode] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF


а функции я раскрыл постом выше
5 окт 17, 12:34    [20845018]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
подождите,
так у вас ошибка, что нет селекта на саму функцию, а не на то, что внутри!!!
автор
The SELECT permission was denied on the object 'GetOrgFromBase'

select t1.* from dbo.GetOrgFromBase (@UID,'852456', 3) t1
ALTER FUNCTION [dbo].[GetOrgFromBase]


так надо же на саму функцию дать селект, это на внутренние таблицы не надо.
у вас же ошибка про саму функцию, а не про ее внутренние объекты
5 окт 17, 12:36    [20845030]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
Lamazoid

Так и сделал. Забрал все права с таблицы используемой в функции. и получил следующее:

The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.

нет!
забрал права с самой функции
5 окт 17, 12:37    [20845046]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1602
o-o
Lamazoid
Так и сделал. Забрал все права с таблицы используемой в функции. и получил следующее:

The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.

нет!
забрал права с самой функции


обломал кайф
5 окт 17, 12:55    [20845125]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o
Lamazoid
Так и сделал. Забрал все права с таблицы используемой в функции. и получил следующее:

The SELECT permission was denied on the object 'GetOrgFromBase', database 'Posrednik', schema 'dbo'.

нет!
забрал права с самой функции


Функция [CheckUserAccess] Заработала.

А функция GetOrgFromBase нет. Причем в Permissions В Колонке Grant галка стоит SELECT. Остальные галки в Колонке Deny. А Если посмотреть Эффективные разрешения (Effectib Permissoins) - то там пусто. Куда можно рыть. Где найти того кто блокирует SELECT
У самого пользователя "умолчальная" роль db_datareader
5 окт 17, 12:57    [20845131]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
Ураа !!! ЗАработало.
разрешение SELECT не работает если стоит Deny на Control.
Всем спасибо
5 окт 17, 13:05    [20845159]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
ИЗ MSDN (https://msdn.microsoft.com/ru-RU/library/ms191291(v=sql.120).aspx)
CONTROL
Предоставляет возможности, схожие с владением. Имеющий это разрешение получает все установленные разрешения на защищаемую сущность. Участник, получивший разрешение CONTROL, может также предоставлять разрешения на защищаемую сущность другим участникам. ...
Как понять какие конкретно возможности предоставляет Это разрешение??? Что значит схожие с владением? Где найти более подробную расшифровку
5 окт 17, 13:14    [20845182]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
Lamazoid
ИЗ MSDN (https://msdn.microsoft.com/ru-RU/library/ms191291(v=sql.120).aspx)
CONTROL
Предоставляет возможности, схожие с владением. Имеющий это разрешение получает все установленные разрешения на защищаемую сущность. Участник, получивший разрешение CONTROL, может также предоставлять разрешения на защищаемую сущность другим участникам. ...
Как понять какие конкретно возможности предоставляет Это разрешение??? Что значит схожие с владением? Где найти более подробную расшифровку

под проблемным юзером опрашиваем
select *
from sys.fn_my_permissions('dbo.GetOrgFromBase', 'object')

подставив нужный объект.

если вы типа выдавали селект, а тут его вдруг нет, значит есть явный денай.
самому ли юзеру, его ли группе/роли.
значит, опрашиваем sys.database_permissions на предмет DENY:
select *
from sys.database_permissions
where state_desc = 'deny' and major_id = object_id('dbo.GetOrgFromBase')


видим явный денай, начинаем думать.
кто же интересно контрол заденаил?

про права вроде все хорошо в хэлпе написано.
контрол это наибольшее, что можно поиметь,
ну т.е. все остальные права в себя включает.

вот в этом смысле и схожее с владением:
у владельца есть контрол на то, чем владеет,
плюс он владелец, владельцев всегда ровно 1, а контрол можно выдать всем
5 окт 17, 13:35    [20845261]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
o-o
Guest
для тех, кто по ид юзера не ориентируется, добавляем расшифровку юзера (user_name(grantee_principal_id)):
select *, user_name(grantee_principal_id) as user
from sys.database_permissions
where state_desc = 'deny' and major_id = object_id('staging.ddl_hist')
5 окт 17, 13:37    [20845280]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с безопасностью, как правильно настроить?  [new]
Lamazoid
Member

Откуда: Оттуда
Сообщений: 433
o-o,

Спасибо Вам за разъяснения.
5 окт 17, 13:44    [20845308]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить