Tôi muốn giải quyết một vấn đề rất giống với vấn đề này. Sự khác biệt duy nhất là tôi muốn có một công cụ chung chung hơn, và cũng là DBMS bất khả tri. Tôi muốn có thể áp dụng công cụ này trong môi trường sản xuất và một số cơ sở dữ liệu đích không phải là Oracle.
điều tôi đã nghĩ ra là chức năng Powershell thực hiện thay thế tham số và tạo tập lệnh lặp lại chứa chuỗi các câu lệnh GRANT. Đầu ra trông giống như
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;
Có hai đầu vào cho công cụ của tôi, tệp mẫu và tệp csv.Các tập tin mẫu trông như thế này:
grant $privs
on $table
to $user;
Và file csv trông như thế này:
privs,table,user
ALL,Employees,DBA
READ,Employees,Analyst
"READ, WRITE", Employees, Application
ALL,Departments,DBA
READ,Departments,"Analyst, Application"
Các công cụ mở rộng trông như thế này:
<# 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)
}
}
}
Cuối cùng, một cuộc gọi mẫu đến công cụ trông giống như sau:
Expand-csv demo.csv demo.tem > demo.sql
lưu ý rằng thông số tệp csv xuất hiện trước và thông số tệp mẫu đến thứ hai. lưu ý rằng "thông số chính thức" được sử dụng trong tệp mẫu giống như biến Powershell. Đó là những gì họ đang có. lưu ý rằng các tên được sử dụng trong mẫu khớp với tên xuất hiện trong tiêu đề của tệp csv.
Tôi đã thực sự sử dụng tiền thân của công cụ này với một loạt các phương ngữ SQL, và cũng với các ngôn ngữ đích khác với SQL. Tôi thậm chí đã sử dụng nó để tạo ra một kịch bản Powershell lặp đi lặp lại mà không có gì hơn là gọi một tập lệnh .ps1, hơn và hơn nữa, với các thông số thực tế khác nhau.
Nó không phải là công cụ thanh lịch nhất trên thế giới, nhưng nó phục vụ tốt cho tôi.
Tôi đoán bạn phải làm điều đó một cách khó khăn. Lặp qua "All_TAB_PRIVS" và tạo tập lệnh này. Một câu hỏi thú vị. Tôi muốn biết nếu có thể. – Guru