Роль базы данных может получить доступ к таблице через хранимую процедуру, к которой у нее нет доступа - PullRequest
0 голосов
/ 02 марта 2020

Я создал роль уровня базы данных: 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 Ответ

0 голосов
/ 02 марта 2020

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

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

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

...