Разрешения SQL Server для создания, восстановления, удаления только некоторых баз данных


17

На MS SQL Server 2008 R2 мне нужен пользователь, который может создавать, восстанавливать, DBCC CHECKDB, а затем удалять базы данных. Но он не должен иметь возможность доступа или удаления указанных баз данных на сервере (по соображениям безопасности). Возможна ли эта настройка?


Вы можете получить несколько советов здесь: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Ответы:


27

Да, это возможно через пару разрешений.

Во-первых - для создания базы данных - вам необходимо предоставить разрешение на уровне сервера Create Any Database. Это разрешение делает то, на что это похоже - возможность создавать базу данных. Обратите внимание, что это не дает фиксированной серверной роли dbcreator для входа в систему, так как эта фиксированная серверная роль дает разрешения на изменение / удаление для любой базы данных. Create Any Databaseпозволяет логину иметь доступ только к базам данных, которыми они владеют. Это также даст возможность восстановить.

(Таким образом, ТОЛЬКО « Создавая любую базу данных» - вы даете возможность создавать новую базу данных, но избегаете возможности отбрасывать или изменять ЛЮБУЮ базу данных, полученную при использовании предопределенной роли сервера dbcreator)

Чтобы предоставить это разрешение «Создать любую базу данных» -

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Для возможности запуска DBCC CHECKDBи удаления баз данных достаточно фиксированной роли базы данных db_owner. Это дает все, что вы запрашиваете. Обратите внимание: вы также предоставляете этому пользователю возможность выбирать, удалять, обрезать, обновлять и вставлять с помощью db_owner. Мне нравится думать об этом как sysadminо базе данных.

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

Для этого вы сначала должны сопоставить имя пользователя базы данных:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

А затем добавьте этого пользователя в db_ownerроль (работает в SQL Server 2012 и далее):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

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

EXEC sp_addrolemember 'db_owner', 'frank';

Вы также можете сделать все это через графический интерфейс. Информация для входа в систему, которую вы должны сделать через папку безопасности в SSMS на уровне экземпляра: щелкните правой кнопкой мыши имя входа -> Свойства -> Securables. Для уровня базы данных вы должны сделать это через папку безопасности на уровне базы данных: щелкните правой кнопкой мыши и выберите нового пользователя -> выберите логин, который вы хотите использовать, из списка имен входа на сервер / дайте имя пользователю базы данных -> перейдите к вкладка членство, чтобы выбрать роль членства.

Справочная система SQL Server, Books Online, также является отличным ресурсом для большинства вопросов о разрешениях - если вы решите, что вам нужно назначить другие разрешения. Просто выполните поиск команды T-SQL, для которой вы хотите дать разрешения, и в статье, как правило, есть раздел « Разрешения » для этой команды, в котором указано, какие разрешения требуются для выполнения этого действия. Вы можете посмотреть в статье для DBCC CHECKDB пример - примерно 7/8 пути вниз по статье - это раздел разрешений.


3
Я просто хотел бы добавить, что это ALTER ROLE [db_owner] ADD MEMBER [frank]работает только с SQL Server 2012. Если вы работаете на SQL Server 2008, нужно использовать SP: EXEC sp_addrolemember 'db_owner', 'frank';(Ссылка здесь и здесь )
superjos
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.