Защита на уровне столбцов
С помощью функции безопасности на уровне столбцов можно управлять доступом к столбцам таблицы на основе контекста выполнения пользователя или членства в группе.
Безопасность на уровне столбцов упрощает проектирование и реализацию безопасности в приложении, позволяя ограничивать доступ к столбцам для защиты конфиденциальных данных. Например, можно предоставить конкретным пользователям доступ только к определенным столбцам таблицы, имеющей отношение к их отделу. Логика ограничения находится на уровне базы данных, а не на отдалении от данных на другом уровне приложения. База данных применяет ограничения доступа при каждой попытке получения доступа к данным независимо от уровня. Это ограничение делает систему безопасности более надежной и устойчивой за счет уменьшения ее контактной зоны. Кроме того, безопасность на уровне столбцов также позволяет отказаться от ввода представлений для фильтрации столбцов с целью наложения на пользователей ограничений доступа.
Вы можете реализовать безопасность на уровне столбцов с помощью синтаксиса 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), номерам телефонов и другим персональным данным клиентов разрешено только менеджерам по работе с клиентами.
- В медицинской организации доступ к конфиденциальным медицинским записям имеют только врачи и медсестры. Сотрудники отдела выставления счетов не могут просматривать эти данные.