Разрешить роли приложения выполнять DBCC CHECKDB - PullRequest
0 голосов
/ 01 октября 2018

Мое (C #) приложение запускается, подключаясь к базе данных сервера SQL с ролью приложения.

Однако мне нужно, чтобы он запускал DBCC CHECKDB, но я получаю исключение:

Пользователь 'MyAppRole' не имеет разрешения на запуск DBCC checkdb для базы данных 'MyDatabase'.

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

Вещи, которые я пробовал:

1: В SQL Management Studio установите флажок db_owner в свойствах MyAppRole для этой базы данных.Однако я получаю то же исключение.

2: Добавить роль db_owner.

exec sp_addrolemember 'db_owner', 'MyAppRole'

Но теперь, когда я запускаю приложение, я получаю это исключение в момент выполнения DBCC CHECKDB:

Участник сервера "MYDOMAIN \ MyWindowsUsername" не может получить доступ к базе данных "MyDatabase" в текущем контексте безопасности.

, что особенно сбивает с толку, поскольку в SQL Managment StudioЯ могу легко выполнить команду после входа в систему с использованием проверки подлинности Windows.

3: создание хранимой процедуры с исполнением от имени владельца

CREATE PROCEDURE sp_dbcccheck WITH EXECUTE AS OWNER
AS
BEGIN
    DBCC CHECKDB (MyDatabase) WITH TABLERESULTS
END
GO

... и с моим MyAppRole Выполнить Разрешение.Но я все еще получаю исключение:

Участник сервера "MYDOMAIN \ MyWindowsUsername" не может получить доступ к базе данных "MyDatabase" в текущем контексте безопасности.

.... что я также получу, если попытаюсь выполнить эту хранимую процедуру из SQL Management Studio.

4: Дайте роли приложения разрешение "УПРАВЛЕНИЕ" (некоторые из них, похоже, противоречат цели роли приложения, но в любом случае, цепляясь за соломинку)

GRANT CONTROL ON DATABASE::MyDatabase TO MyAppRole

, но это приводит к исходной ошибке, когда приложение пытается выполнить проверку.

Пользователь 'MyAppRole' не имеет разрешения на запуск DBCCcheckdb для базы данных 'MyDatabase'

Как правильно дать разрешение роли моего приложения на эту проверку?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я не SQL Server эксперт DBA, но я публикую свой опыт.

В соответствии с документами DBCC CHECKDB commnad требуется sysadmin фиксированная роль сервера или db_owner фиксированная роль базы данных.Поскольку роль приложения не может быть членом роли sysadmin, мы можем рассмотреть только второй вариант.

Мы хотим работать с текущей базой данных, поэтому нам не нужны разрешения на уровне сервера и база данных.Уровень разрешений должен быть достаточным.Таким образом, членство db_owner должно помочь, и оно отлично работает для пользователя базы данных, но по какой-то причине не работает для роли приложения .

Я пытался добавить все другие роли БД для роли приложения, проверил сопоставления пользователей, которые выглядели хорошо, даже попытался выполнить DBCC TRACEON (4616, -1);, который упоминается здесь , но это также не помоглоСервер продолжал выдавать ошибку из вашего второго абзаца.

Мне удалось заставить его работать, только включив guest пользователя для текущей БД, но это нарушает представление о роли приложения.

Я сделал вывод (не уверен, что это правильно), что это невозможно, и использовал обычные db role и db users вместо

0 голосов
/ 02 октября 2018

С MSDN

Требуется членство в предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner.

Проблема, с которой вы столкнулись какрезультатом шага 1 может быть то, что пользователь windows не сопоставлен с базой данных, к которой вы подключаетесь.

...