Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как заскриптовать разрешения в базе на Powershell?  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1197
Спросил у программистов, но они, наверное не очень хорошо знают такие вопросы.

У меня есть джоба, которая скриптует схему базы. Как в Powershell заскриптовать разрешения перечисленные ниже?

Спасибо.


EXEC sp_addrolemember N'db_datareader', N'MyUser' 
GO 
GRANT EXECUTE TO [MyUser] 
GO 
GRANT Create procedure TO [MyUser] 
GO
GRANT Create queue TO [MyUser] 
GO 
GRANT Create service TO [MyUser] 
GO 
GRANT Subscribe query notifications TO [MyUser] 
GO
GRANT View definition TO [MyUser] 
GO
6 июл 12, 04:58    [12825972]     Ответить | Цитировать Сообщить модератору
 Re: Как заскриптовать разрешения в базе на Powershell?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ха. Обычный скриптинг по структуре не даёт такого. Права привязаны к объекту, а не к пользователю.
Об этом намекает структура ScriptingOptions
$ScriptOption = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions;
$ScriptOption.Permissions = $true;
(gi SQLSERVER:\SQL\<MyServer>\<DEFAULT|Instance>\Databases\<MyDataBase>).Script($ScriptOption);
Нужно видимо самому писать код генератора для скриптинга в разрезе пользователя.

Если поставить:
$ScriptOption.WithDependencies = $true;
То вывалится в ошибку. Аналогично в самой струдии:
TITLE: Microsoft SQL Server Management Studio
------------------------------

Discover dependencies failed. (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1750.9+((dac_inplace_upgrade).101209-1051+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Discover+dependencies+Scripter&LinkId=20476

------------------------------
ADDITIONAL INFORMATION:

User is not supported in dependency discovery. Only objects of the following types are supported: UserDefinedFunction, View, Table, StoredProcedure, Default, Rule, Trigger, UserDefinedAggregate, Synonym, UserDefinedDataType, XmlSchemaCollection, UserDefinedType, UserDefinedTableType, PartitionScheme, PartitionFunction, DdlTrigger, PlanGuide, SqlAssembly, UnresolvedEntity. (Microsoft.SqlServer.SqlEnum)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------
6 июл 12, 10:04    [12826661]     Ответить | Цитировать Сообщить модератору
 Re: Как заскриптовать разрешения в базе на Powershell?  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1197
Mnior
Нужно видимо самому писать код генератора для скриптинга в разрезе пользователя.


А что это такое? В данный момент этот кусок я просто захардкодил, т.е.:

$timestamp = Get-Date -Format yyyy-MM-dd
#SCRIPT
$a = "EXEC sp_addrolemember N'db_datareader', N'MyUser' `nGO `nGRANT EXECUTE TO [MyUser] `nGO `nGRANT Create procedure TO [MyUser] `nGO
 `nGRANT Create queue TO [MyUser] `nGO `nGRANT Create service TO [MyUser] `nGO `nGRANT Subscribe query notifications TO [MyUser] `nGO
 `nGRANT View definition TO [MyUser] `nGO"
$a  | Out-File "Z:\MyDB\11_Permissions $timestamp.sql" -Append


Разумеется если эти разрешения поменяются, то мой скрипт это не "заметит". Нехорошо это.
6 июл 12, 10:12    [12826707]     Ответить | Цитировать Сообщить модератору
 Re: Как заскриптовать разрешения в базе на Powershell?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Smo, Smo - гимно ваш Smo. Всё равно приходится писать свой ласапед, с блекджеком и ...
OpenSource рулит.

Если вы смотрите на объек User и видите функции EnumObjectPermissions() - не обольщайтесь, там тот же самый смысл (почти все объекты наследуют интерфейс IObjectPermission).

Но с ними я соглашусь. Глупо давать доступ пользователя на объекты (use Roles Luke), и вполне логично, что это свойство объекта, а не роли. Для скриптования должно быть мопописуально: Роль - Пользователь или Пользователь - Роль. А для анализа/контроля доступа интерфейс есть, скрипты не для этого.
6 июл 12, 10:29    [12826839]     Ответить | Цитировать Сообщить модератору
 Re: Как заскриптовать разрешения в базе на Powershell?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Roust_m
В данный момент этот кусок я просто захардкодил, т.е.:
FacePalm.jpg
6 июл 12, 10:32    [12826865]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить