Я хотел решить проблему, очень похожую на эту. Единственное различие заключается в том, что мне нужен инструмент, который был более общим, а также агрегированным DBMS. Я хотел использовать инструмент в производственных средах, а некоторые из целевых баз данных не были Oracle.
Что я придумал, была функция Powershell, которая выполняет подстановку параметров и генерирует повторяющийся скрипт, содержащий последовательность операторов GRANT. Выходной сигнал выглядит как
grant ALL
on Employees
to DBA;
grant READ
on Employees
to Analyst;
grant READ, WRITE
on Employees
to Application;
grant ALL
on Departments
to DBA;
grant READ
on Departments
to Analyst, Application;
Есть два входа в мой инструмент, файл шаблона и файл csv.Файл шаблона выглядит следующим образом:
grant $privs
on $table
to $user;
И файл CSV выглядит следующим образом:
privs,table,user
ALL,Employees,DBA
READ,Employees,Analyst
"READ, WRITE", Employees, Application
ALL,Departments,DBA
READ,Departments,"Analyst, Application"
инструмент расширения выглядит следующим образом:
<# This function is a table driven template tool.
It's a refinement of an earlier attempt.
It generates output from a template and
a driver table. The template file contains plain
text and embedded variables. The driver table
(in a csv file) has one column for each variable,
and one row for each expansion to be generated.
5/13/2015
#>
function Expand-csv {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string] $driver,
[Parameter(Mandatory=$true)]
[string] $template
)
Process
{
$OFS = "`r`n"
$list = Import-Csv $driver
[string]$pattern = Get-Content $template
foreach ($item in $list) {
foreach ($key in $item.psobject.properties) {
Set-variable -name $key.name -value $key.value
}
$ExecutionContext.InvokeCommand.ExpandString($pattern)
}
}
}
Наконец, пример вызова к инструмент выглядит следующим образом:
Expand-csv demo.csv demo.tem > demo.sql
Обратите внимание, что спецификация csv-файла входит в первую очередь, а спецификация файла шаблона - вторая. обратите внимание, что «формальные параметры», используемые в файле шаблона, выглядят как переменные Powershell. Это то, что они есть. Обратите внимание, что имена, используемые в шаблоне, соответствуют именам, которые отображаются в заголовке файла csv.
Я действительно использовал предшественник этого инструмента с различными диалогиями SQL, а также с целевыми языками, отличными от SQL. Я даже использовал его для создания повторяющегося сценария Powershell, который не более чем вызывает другой скрипт .ps1, снова и снова, с различными фактическими параметрами.
Это не самый элегантный инструмент в мире, но он мне очень помогает.
Думаю, вам нужно сделать это нелегко. Прокрутите «All_TAB_PRIVS» и сгенерируйте этот скрипт. Интересный вопрос. Я хотел бы знать, если это возможно. – Guru