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

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

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

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


обломал кайф
5 окт 17, 12:55    [20845125]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить