powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / метки безопасности и принудительный контроль доступа
20 сообщений из 20, страница 1 из 1
метки безопасности и принудительный контроль доступа
    #32047552
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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

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

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

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

Да, действительно, упустил из виду, но это уже немного не по теме. :-)
...
Рейтинг: 0 / 0
метки безопасности и принудительный контроль доступа
    #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
метки безопасности и принудительный контроль доступа
    #32047873
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх!...

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


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

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

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


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

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

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

Ну у вас и наглые пользователи :))), а накой им знать то про таблицы - ето наше дело где что лежит и куда смотрит ,а им нефиг видеть что их не касаеться:))
ЗЫ
У меня безопастность реализованна по смыслу близко к Jimmy + view
...
Рейтинг: 0 / 0
метки безопасности и принудительный контроль доступа
    #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
метки безопасности и принудительный контроль доступа
    #32047996
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на мой взгляд юзера сохранять, как носителя прав нельзя

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Недостатки - медленно в первый ра (я кеширую права), много кода, который понимаю только я, в будущем может стать горлышком бутылки с производительностью.
...
Рейтинг: 0 / 0
метки безопасности и принудительный контроль доступа
    #32048101
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если юзера перевели из отдела в отдел, следовательно, вынули и переложили из ролей в роли, снапшот ролей юзера на момент записи строки остался неизменным, а вот юзер уже записи не видит
Получается, что права доступа распределяются между должностями. Нужно просто слегка модернизировать ассоциативную модель, предлагаемую Jimmy, и вместо SYSTEM_USER хранить ключ должности. При этом проверка на принадлежность юзера к должности берётся из собственной таблицы юзеров. Хотя в принципе можно и комбинировать. Я бы ещё добавил в таблицу ассоциаций два поля:
объект - наименование поля('sysobjects.xtype')
операция - допустимое действие ('S'/'I'/'U')
и сделал бы поле значения типом sql_variant.
Получили универсальную модель для любого объекта.
...
Рейтинг: 0 / 0
метки безопасности и принудительный контроль доступа
    #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
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / метки безопасности и принудительный контроль доступа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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