Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / метки безопасности и принудительный контроль доступа / 20 сообщений из 20, страница 1 из 1
02.09.2002, 17:52:16
    #32047552
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Добрый день!

Так это называется по научному:-), а по простому-права доступа на отдельные строки. Такое на MSSQL можно написать только руками:-(, подскажите, где можно почитать про конкретные реализации в инете или кто может для себя такое делал.
Ссылок поисковик выдает немного, да и в тех, в основном теория

PS INGRES/Enhanced Sequrity не предлагать:-)
...
Рейтинг: 0 / 0
02.09.2002, 18:27:00
    #32047558
YellowMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Я делал, могу рассказать.
Систему доступа нагло содрал с Новелл Нетваре 4.1
...
Рейтинг: 0 / 0
03.09.2002, 10:43:10
    #32047645
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
2 YellowMan

конечно рассказать!
...
Рейтинг: 0 / 0
03.09.2002, 17:23:09
    #32047861
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
нашел немного про права здесь http://www.ibase.ru/devinfo/oop_rdbms.htm , но хотелось бы конкретный пример и с использованием ролей и юзеров сервера
...
Рейтинг: 0 / 0
03.09.2002, 17:27:32
    #32047862
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Такое на MSSQL можно написать только руками:-(,

Такое на MSSQL можно реализовать с помощью VIEW и\или процедур, и не только для строк но и для столбцов тоже.
...
Рейтинг: 0 / 0
03.09.2002, 17:36:16
    #32047865
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Дополню "Genady":\r
\r
Есть еще UDF, разрешения можно выдать на их выполнение, а не на таблицы...\r
На столбцы, по-моему, SQL Server давно позволяет выдавать разрешения.\r
\r
Удачи
...
Рейтинг: 0 / 0
03.09.2002, 17:39:19
    #32047867
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
На столбцы, по-моему, SQL Server давно позволяет выдавать разрешения.

Да, действительно, упустил из виду, но это уже немного не по теме. :-)
...
Рейтинг: 0 / 0
03.09.2002, 17:54:47
    #32047869
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Я по такой схеме делал:

- создал таблицу ассоциаций, где связал группы записей с системным именем пользователя (необходимо использовать Win NT авторизацию!)

- создал представление, выводящее группы записей согласно асоциации

- запретил прямой доступ к таблице

Вот так (на примере системной таблицы sysobjects):
Код: plaintext
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.
 /* Вывод записей из таблицы напрямую */ 
select * from sysobjects
go

 /* создание таблицы ассоциаций */ 
create table acl (xtype char( 3 ), suser varchar( 20 ))
go

 /* создание вида, выводящего разрешенные столбцы и
записи на основании таблицы ассоциаций */ 
create view vwSysobjects as
select s.name, s.xtype 
    from sysobjects s, acl a
    where a.suser = SYSTEM_USER 
        and s.xtype = a.xtype

go

 /* просмотр вида (0 записей) */ 
select * from vwSysobjects
go

 /* создание ассоциации для просмотра записей типа 'U' */ 
insert acl ( xtype, suser )
    values ( 'U', SYSTEM_USER )
go

 /* просмотр вида ( N записей типа 'U' ) */ 
select * from vwSysobjects
go

 /* создание ассоциации для просмотра записей типа 'S' */ 
insert acl ( xtype, suser )
    values ( 'S', SYSTEM_USER )
go

 /* просмотр вида ( M записей типов 'U' и 'S' ) */ 
select * from vwSysobjects
go

 /* удаление ассоциаций */ 
delete acl
go

 /* просмотр вида (0 записей) */ 
select * from vwSysobjects
go


Такая схема позволяет создавать произвольные группы записей, разрешенные для конкретных пользователей.
Механизм фильтрации работает прозрачно и не зависимо от клиентского приложения, так что юзер может и не знать, что видит не все данные из таблицы.
...
Рейтинг: 0 / 0
03.09.2002, 18:12:11
    #32047873
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Эх!...

Я год назад эту тему подымал... Была длинная дискуссия. В итоге ничего
лучше того, чем скопировать схему защиты SQL Server'а я не придумал.
Видимо, все хорошее просто – таблица разрешений и все…


Вероятно, Вы раздаете разрешение все-таки на классы записей (т.к.
xtype это не уникальное поле), что говорит о том, что число записей
в acl будет сопоставимо с числом записей в защищаемых таблицах если раздавать
разрешения на индивидуальные записи (т.к. вместо xtype тут
будет PK из защищаемой таблицы).

Windows Authentication тут не столь принципиальна (вот где без нее никак -
так это если в Представлении использовать SYSTEM_USER).

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


Удачи
...
Рейтинг: 0 / 0
03.09.2002, 18:20:24
    #32047874
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
2 jimmers

Вы правы - данный пример показывает, как можно манипулировать именно группами записей. В реальной же БД все несколько сложнее - там я использую еще одну таблицу, где ID записей ассоциируются в группы, причем одна и та же запись может входить в несколько групп.

Естественно, что такое решение приемлемо для сравнительно небольших таблиц, и для моего случая - то что доктор прописал.
...
Рейтинг: 0 / 0
03.09.2002, 18:42:55
    #32047880
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
2jimmers
Кроме того, Пользователь, вероятно, поймет, что ему вернули не все записи
из таблицы только потому, что он опрашивает Представление, а не саму таблицу.

Ну у вас и наглые пользователи :))), а накой им знать то про таблицы - ето наше дело где что лежит и куда смотрит ,а им нефиг видеть что их не касаеться:))
ЗЫ
У меня безопастность реализованна по смыслу близко к Jimmy + view
...
Рейтинг: 0 / 0
04.09.2002, 05:26:08
    #32047905
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
У нас сделано примерно так:

Для каждого ресурса (таблицы, класса и т.п.) определяется набор именованых прав.
В правах на модификацию данных (Insert, Update, Delete) можно записать строки Select-ов, которые должны выполняться до и после модификации.
Потом эти права раздаются пользователям/группам.
Если право не дано, то обламываем сразу.
Если право дано и Select возвращает что-нибудь (либо не задан), то считаем, что есть такое право.

Например:
Код: plaintext
1.
2.
3.
Select top  1   0  from [Objects]
left join [Divisions].[Id] = [Objects].[Division]
where [Objects].[Id] = @Id and [Division].[Code] = '02-01'

при праве на Update означает,
что дано право на измененение только объектов, находящихся в цехе 02-01.
...
Рейтинг: 0 / 0
04.09.2002, 12:01:35
    #32047996
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
на мой взгляд юзера сохранять, как носителя прав нельзя

т.к. его могут уволить, не разумнее ли взять все его роли первого уровня?
...
Рейтинг: 0 / 0
04.09.2002, 12:06:37
    #32048000
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
2 TUnknown

А что, после увольнения логины на MS SQL остаются? Интересное кино!

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

Ну и (в моей схеме, во всяком случае) проще использовать ниладическую функцию SYSTEM_USER, чем париться и добывать список ролей, к оторым пользователь относится.

ИМХО конечно.
...
Рейтинг: 0 / 0
04.09.2002, 12:54:48
    #32048020
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
2 Jimmy

>>Конечно, можно исходить из того, что админ забыл удалить его из списка, но такого админа нужно в шею гнать.

Ну и (в моей схеме, во всяком случае) проще использовать ниладическую функцию SYSTEM_USER, чем париться и добывать список ролей, к оторым пользователь относится.

далее только ИМХО и более абстрактно:-)
права на объекты -это вещь, которую нужно стараться максимально сделать независимой от быстроменяющихся сущностей, уж если нужно дать права отдельному пользователю на запись, то это должно быть скорее исключением, чем правилом

ведь админ сервера и базы могут быть разными людьми, и нужно стремиться, чтобы работа лежала преимущественно на ком-то одном с ограниченными полномочиями, а не размазывать отвественность на нескольких

хотя полностью уйти от указания чего либо для юзеров не получится. как ,например, указать права юзера в его роли(по отношению к другим членам)

в НТ есть всякие админы, аккаунт админы, принт операторы и т.д., а в MSSQL встроенные роли для прав на отдельные строки не подходят


или я в чем-то не прав?

PS просто хочу слишком сладкого: сделать такие права, чтобы они позволяли много, но не отходя от ролей:-)))
...
Рейтинг: 0 / 0
04.09.2002, 12:58:02
    #32048024
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
PS если юзера перевели из отдела в отдел, следовательно, вынули и переложили из ролей в роли, снапшот ролей юзера на момент записи строки остался неизменным, а вот юзер уже записи не видит

действие администратора сервера, а база только этим пользуется
...
Рейтинг: 0 / 0
04.09.2002, 13:01:19
    #32048027
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Я придерживаюсь такого принципа:
Сделать все максимально просто.

Конечно, можно извратиться и создать очень гибкую систему прав, которая .....
А во что это выльется? Тонны кода, километры листингов и стада ошибок.
(ИМХО конечно.)

ЗЫ Для моей конкретной задачи решение было найдено, и оно меня устроило. Естественно, что ты сам должен выбрать, что подходит именно тебе. Так что спорить - не имеет смысла.
...
Рейтинг: 0 / 0
04.09.2002, 14:37:45
    #32048076
YellowMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
Я сделал так - в базе были выделены объекты, ну пусть документ, картинка, фолдер. Примеры от балды.
Каждый объект имеет владельца (пользователя). Пользователи объединены в дерево. Каждый пользователь имеет набор прав - посмотреть, отредактировать, удалить и так далее. У пользователей есть также права на своих пользователей (детей). Реализованно наследование прав и механизм прямых ссылок - вроде как внучек из соседней ветки может получить права на Вас.
Сейчас в системе около 5К пользователей и около 300 ссылок.

Вся работа с базой идет через SP. В каждую передается userID и на основе его фильтруются записи в запросах.

Недостатки - медленно в первый ра (я кеширую права), много кода, который понимаю только я, в будущем может стать горлышком бутылки с производительностью.
...
Рейтинг: 0 / 0
04.09.2002, 15:02:30
    #32048101
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
если юзера перевели из отдела в отдел, следовательно, вынули и переложили из ролей в роли, снапшот ролей юзера на момент записи строки остался неизменным, а вот юзер уже записи не видит
Получается, что права доступа распределяются между должностями. Нужно просто слегка модернизировать ассоциативную модель, предлагаемую Jimmy, и вместо SYSTEM_USER хранить ключ должности. При этом проверка на принадлежность юзера к должности берётся из собственной таблицы юзеров. Хотя в принципе можно и комбинировать. Я бы ещё добавил в таблицу ассоциаций два поля:
объект - наименование поля('sysobjects.xtype')
операция - допустимое действие ('S'/'I'/'U')
и сделал бы поле значения типом sql_variant.
Получили универсальную модель для любого объекта.
...
Рейтинг: 0 / 0
04.09.2002, 17:31:22
    #32048196
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метки безопасности и принудительный контроль доступа
как я понимаю из обсуждения, возможность доступа через view отсекается, как малозначительная? процедура-это конечно хорошо, но лишаться из-за прав доступа view не хочется

права доступа на столбцы- для моего случая это слишком круто, тут, видимо, только процедуры помогут

а как вы рассмотривате такой вариант:

таблица Orders(ордера, клиенты или что угодно)

Id, primary key
<other>

таблица Rights

OrderId, foreign key
Group, MSSQL role
Access битовая маска Select/update/delete

view
...
from
Orders
left outer join Rights on OrderId=Id
group by
...
having
sum(is_member(Group))<>0

вот еще где-то нужно приткнуть Access:-) и будет порядок. Если учитывать Access, то придется к каждой связке Role,User приписать его права в этой группе. Это не очень хорошо, т.к. при удалении юзера такая связка останется, но за все надо платить
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / метки безопасности и принудительный контроль доступа / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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