SQL Server: Пользовательские роли

10-ки лет была возможность определения пользовательских ролей в базах данных для облегчения управления процессом предоставления разрешений на доступ к базе данных, но на уровне экземпляра всегда было девять фиксированных ролей (либо восемь, если вы используете версию, предыдущую SQL Server 2000, — роль bulkadmin появилась в SQL Server 2005). Сейчас, с возникновением SQL Server 2012 в конце концов появилась возможность сотворения необычных, либо пользовательских, ролей сервера.

Многие годы недоступность таковой функциональности была источником мигрени админов SQL Server. Что вы делали, если необходимо было предоставить права нескольким юзерам либо группам на уровне экземпляра и обеспечить синхронизацию этих прав? Допустим, вам необходимо предоставить право View System State большенному числу юзеров, чтоб они могли созидать информацию о блокировке в центрах разработки. Приходилось предоставлять права по отдельности каждому юзеру либо доменной группе.

Если все имена входа являлись доменными, был обходной путь: можно было сделать доменную группу, в которую включить всех юзеров, кому были необходимы такие права (при всем этом было надо создавать отдельные группы для каждого сервера, если необходимо было предоставить права на нескольких серверах). Можно было добавить юзеров в эту группу, сделать имя входа, связанное с этой доменной группой, после этого предоставить группе право View Server State на сервере. Но это необходимо было делать очень пристально. По другому можно было предоставить право входа юзерам, у каких такового права ранее не было. Была даже возможность предоставления юзерам прав, которых им предоставлять нельзя.

Создание роли средствами T/SQL

Существует много методов сотворения пользовательской роли на сервере, в том числе средствами T/SQL, SQL Server Management Studio и Windows PowerShell. Если необходимо сделать пользовательскую серверную роль с применением T/SQL, необходимо пользоваться 3-мя командами: аннотация Create Server Role создаст пользовательскую серверную роль, аннотация Alter Server Role добавит юзера в роль и, в конце концов, аннотация Grant предоставит нужные права роли.

Внедрение этих 3-х инструкций показано в последующем коде, который делает пользовательскую серверную роль по имени ViewServerState. В роль добавляется юзер SomeFakeLogin, и роли предоставляется право View Server State. Чтоб предоставить это право другим юзерам, довольно легко добавить их в готовую роль аннотацией Alter Server Role.

USE [master]
GO
CREATE SERVER ROLE [ViewServerState] AUTHORIZATION [sa]
GO
ALTER SERVER ROLE [ViewServerState] ADD MEMBER [SomeFakeLogin]
GO
GRANT VIEW SERVER STATE TO [ViewServerState]
GO

Для удаления юзера из роли употребляется аннотация Alter Server Role. При всем этом употребляется на параметр Add Member, а Drop Member:

ALTER SERVER ROLE [ViewServerState] DROP MEMBER [SomeFakeLogin]
GO

Когда необходимо развернуть одну либо более пользовательских серверных ролей на многих экземплярах SQL Server, есть несколько вероятных вариантов. Наверное вам не понравится подключаться к каждому серверу по отдельности и создавать на их пользовательские серверные роли. Один из вариантов — внедрение консоли SQL Server Management Studio. В ней можно делать сценарии на T/SQL сходу на нескольких экземплярах.

Можно также пользоваться компонентами Windows PowerShell сервера SQL Server для развертывания новых пользовательских серверных ролей на всех экземплярах SQL Server в организации. (Существует много вариантов использования Windows PowerShell для выполнения задачки, но их описание выходит за рамки этой статьи.)

Консоль SQL Server Management Studio

Задачку можно просто выполнить средствами графического интерфейса SQL Server Management Studio. Чтоб сделать пользовательскую серверную роль, подключитесь к экземпляру средствами Object Explorer. В обозревателе объектов перейдите к узлу < имя_экземпляра>/Security/Server Roles. Щелкните правой кнопкой Server Roles и изберите New Server Role. В открывшемся окне New Server Role в поле Server role name укажите имя роли, в поле Owner укажите обладателя роли, после этого укажите объекты и разрешения, которые должны предоставляться членам роли (рис. 1).

SQL Server: Пользовательские роли

Рис. 1. Укажите права, которые должна предоставлять роль

По окончании работы на страничке General перейдите на страничку Members (рис. 2) и укажите имена входа SQL Server, которые должны заходить в эту пользовательскую серверную роль.

SQL Server: Пользовательские роли

Рис. 2. Определение членов роли

После определения членов роли на страничке Members перейдите на страничку Memberships. Тут задаются серверные роли, членом которых должна быть пользовательская серверная роль. Если на этой страничке избрать какую-то роль, юзеры, члены создаваемой пользовательской серверной роли, будут также владеть правами избранной роли.

Если сделать пользовательскую роль и сделать ее членом фиксированной серверной роли serveradmin (рис. 3), все члены вновь сделанной пользовательской роли будут также владеть правами роли serveradmin. Как и при вложении доменных групп либо ролей баз данных, при вложении ролей нужно соблюдать огромную осторожность, чтоб не предоставить юзерам прав, которых у их быть не должно.

SQL Server: Пользовательские роли

Рис. 3. Пользовательские роли можно включать в другие серверные роли

Чтоб организовать вложение ролей средствами T/SQL, опять будет нужно аннотация Alter Server Role с параметром Add Member. К примеру, чтоб сделать пользовательскую серверную роль ViewServerState членом фиксированной серверной роли setupadmin, необходимо поменять фиксированную серверную роль setupadmin.

ALTER SERVER ROLE [setupadmin] ADD MEMBER [ViewServerState]
GO

В пользовательских серверных ролях может быть много юзеров. Есть 10-ки прав уровня экземпляра, которые можно предоставить пользовательской серверной роли для упрощения управления этими правами. Можно также сделать роль для младшего админа БД, которой предоставить часть, но не все права админа. Можно сделать группу AlwaysOnAdmin, которая предоставляет право на выполнение перехода базы данных AlwaysOn (что должно производиться в рамках SQL Server) не предоставляя всей полноты административных прав.

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

Аналогичный товар: Комментирование на данный момент запрещено, но Вы можете оставить ссылку на Ваш сайт.

Комментарии закрыты.