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


Защита на уровне столбцов

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

Безопасность на уровне столбцов упрощает проектирование и реализацию безопасности в приложении, позволяя ограничивать доступ к столбцам для защиты конфиденциальных данных. Например, можно предоставить конкретным пользователям доступ только к определенным столбцам таблицы, имеющей отношение к их отделу. Логика ограничения находится на уровне базы данных, а не на отдалении от данных на другом уровне приложения. База данных применяет ограничения доступа при каждой попытке получения доступа к данным независимо от уровня. Это ограничение делает систему безопасности более надежной и устойчивой за счет уменьшения ее контактной зоны. Кроме того, безопасность на уровне столбцов также позволяет отказаться от ввода представлений для фильтрации столбцов с целью наложения на пользователей ограничений доступа.

Вы можете реализовать безопасность на уровне столбцов с помощью синтаксиса GRANT Object Permissions T-SQL. С помощью этого механизма поддерживаются проверка подлинности SQL и Microsoft Entra идентификатора (прежнее название — Azure Active Directory).

Также рассмотрите возможность принудительного применения безопасности на уровне строк в таблицах на WHERE основе фильтра предложений.

На диаграмме показана схематическое таблица с первым столбцом, где сверху изображен закрытый замок. Его ячейки оранжевого цвета, тогда как остальные столбцы содержат белые ячейки.

Синтаксис

Синтаксис инструкции GRANT для разрешений объекта позволяет предоставлять разрешения для списков столбцов таблицы с разделителями-запятыми.

GRANT <permission> [ ,...n ] ON
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]
<permission> ::=
    SELECT
  | UPDATE
<database_principal> ::=
      Database_user
    | Database_role
    | Database_user_mapped_to_Windows_User
    | Database_user_mapped_to_Windows_Group

Примеры

В следующем примере показано, как ограничить доступ пользователя TestUser к столбцу SSN таблицы Membership:

Создайте Membership таблицу со столбцом SSN , используемым для хранения номеров социального страхования:

CREATE TABLE Membership
  (MemberID int IDENTITY,
   FirstName varchar(100) NULL,
   SSN char(9) NOT NULL,
   LastName varchar(100) NOT NULL,
   Phone varchar(12) NULL,
   Email varchar(100) NULL);

Разрешить TestUser доступ ко всем столбцам , кроме столбца SSN , который содержит конфиденциальные данные:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

Запросы, выполняемые как TestUser , завершаются ошибкой SSN , если они содержат столбец :

SELECT * FROM Membership;

С результирующей ошибкой:

Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.

Варианты использования

Ниже приведены некоторые примеры использования безопасности на уровне столбцов в современном мире.

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

Дальнейшие действия