Как создать логин, который имеет ТОЛЬКО доступ для запуска хранимых процедур? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть приложение C# Winform, которое взаимодействует с базой данных SQL Server через хранимые процедуры. В SSMS, как мне создать учетную запись, которая имеет ТОЛЬКО разрешения для запуска хранимых процедур? Этот логин не сможет просматривать / редактировать / создавать определения таблиц и т. Д. Он также будет иметь доступ только к одной указанной БД.

Причина, по которой я хочу создать такой логин, заключается в том, что я храню учетные данные SQL Server, используемые моим приложением Winform, в его файле App.config. Поскольку app.config легко читается, любой, кто имеет злонамеренные намерения, может легко выполнить нежелательные операции с базой данных, если у данного имени входа были какие-то другие разрешения, кроме просто хранимых процедур.

Ответы [ 4 ]

2 голосов
/ 08 октября 2019

Удачный трюк в этом сценарии заключается в создании отдельной (настраиваемой) роли SQL Server, которая может выполнять только хранимые процедуры:

CREATE ROLE db_executor;
GRANT EXECUTE TO db_executor;

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

Теперь создайтепользователя в вашей базе данных и предоставьте ему только эту роль базы данных - этот пользователь сможет выполнять только хранимые процедуры - любые из них в вашей базе данных.

Если вы должны разрешить этому пользователювыполнить все хранимые процедуры - это очень удобный способ разрешить это (и вам не нужно постоянно обновлять разрешения при создании новых хранимых процедур).

1 голос
/ 08 октября 2019

Вы можете использовать следующий запрос, чтобы разрешить пользователю выполнять хранимую процедуру

USE [DB]
GRANT EXECUTE ON dbo.procname TO username;

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

1 голос
/ 08 октября 2019

Доступ к определенной базе данных осуществляется через создание пользователя в базе данных, с которым вы хотите, чтобы он работал. Вы можете найти больше информации о пользователях здесь .

Если пользователь создан, вы можете Grant, With Grant и Deny действия для каждого элемента в базе данных. Затем пользователю будут предоставлены / запрещены эти права предоставителем , который по умолчанию является dbo. userManagement in SSMS

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

1 голос
/ 08 октября 2019

Попробуйте следующий подход (grant execute следует повторить для каждого SP). Обратите внимание, что MyStoredProcedure должно быть в MyDatabase:)

-- create login to server
create login test_user with password = 'test';
-- create user mapped to a database
use MyDatabase
go
create user test_user for login test_user;
-- grant permission to execute SP
grant execute on MyStoredProcedure to test_user 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...