Как ограничить разрешения программы на C# только для чтения в базе данных SQLServer?
Я написал несколько C#, который подключается к живой производственной базе данных. Я хочу предоставить моему приложению доступ только для чтения к БД, но не уверен, как этого добиться.
Есть ли какой-нибудь тривиальный способ сделать это, изменив строку подключения?
Насколько я понимаю, приложение будет входить в систему с учетными данными человека, выполняющего приложение, и, следовательно, может иметь или не иметь права записи в БД на основании этого факта. Могу ли я статически ограничить разрешения приложения, чтобы, если кто-то изменит программу на что-то разрушительное, позже, любая манипуляция не удалась?
Извиняюсь за то, что вопрос может быть тривиальным, но это мое первое предприятие в мире программирования на MS.
Спасибо,
Гав
5 ответов
Вы не можете изменить разрешения для учетной записи, изменив строку подключения. В базе данных есть учетная запись пользователя, которая определяет разрешения.
Если вы не хотите, чтобы разные люди имели разные разрешения, вы должны настроить учетную запись для приложения и использовать в строке подключения.
Для любой учетной записи в базе данных вы можете указать, к каким базам данных она имеет доступ, и что она может делать с базами данных. Разрешения могут быть указаны вплоть до уровня объектов и операций, так что вы можете, например, указать, что он может делать выборки только для определенных таблиц.
Пусть он войдет на сервер базы данных как пользователь, у которого есть только права на чтение. Это и просто не пытайтесь что-то записать в базу данных.
Вы всегда можете предоставить пользователю подключение к вашей базе данных, только роль "db_datareader" в этой базе данных.
db_datareader дает вашему пользователю разрешение SELECT для всех таблиц, но не более того.
Существует два основных типа аутентификации SQL Server:
- Интегрированная проверка подлинности Windows и
- Смешанный режим проверки подлинности (проверка подлинности SQL Server)
Похоже, вы используете первый. Если вы используете последний вариант, вы можете создать определенную учетную запись пользователя в SQL Server, дать ему имя пользователя и пароль, а затем предоставить доступ к таблицам, которые вы хотите, чтобы он мог читать. Вы можете контролировать на уровне учетной записи, какой доступ он имеет к любому объекту в базе данных.
См. http://msdn.microsoft.com/en-us/library/ms144284.aspx для получения дополнительной информации.
Просто мысль; обычно не каждый зарегистрированный пользователь получает доступ к базе данных, не говоря уже о праве на чтение. Поэтому вы в своем случае можете создать пользователя базы данных для своего приложения с правами чтения; и использовать это в строке подключения.