2008-11-17 5 views
1

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

Я полагаю, что это излишне. Имена хранимых процедур всегда скрыты от пользователей (все ошибки скрыты, а общий пользовательский «извините, что это не работает»). Пользователи имеют доступ только к хранимым процедурам, которые им разрешено выполнять. Это будет просто дополнительная дополнительная защита, поэтому, если таблица случайно предоставит каждому полный доступ, база данных будет обеспечивать только полный доступ из одного места.

ответ

0

В строке подключения вы можете установить Application Name=MyAppName - это не настоящая безопасность, но вы можете проверить это в своих SP (sysprocesses - в колонке program_name) и до sp_who.

Там нет ничего, что вы можете сделать о таблицах - именно поэтому я рекомендую никто не быть в любой роль, которая имеет доступ к таблицам на всех (SELECT, INSERT, UPDATE или DELETE).

Вы можете регулярно проверять это с помощью некоторого автоматизированного T-SQL, чтобы никто не делал ничего глупого.

Я не защищаю это никак, но вы можете сделать что-то подобное для представлений (сравнивающий SPID текущего процесса и program_name):

CREATE VIEW YourViewNameHere 
AS 
SELECT * 
FROM YourTableNameHere 
WHERE EXISTS (
    SELECT spid, program_name 
    FROM sys.sysprocesses 
    WHERE program_name = 'YourProgramNameHere' 
     AND spid = @@SPID 
) 
+0

Как насчет View's? Этот вопрос связан с идеей использования Linq для Sql и вместо того, чтобы иметь отдельные хранимые процедуры для каждого уровня представления представления доступа, которые обеспечивают доступ к каждой таблице и используются Linq to SQL. – user108418 2008-11-17 18:15:51

0

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

+0

Единственная проблема с этим - варьировать уровни доступа для приложения. Многие приложения имеют как административный уровень, так и базовый пользовательский уровень. Чтобы иметь разные уровни, для этого метода нужны X-пулы и X-приложения для X-уровней. – user108418 2008-11-17 18:13:24

0

Самый простой способ это просто заблокируйте его на уровне пользователя. Вы можете запустить свое win/web-приложение в определенном контексте безопасности, на котором у вас есть необходимые права, настроенные для.

Это дает возможность заставить пользователей запускать ваше приложение для взаимодействия с SQL и не может просто открыть Enterprise Manager или что-то еще.

Смежные вопросы