SQL Server: лучший способ запретить пользователю sql доступ к старым данным - PullRequest
0 голосов
/ 19 ноября 2009

При использовании SQL Server для некоторых пользователей это простой, но эффективный способ запрета доступа к данным старше определенной даты?

Мы можем сделать это на уровне приложения (веб-приложение), но это делает нас уязвимыми для таких сценариев, как взлом IIS или ошибки в нашем приложении. В идеале только определенные пользователи SQL должны иметь доступ к определенным данным старше пары месяцев. Как можно добиться этого с минимальными усилиями?

Если это имеет значение, наше приложение использует NHibernate.

Ответы [ 4 ]

2 голосов
/ 19 ноября 2009

Чистым решением SQL было бы создать что-то вроде: -

CREATE USERVIEW AS (SELECT * FROM REALTABLE WHERE CREATE_DATE > CURRENT_DATE() - 30 DAYS )

Не уверен, насколько хорошо это работает с Hibernate, и, конечно же, «CURRENT_DATE () - 30 ДНЕЙ» будет действителен только в DB2, вам понадобится функция дифференциала и синтаксис для каждой СУБД.

0 голосов
/ 19 ноября 2009

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

0 голосов
/ 19 ноября 2009

Можете ли вы архивировать старые данные в таблицы с более ограниченными правами доступа?

0 голосов
/ 19 ноября 2009

SQL Server не обеспечивает безопасность на уровне строк. Это означает, что вы не можете предоставлять SELECT определенным строкам (новее, чем дата), в то время как запрещаете другим. Все GRANT / DENY / REVOKE работают на уровне всего стола.

Существуют некоторые предлагаемые обходные пути, такие как использование представлений, см. Предоставление разрешений на уровне строк в SQL Server , но они громоздки и сложны в использовании (особенно если данные также должны быть обновлены).

Лучше всего переместить данные в разные таблицы, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...