Назад | Перейти на главную страницу

Как создать учетную запись SQL, которая может выполнять только определенные действия?

Я привык работать с контрактами, где кто-то другой отвечает за базу данных SQL. Однако сейчас я работаю с контрактом, по которому я должен установить новый SQL Server, поэтому я установил MS SQL Server 2012 Express.

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

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

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

Как создать учетную запись SQL, которая может делать только одно: выбирать / вставлять / обновлять / удалять из ограниченного набора таблиц?

Редактировать: На основании полученных отзывов я провел небольшое исследование и написал следующий сценарий:

CREATE LOGIN ExtraUser
    WITH PASSWORD = 'foobar';

USE MyDatabase;

CREATE USER ExtraUser FOR LOGIN ExtraUser;

GRANT SELECT ON dbo.abc;
GRANT SELECT ON dbo.def;
GRANT INSERT ON dbo.def;

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

Ты почти там. Добавление пользователя в db_datareader и db_datawriter действительно предоставляет глобальный доступ для чтения / записи к базе данных.

Вам нужно будет использовать GRANT чтобы предоставить доступ к логину для определенных объектов.

GRANT SELECT ON dbo.Table1 TO ExtraUser
GRANT INSERT ON dbo.Table1 TO ExtraUser
GRANT UPDATE ON dbo.Table1 TO ExtraUser
GRANT DELETE ON dbo.Table1 TO ExtraUser

Вы также можете комбинировать разрешения по мере необходимости:

GRANT SELECT,INSERT,UPDATE,DELETE on dbo.Table1 to ExtraUser

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

Больше информации о GRANT может быть найден Вот.

РЕДАКТИРОВАТЬ:
В ответ на ваше изменение - да. Это ограничит этого пользователя этими разрешениями до тех пор, пока вы не предоставите что-то более серьезное (например, добавление входа в систему в db_datareader и db_datawriter). Если да, то вам следует отозвать эти разрешения более высокого уровня, используя REVOKE.