Мое (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'
Как правильно дать разрешение роли моего приложения на эту проверку?