Поделиться через


Предоставление разрешений уровня строки в SQL Server (ADO.NET)

В некоторых случаях требуется управлять доступом на более низком уровне, чем путем простого предоставления, отзыва и отказа в праве доступа к данным. Например, в базе данных больницы сведения о пациентах могут храниться в единой таблице. Возможно, потребуется ограничить доступ врачей к данным и разрешить им просматривать сведения только о своих пациентах. Похожая ситуация наблюдается во многих отраслях, включая финансовые, юридические, правительственные и военные приложения. Однако SQL Server не поддерживает реализацию защиты на уровне строки. Для этого необходимо создавать дополнительные столбцы в таблицах, которые определяют механизмы фильтрации строк.

Реализация прав доступа на уровне строки

Права доступа на уровне строки используются для приложений, в которых данные хранятся в одной таблице. У каждой строки есть столбец, в котором определяется отличительный параметр, например имя пользователя, метка или другой идентификатор. Затем создаются параметризованные хранимые процедуры, передающие соответствующее значение. Пользователи могут видеть только строки, которые соответствуют предоставленному значению.

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

  • Создайте таблицу и добавьте в нее еще один столбец для хранения имени.

  • Создайте представление с предложением WHERE, в котором используется столбец с именем пользователя. После этого возвращаться будут только те строки, которые имеют указанное значение. При помощи одной из встроенных функций задайте имя пользователя или имя входа для базы данных. Это позволяет устранить необходимость создавать разные представления для разных пользователей.

    ' Returns the login identification name of the user.
    WHERE UserName = SUSER_SNAME()

    ' USER_NAME or CURRENT_USER Return the database user name.
    WHERE UserName = CURRENT_USER()
  • Создайте хранимые процедуры для выборки, вставки, обновления и удаления данных, исходя из представления, а не базовых таблиц. Представление является фильтром, который определяет, какие строки могут возвращаться или изменяться.

  • Для хранимых процедур, которые вставляют данные, имя пользователя нужно получать при помощи той же функции, которая указана в предложении WHERE этого представления, и вставлять это значение в столбец UserName.

  • Запретите роли public всякий доступ к таблицам и представлениям. Пользователи не смогут наследовать права доступа от других ролей базы данных, поскольку предложение WHERE основано на имени пользователя или имени входа, а не на ролях.

  • Предоставьте ролям базы данных право доступа EXECUTE для хранимых процедур. Пользователи смогут иметь доступ к данным только через предоставленные хранимые процедуры.

Внешние ресурсы

Дополнительные сведения см. в следующих ресурсах.

Реализация безопасности на уровне строки и ячейки в конфиденциальных базах данных при помощи SQL Server 2005 на сайте Технического центра SQL Server.

Описание использования безопасности на уровне строки и ячейки для соответствия требованиям безопасности конфиденциальной базы данных.

См. также

Основные понятия

Сценарии защиты приложений в SQL Server (ADO.NET)

Управление разрешениями с помощью хранимых процедур в SQL Server (ADO.NET)

Написание защищенного динамического SQL-кода в SQL Server (ADO.NET)

Другие ресурсы

Защита приложений ADO.NET

Общие сведения о безопасности SQL Server (ADO.NET)