Роль базы данных может получить доступ к таблице через хранимую процедуру, к которой у нее нет доступа

Я создал роль уровня базы данных: NonBillingRole.

CREATE ROLE NonBillingRole

затем предоставил ему весь доступ и отменил / запретил доступ к таблице биллинга с помощью следующей команды:

REVOKE SELECT, INSERT, UPDATE, DELETE ON TblBilling TO NonBillingRole
DENY SELECT, INSERT, UPDATE, DELETE ON TblBilling TO NonBillingRole

Затем я добавил пользователя к этой роли.

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

Моя цель - создать роль, которая имеет полный доступ к базе данных, включая выполнение хранимой процедуры, но не имеет прямого или косвенного доступа (даже через хранимую процедуру) к таблице TblBilling.

1 ответ

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

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

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

Другие вопросы по тегам