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

Откуда: Москва
Сообщений: 397
Добрый вечер всем!
Прошу помощи в следующем. Имею БД на MS SQL Server 2008. Пользователей мало, но планируется много. Примерно 100 чел.
В данный момент всем все доступно. Требуется разграничить права пользователей на уровне строк. То есть, чтобы пользователь(или определенная группа пользователей) создавший/ая запись в БД могла в дальнейшем видеть только "свои" записи в БД. При этом, есть еще подчиненные таблицы.
Примерно представляю, что нужно писать хранимые процедуры, но как в подробностях это сделать пока не представляю. Дайте наводку. Или примеры. Буду очень благодарен!
14 май 14, 22:10    [16017990]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Вьюшки прошу не предлагать. Имею ввиду постоянное пополнение и пролистывание записей пользователями через формочки Access.
P.S. Жалко что нельзя править тут недавно написанную запись:(
14 май 14, 22:15    [16018010]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
eric555
Вьюшки прошу не предлагать
Почему?
14 май 14, 22:26    [16018059]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
invm,

Потому что во вьюшку нельзя добавлять данные. Я имел ввиду работу с редактированием и просмотром одновременно!
14 май 14, 22:40    [16018137]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
eric555
Потому что во вьюшку нельзя добавлять данные.
Можно.
14 май 14, 22:40    [16018140]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
invm
eric555
Потому что во вьюшку нельзя добавлять данные.
Можно.

Интересно как это? У меня во вьюшке подсоединена куча справочников, подчиненных таблиц....
14 май 14, 22:47    [16018172]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
Crimean
Member

Откуда:
Сообщений: 13148
таки вьюшка ) и тема, на самом деле, далеко не из простых
реально имхо есть 2 крайности - или скатывание в ACL (объем и неповоротливость при попытке основательно сменить права, особенно "косвенные") или постоянный расчет эффективных прав (процессору капут и пользователи могут быть недовольны)
добавочка - если пересмотрите термин "пролистывание" - может стать сильно проще
а попробуете "это" делать хранимками - скорее всего упретесь по куче направлений. но можно и хранимками, конечно же
14 май 14, 22:49    [16018184]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
В любом случае, меня интересует разграничение прав пользователей по строкам на таблицы, а не на вьюшки!!!
14 май 14, 22:49    [16018185]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Crimean,

Можно подробнее про "пролистывание" и про "хранимки" где это все взять? Мне бы примеры, а я попробую разобраться.
14 май 14, 22:51    [16018198]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
eric555
Интересно как это? У меня во вьюшке подсоединена куча справочников, подчиненных таблиц....
На каждую таблицу делается вьюшка, в которой эта таблица, плюс таблицы с правами. Приложение переделывать не надо, всё само будет работать с новой функциональностью.

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

Как их использовать - спрашивайте в форуме по аксессу, тут вам вряд ли подскажут. Думаю, для этого придётся полностью переписать приложение, так как наверняка у вас всё запрограммировано "мышкой", без написания реальных запросов DML.
14 май 14, 22:56    [16018230]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
eric555
Можно подробнее про "пролистывание" и про "хранимки" где это все взять? Мне бы примеры, а я попробую разобраться.
Какие примеры, "как написать хранимку"? Это же всё есть в хелпе.

Смотрите CREATE PROCEDURE, там есть много примеров.
Вот первый:
CREATE PROCEDURE HumanResources.uspGetAllEmployees
AS
    SET NOCOUNT ON;
    SELECT LastName, FirstName, JobTitle, Department
    FROM HumanResources.vEmployeeDepartment;
GO
14 май 14, 22:58    [16018243]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
eric555
Интересно как это?
http://technet.microsoft.com/ru-ru/library/ms187956.aspx
VIEW_METADATA

Указывает, что экземпляр SQL Server возвратит в API-интерфейсы DB-Library, ODBC и OLE DB сведения метаданных о представлении вместо базовой таблицы или таблиц, когда метаданные режима обзора затребованы для запроса, который ссылается на представление. Метаданные режима обзора — это дополнительные метаданные, которые экземпляр SQL Server возвращает вышеназванным клиентским API-интерфейсам. Эти метаданные позволяют клиентским API-интерфейсам реализовывать обновляемые клиентские курсоры. Метаданные режима обзора содержат сведения о базовой таблице, которой принадлежат столбцы в результирующем наборе.

Для представлений, созданных с применением предложения VIEW_METADATA, метаданные режима обзора возвращают имя представления, а не имена базовых таблиц при описании столбцов из представления в результирующем наборе.

В представлении, созданном с предложением WITH VIEW_METADATA, все столбцы, за исключением столбца timestamp, поддерживают обновление, если представление включает триггеры INSTEAD OF INSERT или INSTEAD OF UPDATE. Дополнительные сведения об обновляемых представлениях см. в разделе «Примечания».
14 май 14, 23:04    [16018272]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
alexeyvg
Если вьюхи использовать нельзя (например, начальник их не любит), то менять обращения к таблицам на запросы к этим таблицам с фильтром по правам, или использовать процедуры.

Как их использовать - спрашивайте в форуме по аксессу, тут вам вряд ли подскажут. Думаю, для этого придётся полностью переписать приложение, так как наверняка у вас всё запрограммировано "мышкой", без написания реальных запросов DML.


Как во вьюшках добавлять или изменять данные? Я чет в ступор зашел! Никогда это не получалось. Разве можно править данные во вьюхе??

На уровне приложения, а точнее формочек аксесс ставить фильтры отпадает. Шаловливые ручки пользователей могут многое подправить)
14 май 14, 23:07    [16018289]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
invm,

Ну теперь все понятно! Осталось, почитать и разобраться во всем подробнее... Спасибище!
14 май 14, 23:10    [16018312]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
alexeyvg
eric555
Можно подробнее про "пролистывание" и про "хранимки" где это все взять? Мне бы примеры, а я попробую разобраться.
Какие примеры, "как написать хранимку"? Это же всё есть в хелпе.

Смотрите CREATE PROCEDURE, там есть много примеров.
Вот первый:
CREATE PROCEDURE HumanResources.uspGetAllEmployees
AS
    SET NOCOUNT ON;
    SELECT LastName, FirstName, JobTitle, Department
    FROM HumanResources.vEmployeeDepartment;
GO


А подкиньте пожалуйста пример создания хранимки для моего случая, чтобы я увидел как пользователю делается ограничение на просмотр и редактирование его же созданных записей.
14 май 14, 23:12    [16018323]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Implementing SQL Server Row and Cell Level Security
14 май 14, 23:41    [16018457]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
pkarklin,

Хороший пример, спасибо! Жалко что не на русском, сложно переводить...
14 май 14, 23:55    [16018517]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
eric555
pkarklin,

Хороший пример, спасибо! Жалко что не на русском, сложно переводить...
Это пример как раз для вьюх.

С хранимками то же самое; тот запрос, из которого состоит вьюха, просто пишется в хранимой процедуре.
15 май 14, 00:02    [16018540]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
alexeyvg,

Может, лучше тогда с помощью триггеров сделать? Надо чтобы на уровне сервера были настроены все условия и фильтры. Открыл формочку, увидел только "свои" записи! При добавлении новой записи, в служебное поле вставился идентификатор, присущий ему или определенной группе пользователей ну и так далее...
15 май 14, 09:24    [16019124]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
Crimean
Member

Откуда:
Сообщений: 13148
eric555,

а давайте уже для каждого пользователя свою копию данных сделаем и в свою схему засунем? и триггерами все разведем. а чего? если данных мало, а железа много - пойдет! шутка, но в каждой шутке, как известно..
15 май 14, 09:27    [16019136]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Crimean,

Таблиц очень много, я замучаюсь для каждой группы копировать по 20 таблиц! А если в одной что поменять надо будет? Дублировать свои действия 20 раз не очень удобно и ошибиться легко:(
15 май 14, 09:40    [16019172]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
aleks2
Guest
eric555
Таблиц очень много, я замучаюсь для каждой группы копировать по 20 таблиц! А если в одной что поменять надо будет? Дублировать свои действия 20 раз не очень удобно и ошибиться легко:(


1. Осподе милосердный и всемогущий не наградил нас кнопкой [Сделать фсе как я хАчу].
Так что шевелить ручками придется.

2. За образец могешь взять систему UNIX разграничения доступа к файлам.
15 май 14, 10:00    [16019288]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
П-Л
Guest
Дальнейшее будет относиться к АДП файлу аксеса. Редактируемость данных вью мс скл сервера через формы аксеса зависит от многих факторов. Поведение аксеса и весь тот код, которым обменивается аксес с сервером при операциях редактирования/добавления/удаления записей через формы, опирающиеся на многотабличные вью можно исследовать профайлером. Мало не покажется.

Конструкция вью должна соблюдать определенные правила. Звезды и снежинки нормально редактируются. Причем аксесу хватает смекалки чтобы отправить на сервер апдейт в нужную таблицу. Т.е. возможно редактирование не только данных самой детальной таблицы фактов, но и полей справочников, зацепленных во вью джоином через ФК. В запрос должны включаться поля ФК из детальных таблиц, а не ПК из прицепленного справочника. Все это было хорошо и гладко на старых версиях аксеса и сервера. Аксес 2003 с Скл 2000 работал абсолютно бесшовно.

Для сочетание Аксес 2003 + скл 2005 уже пришлось понижать версию совместимости БД, если надо сохранить все опции редактируемости запросов, иначе в многотабличных вью, где самая детальная таблица имеет ПК автосчетчик, перестают вставляться новые записи. На еще более новых версиях Аксес 2007 + скл 2005/8/12 появляются новые проблемы. Мне пришлось полностью отключить встроенный механизм аксеса по отправке команд серверу и заменить его своими классами, перехватывающими события форм и формирующими валидные апдейты, инсерты, делиты.
15 май 14, 10:06    [16019342]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
aleks2
2. За образец могешь взять систему UNIX разграничения доступа к файлам.

Не видел в живую.
15 май 14, 20:29    [16023634]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав пользователей по записям БД (по строкам БД)  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
П-Л,

Вьюхи мне не подойдут, я замучаюсь на каждую таблицу делать вьюху!!! У меня основных таблиц в БД порядка 20. 9 зданий(условно) по 5 отделов в каждом (9*5*20=получится 900 вьюшек). Несерьезно и очень неудобно будет! Каждый отдельный отдел при добавлении/редактировании записи, должен видеть только свои записи. Да, и потом, все права доступа, фильтры, идентификаторы для пользователей/групп должны быть на сервере в БД, а не в файлах access (.accdb и .adp). Короче, фишка с вьюшками не подойдет:(
15 май 14, 20:40    [16023654]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить